androidstudio下NDK正确姿势
来源:互联网 发布:做seo需要什么技能 编辑:程序博客网 时间:2024/04/29 10:42
用androidstudio开发的小伙伴,应该知道自身的ndk自动编译就是鸡肋!
这里说2种方法:
1> 进入到工程jni目录运行ndk-build
如何快速复制jni路径
右键Copy Path或者按快捷键Ctrl+Shift+C
cd /home/wangxiong/Documents/Github/libraries/blur/src/main/jni~/Soft/android-ndk-r10e/ndk-build
编译完成就会在libs生成各个平台的so文件
2> 第2种方式,脚本配置
首先要把as自动编译关掉
sourceSets.main { jniLibs.srcDirs 'src/main/libs' jni.srcDirs = [] // This prevents the auto generation of Android.mk}
看代码,这里借鉴了Facebook的Fresco图片框架的gradle相关配置写法
传送门:https://github.com/facebook/fresco/blob/master/imagepipeline/build.gradle
可以研究下脚本的相关写法
import org.apache.tools.ant.taskdefs.condition.Os//导入Os包,方便下面判断系统平台Linux \ windowsapply plugin: 'com.android.library'dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1'}def getNdkBuildName() {//NDK编译工具名称,区别Linux和windows if (Os.isFamily(Os.FAMILY_WINDOWS)) { return "ndk-build.cmd" } else { return "ndk-build" }}def getNdkBuildFullPath() {//NDK全路径 File propFile = project.rootProject.file('local.properties') if (!propFile.exists()) { return getNdkBuildName() } Properties properties = new Properties() properties.load(propFile.newDataInputStream()) def ndkCommand = properties.getProperty('ndk.command') if (ndkCommand != null) { return ndkCommand } def path = null def ndkPath = properties.getProperty('ndk.path') if (ndkPath != null) { path = ndkPath } else { def ndkDir = properties.getProperty('ndk.dir') if (ndkDir != null) { path = ndkDir } } if (path != null) { if (!path.endsWith(File.separator)) { path += File.separator } return path + getNdkBuildName() } else { // if none of above is provided, we assume ndk-build is already in $PATH return getNdkBuildName() }}android { compileSdkVersion = 23 buildToolsVersion = "23.0.3" defaultConfig { minSdkVersion 15 targetSdkVersion 22 versionCode = 200 versionName = "2.0.0" } buildTypes { release { minifyEnabled = false proguardFiles.add(file('proguard-rules.pro')) } } sourceSets.main { jni.srcDirs = []//关掉自动编译 jniLibs.srcDirs 'src/main/libs' }// This prevents the auto generation of Android.mk}//编译任务注意type: Exectask hello_ndk_build(type: Exec) { commandLine getNdkBuildFullPath(), 'NDK_APPLICATION_MK=Application.mk', 'NDK_OUT=' + temporaryDir, "NDK_LIBS_OUT=" + file("src/main/libs").absolutePath, '-C', file("src/main/jni").absolutePath, '--jobs', Runtime.getRuntime().availableProcessors()}tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn "hello_ndk_build"//与task任务名相同}task hello_ndk_clean(type: Exec) { commandLine getNdkBuildFullPath(), 'clean', '-C', file("src/main/jni").absolutePath}clean.dependsOn 'hello_ndk_clean'//clean依赖上面定义的任务
参数ps:
@NDK_PROJECT_PATH
指定NDK编译的代码路径为当前目录,如果不配置,则必须把工程代码放Android工程的jni目录下
@NDK_APP_APPLICATION_MK
指定NDK编译使用的application.mk文件
@clean
清除所有编译出来的临时文件和目标文件
@NDK_OUT
指定编译生成的文件的存放位置
@NDK_LIBS_OUT
编译后最终的lib目录
注意观察build目录下生成的一些文件,和编译配置时的关联!
0 0
- androidstudio下NDK正确姿势
- AndroidStudio的正确使用姿势
- androidStudio添加.so文件正确姿势
- AndroidStudio2.2开发NDK的正确姿势
- AndroidStudio2.2开发NDK的正确姿势
- AndroidStudio下的NDK开发
- 走进AndroidStudio下的NDK
- 练习了下正手正确姿势
- Win7下Apploc的正确安装姿势
- Ubuntu下安装CodeBlocks的正确姿势
- Android下屏幕锁屏弹窗的正确姿势
- Mac下安装artifactory的正确姿势
- Ubuntu下安装CodeBlocks的正确姿势
- 走进AndroidStudio下的NDK(一)
- 走进AndroidStudio下的NDK(二)
- AndroidStudio 下用ndk 生成so包
- ionic下正确使用videogular的$API的姿势
- Linux下躺着搭建nodejs开发环境的正确姿势
- JAVA就是这样
- 数据结构 最小堆
- ACCESS 窗体组合框查询表名
- Struts 2.3.29 Dispatcher initialization failed问题
- java invoke简单入门例子(基于JDK接口实现)
- androidstudio下NDK正确姿势
- Best Time to Buy and Sell Stock with Cooldown
- Maven利用tomcat7发布Web
- 【Get深一度】GRE和托福的区别
- hrbust 1594 Gragon Ball【模拟】
- 通过一个简单的例子,说明class文件在运行过程中,import中class怎么被加载并执行的
- C++补第一次实验
- Json数据解析和生成(C/C++, 使用CJson)
- IOS实现Voip应用后台运行需要的几个配置项