美文网首页
Android Studio对ndk开发调试的支持

Android Studio对ndk开发调试的支持

作者: difcareer | 来源:发表于2016-12-27 11:51 被阅读296次

    前言

    编写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的知识,参见这里

    相关文章

      网友评论

          本文标题:Android Studio对ndk开发调试的支持

          本文链接:https://www.haomeiwen.com/subject/nkgsvttx.html