Android Studio对ndk开发调试的支持

2016-12-27  本文已影响296人  difcareer

前言

编写C/C++代码最大的痛苦就是语法提示和调试,早期Android Studio对NDK不做支持或者支持得不够好,导致NDK开发异常缓慢,最大的问题是调试,经常一些崩溃问题需要反复的加日志排查。
然而现在Android Studio对NDK的开发和调试都做了比较好的支持(仍然存在一些bug)。下面就来说一下如何进行配置。

支持版本

不太确定是从哪个版本开始支持的,但我当前使用的版本能很好支持:

Android Studio 2.2.3
gradle-2.14.1-all.zip   //在gradle-wrapper.properties中指定
com.android.tools.build:gradle:2.2.3   //在项目根目录下的build.gradle中指定

假如以前的项目不是这些版本,手动进行升级。

对ndk-build的支持

如果项目之前使用ndk-build那一套编译方式,即需要Android.mk,那么只要在module下的build.gradle中稍加配置即可集成,例子如下:

1 apply plugin: 'com.android.application'
2 
3 android {
4     compileSdkVersion 25
5     buildToolsVersion "24.0.3"
6     defaultConfig {
7         applicationId "com.andr0day.test"
8         minSdkVersion 19
9         targetSdkVersion 25
10        versionCode 1
11        versionName "1.0"
12        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13        externalNativeBuild {
14            ndkBuild{
15                abiFilters "armeabi-v7a"
16                cFlags "-DNDKLOG"
17                cppFlags "-std=c++11"
18            }
19        }
20    }
21    buildTypes {
22        release {
23            minifyEnabled false
24            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
25        }
26    }
27    externalNativeBuild {
28        ndkBuild{
29            path "src/main/cpp/Android.mk"
30        }
31    }
32}
33
34dependencies {
35    compile fileTree(dir: 'libs', include: ['*.jar'])
36    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
37        exclude group: 'com.android.support', module: 'support-annotations'
38    })
39    compile 'com.android.support:appcompat-v7:25.0.0'
40    testCompile 'junit:junit:4.12'
41}

其中有两处需要注意:

  1. android.externalNativeBuild.ndkBuild配置好Android.mk的路径
  2. android.defaultConfig.externalNativeBuild.ndkBuild配置好ndk-build的参数

你同样可以在Android.mk的同级目录下放置Application.mk,配置依然会生效,比如在其中指定:APP_STL := stlport_static

关于Android.mk的更多知识,参考Android.mk语法解释[转]

对CMake的支持

现在AndroidStudio默认对CMake进行支持,例子如下:

1 apply plugin: 'com.android.application'
2 
3 android {
4     compileSdkVersion 25
5     buildToolsVersion "24.0.3"
6     defaultConfig {
7         applicationId "com.andr0day.ndktest"
8         minSdkVersion 19
9         targetSdkVersion 25
10        versionCode 1
11        versionName "1.0"
12        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13        externalNativeBuild {
14            cmake {
15                cppFlags "-std=c++11 -frtti -fexceptions"
16            }
17        }
18    }
19    buildTypes {
20        release {
21            minifyEnabled false
22            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23        }
24    }
25    externalNativeBuild {
26        cmake {
27            path "CMakeLists.txt"
28        }
29    }
30}
31
32dependencies {
33    compile fileTree(dir: 'libs', include: ['*.jar'])
34    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
35        exclude group: 'com.android.support', module: 'support-annotations'
36    })
37    compile 'com.android.support:appcompat-v7:25.0.0'
38    testCompile 'junit:junit:4.12'
39}

可以看到对应于之前ndkBuild的地方被调整为cmake。

关于更多CMake的知识,参见这里

上一篇下一篇

猜你喜欢

热点阅读