Android Studio使用新的Gradle构建工具配置NDK环境(二)

本文介绍了Android Studio配置NDK环境,特别是针对2.2之前的Gradle构建工具,包括两种主要的配置方式:1.3实验版本的gradle-experimentall和2.0之后的ndk+externalNdkBuilds。详细讲解了如何在build.gradle文件中添加配置,以支持armeabi-v7a平台,并解决C代码跟踪问题。同时,文章提到了其他未生效的配置选项,并指出ABI_PLATFORM可以通过minSdkVersion设置。

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

Android studio 2.2之前gradle的支持ndk的版本主要有两个,一个是1.3实验版本的gradle-experimentall的写法,另一个是2.0之后ndk+externalNdkBuilds的写法,本篇主要介绍ndk的配置。

 
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"

    defaultConfig {
        applicationId "com.qualcomm.svrapitest"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0"
        ndk {

            abiFilters "armeabi-v7a"//编译支持的平台
        }
    }

    sourceSets {
        main {
            jni.srcDirs=[]
            jniLibs.srcDirs 'src/main/libs' //指定lib的目录,编译时链接用
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':lib')
}


这样编译出来的代码有个问题, 就是不能够跟踪,ctrl+左键没有作用。应该是LLDB没有作用。
//ndk-build,已有Android.mk
externalNativeBuild {
    ndkBuild {
        path file('src/main/jni/Android.mk')
    }
}
加入以上代码后,gradle才会真正的去编译ndk部分,之后C代码就可以跟踪了,可能编译一次通过之后,LLDB就启动了。编译器会自动包含同目录下的Application.mk文件。另外如果这样写是会有问题的,代码如下,尝试了很多次,这样写一直是编译不过的。
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"

    defaultConfig {
        applicationId "com.qualcomm.svrapitest"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0"

        externalNdkBuild{
         ndkBuild{

            abiFilters "armeabi-v7a"//编译    支持的平台
                }
        }
    }

    sourceSets {
        main {
            jni.srcDirs=[]
            jniLibs.srcDirs 'src/main/libs' //指定lib的目录,编译时链接用
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':lib')
}



gradle中加入以上代码后,代码就可以跟踪了,这部分脚本与buildTypes{}同级。这个功能在Android studio 2.2中才有,在第四篇中我们还会讲到。
另一个写法比较古老,比较复杂,有兴趣的可以自行研究。

ps:ndk其他的语法
ndk {
    moduleName "mtptest"
    abiFilters "armeabi-v7a"//编译支持的平台
    cFlags '-std=c++11 -fexceptions -fpermissive'
    stl 'stlport_static'
}
经过测试,ndk{}里面的部分abiFilters有用,其他测试没什么效果。

以前一直找不到 ABI_PLATFORM在哪里设置,今天发现ABI_PLATFORM = minSdkVersion
本篇采用了最常规的ndk的配置来编译ndk,下篇尝试用最新的cmake来编译。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值