adnroid NDK debug调试

本文介绍了在Android中调试第三方C++代码的两种方法:CMAKE方式和工程配置NDK远程调试。在尝试CMAKE方式时遇到了c++引用错误,而通过添加Native Support和调整目录结构,成功在build.gradle中配置了NDK远程调试。需要注意的是,调试前要删除libs下的so文件,否则会直接调用库而非源码。虽然真机调试可行,但Genymotion虚拟机可能出现无法连接断点的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在弄android的第三方so调用,用jndi调试c++代码走了不少弯路,

方式一 CMAKE方式,配置完成后一直报c++引用错误,ndk-build是没问题的代码。配置麻烦觉得放弃。

方式二在工程配置ndk 远端调试。前置条件NDK给工程加上Native Support,在setting的插件里plugins添加。

 c++代码合并在一个工程里,目录按so文件目录放置。

添加build.gradle如下:


android {
    compileSdkVersion 28
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "temp
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        ndk {
            abiFilters "armeabi-v7a"
           // moduleName "temp"
        }

    }
    externalNativeBuild {
        // 采用ndk-build
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
        // 如采用 cmake 使用如下配置
        //cmake {
        //     path 'src/main/jni/CMakeLists.txt'
        //}
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            ndk {
                debuggable = true
            }

        }
        debug {
            debuggable = true
            jniDebuggable = true
        }

    }

//    sourceSets {
//        main {
//            jniLibs.srcDirs = ['libs']
//        }
//    }
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation files('libs/lite-orm-1.9.1.jar')
}

这里要把libs下so文件删掉,否则不能进去代码直接还是调用so文件。

执行debug调试就可以了,真机可以调试,Genymotion一直连接不上不能进入断点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值