最近在弄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一直连接不上不能进入断点。