在Android Studio中利用gradle来自动编译jni
来源:互联网 发布:淘宝信用卡可以套现吗 编辑:程序博客网 时间:2024/05/20 22:37
在最近的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
0 0
- 在Android Studio中利用gradle来自动编译jni
- 【android ndk】macos环境下Android Studio中利用gradle编译jni模块及配置
- 【android ndk】macos环境下Android Studio中利用gradle编译jni模块及配置
- 在Eclipse中使用Ant来自动编译J2me程序
- Android Studio - Gradle项目 - NDK开发 - JNI编译中引用本地so - 记录
- Android Studio利用Gradle配置NDK-JNI开发环境
- Android Studio中Gradle编译配置
- Android Studio Gradle项目中添加JNI so文件
- Android studio 利用gradle快速编译出apk
- Android studio 利用gradle快速编译出apk
- gradle在android studio中应用入门
- 在Android Studio中使用Jni
- 在Android Studio中进行JNI编程
- 在Android Studio中使用Jni
- 如何在Android Studio中使用JNI
- android studio编译卡在gradle不能退出
- 有时编译android studio卡在gradle的某个任务
- android studio jni开发gradle 学习
- 【Python专题】使用函数
- 程序员会设计后是一种什么样的感觉
- 【LeetCode】576. Out of Boundary Paths
- Thinkphp模板标签if和eq的区别和比较
- LuaJava在Java、Android中的使用
- 在Android Studio中利用gradle来自动编译jni
- java异步计算Future的使用
- 搜索--02
- 01-python学习笔记:list和tuple
- Qt4过渡至Qt5
- Mysql
- Category VS Extension 原理详解
- 一些c中常用的功能函数
- PAT 乙级 1039. 到底买不买(20)