Android Studio如何同NDK集成
来源:互联网 发布:陕西经济知乎 编辑:程序博客网 时间:2024/06/03 19:52
原文: http://ph0b.com/android-studio-gradle-and-ndk-integration/
将native库(.so文件)集成到你的APK包
以前的方法是把.so放到.jar包里, 现在很简单了
在 src/main/ 目录下(该目录下有 java和res两个子目录), 创建一个 jniLibs 目录
再创建相应ABI子目录(如 x86, mips, armeabi-v7a, armeabi)
最后,把相应的so文件放入对应的目录即可
build时,所有的.so文件都会被集成到你的apk里
如果jniLibs这个目录不适合你(你可能生成你的.so文件放在其他地方), 你可以在build.gradle里指定位置
android { ... sourceSets.main { jniLibs.srcDir 'src/main/libs' }}
是在 模块目录下的 build.gradle里, 工程目录下的build.gradle里没有android {] 这个条目
有洁癖的人,喜欢为每个架构单独生成一个APK,这样, APK的体积会比较小
那就可以使用abiFilter这个属性, 这个属性默认是设置为 all, 将所有平台的.so都打包进apk
也是在build.gradle的android条目下添加一些东西
android{ ... productFlavors { x86 { ndk { abiFilter "x86" } } mips { ndk { abiFilter "mips" } } armv7 { ndk { abiFilter "armeabi-v7a" } } arm { ndk { abiFilter "armeabi" } } fat }}
为不同的架构设置不同的版本号(方便google play store上架)
import java.util.regex.Pattern android { ... defaultConfig{ versionCode getVersionCodeFromManifest() } ... productFlavors { x86 { versionCode Integer.parseInt("6" + defaultConfig.versionCode) ndk { abiFilter "x86" } } mips { versionCode Integer.parseInt("4" + defaultConfig.versionCode) ndk { abiFilter "mips" } } armv7 { versionCode Integer.parseInt("2" + defaultConfig.versionCode) ndk { abiFilter "armeabi-v7a" } } arm { versionCode Integer.parseInt("1" + defaultConfig.versionCode) ndk { abiFilter "armeabi" } } fat }} def getVersionCodeFromManifest() { def manifestFile = file(android.sourceSets.main.manifest.srcFile) def pattern = Pattern.compile("versionCode=\"(\\d+)\"") def matcher = pattern.matcher(manifestFile.getText()) matcher.find() return Integer.parseInt(matcher.group(1))}
决定是否调用ndk-build
如果在你的工程目录下面有jni/目录, 那么build系统将会试图 调用 ndk-build来自动生成.so文件
当前的实现是: 忽略你jni目录下的Android.mk这个makefile,然后自动创建一个新的
对于简单的工程来说,这真是太方便了(你根本就不需要自己创建*mk文件)
但是对于大工程来说,这就有点令人烦恼了, 因为你需要Makefile提供的所有功能. 你可以在build.gradle文件里禁止
android{ ... sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call}
参考资料
http://www.flakor.cn/2014-02-07-198.html
http://www.nsdev.org/blog/2014/01/01/including-native-libraries-in-your-apk
http://stackoverflow.com/questions/21096819/jni-and-gradle-in-android-studio
- Android Studio如何同NDK集成
- Android Studio如何同NDK集成
- Android Studio集成NDK
- Android Studio中的NDK的集成过程
- 【修正版】Android Studio集成NDK环境
- Android Studio集成NDK开发环境
- Android Studio如何集成Genymotion
- Android Studio如何集成Genymotion
- Android Studio如何集成Genymotion
- Android Studio如何集成Genymotion
- Android Studio如何集成Genymotion
- Android Studio如何集成Genymotion
- Android Studio如何集成Genymotion
- Android studio中如何使用Ndk(Jni)?
- Android Studio如何创建NDK工程
- Ubuntu下NDK编译环境搭建及在Android Studio中集成NDK
- Android Studio如何集成Genymotion (2)
- 如何在Android Studio上集成SMSSDK
- JPA 注解笔记
- PowerDesigner(六)-物理数据模型(PDM逆向工程)
- XML解析SAX
- 黑马程序员——Objective-C学习之NSDate\NSData
- [转]Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android Studio如何同NDK集成
- PowerDesigner(七)-数据库的生成和修改
- 用c语言实现在十个数中求出最大的数
- SoC片上系统总线——AMBA
- BZOJ2657: [Zjoi2012]旅游(journey)
- 解释器文件
- sip 到 rtsp的视频网关
- hdu 1347 Grandpa is Famous
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)