Android Studio JNI学习之(5)-调试(LLDB与基于gradle-experimental插件)
要调试原生代码必需先安装LLDB与基于gradle-experimental插件
LLDB
在tools->Android->sdk manager 中的SDK tools中找到LLDB并安装.
gradle-experimental
classpath "com.android.tools.build:gradle-experimental:0.7.3"
不同版本的Experimental Plugin需要不同版本的gradle
app/gradle.build
apply plugin: 'com.android.model.application' model { //这一行是新加的,对应上边的修改, /** * 这里要注意一下,如果使用gradle-experimental,参数赋值要使用 = 号,而不是空格, * 所以要把原来文件中的空格都用等号去替换; * 还有一部分参数使用的函数也与原来不一样, * 实在不能确定的就找出ndk samples中的build.gradle文件对比一下。 */ android { compileSdkVersion = 25 buildToolsVersion = "25.0.2" defaultConfig { applicationId = "com.eric.pro" minSdkVersion.apiLevel = 10 //这两个参数和原来有点不一样,多了apiLevel targetSdkVersion.apiLevel = 25 versionCode = 1 versionName = "1.0" } ndk { //NDK设置 moduleName = "app" //动态库的名称 toolchain = 'clang' //编译器,据说这个比gcc要快,没有这个写native代码时没有自动补全的功能 CFlags.addAll(['-Wall', '-DHELLO_2']) //对应gcc中的编译选项 CFLAGS,方括号内是一个数组,可以有多个值 CFlags.add("-DHELLO_3") ldFlags.addAll(["-L../lib"]) //库文件路径 ldLibs.addAll(['log']) //库文件名 stl = "gnustl_static" //指示使用动态库还是静态库,stlport_static abiFilters.addAll('armeabi', 'armeabi-v7a', 'x86', 'arm64-v8a') //CPU架构 } buildTypes { release { ndk.debuggable = false minifyEnabled = true proguardFiles.add(file('proguard-rules.pro')) } debug { ndk.debuggable = true //有这个才会支持调试native 代码 } } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' }
配置完毕,直接打断点调试即可(与java一样)
使用gradle-experimental构建ndk,比以前简单多了,我们对比一下,我觉得最大的好处是Android.mk、Application.mk这两个文件再也不用写了