在Android Studio中利用gradle来自动编译jni

转载自:http://coolerfall.com/tools/use-ndk-in-android-studio

 

在最近的Android开发中,项目逐渐从Eclipse迁移到Android Studio中来,google官方现在并未在Android Studio中支持ndk的开发,但是我们可以利用gradle自动编译jni。

步骤

1.在新建项目中找到local.properties,在里面加入ndk的路径(ndk必须是r9以上):

ndk.dir=E\:\\Android\\ndk-r10d

2.在app\src\main中新建jni文件夹,在这里面存放要编译的c/c++文件以及Android.mk

3.在app中的build.gradle中加入两个task:ndkBuild和copyJniLibs,第一个task为ndk执行编译,第二个task将编译好的so库copy至jniLibs目录,这样才Android Studio最后打包的时候才会将so库打包进去:

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "com.xxx.yyy"
        versionCode 1
        versionName '1.0'
        minSdkVersion 10
        targetSdkVersion 21
    }

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

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn 'ndkBuild', 'copyJniLibs'
    }

    sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
    }
}

task ndkBuild(type: Exec) {
    def ndkDir = project.plugins.findPlugin('com.android.application').sdkHandler.getNdkFolder()
    commandLine "$ndkDir/ndk-build.cmd", '-C', 'src/main/jni',
            "NDK_OUT=$buildDir/ndk/obj",
            "NDK_APP_DST_DIR=$buildDir/ndk/libs/\$(TARGET_ARCH_ABI)"
}

task copyJniLibs(type: Copy) {
    from fileTree(dir: file(buildDir.absolutePath + '/ndk/libs'), include: '**/*.so')
    into file('src/main/jniLibs')
}

 

这两个task不要放在android{}中,放在android{}外即可,否则无法编译。其中NDK_APP_DST_DIR为编译后的库存放的文件夹,根据需求自己设定,我在这里是设置为的buildDir下的nkd文件夹

4.最后编译,Android Studo会自动执行ndkBuild和copyJniLibs这两个task

ps:也可以使用命令行的方式来执行这两个task

转载于:https://www.cnblogs.com/SusieBlog/p/5378967.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值