博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android][Android Studio] Gradle项目中加入JNI生成文件(.so文件)
阅读量:4595 次
发布时间:2019-06-09

本文共 2461 字,大约阅读时间需要 8 分钟。

版权声明:本文作者:Qiujuer https://github.com/qiujuer; 转载请注明出处,盗版必究。。! https://blog.csdn.net/qiujuer/article/details/24209457

为了适应潮流使用Android Studio还是有半年多了。

对于从Eclipse迁移项目到Android Studio中增加.jar文件和.so文件无疑是一件非常重要也是非常头疼的问题!

在最新版本号中,默认是自己主动打包libs以下的全部.jar文件的,所以jar不用多讲了。

增加.SO(这个是要看你的项目Gradle版本号)

提示:都是设置build.gradle文件

(1)老版本号,好像是指0.5曾经的,详细不太记得了。方法例如以下:

task copyNativeLibs(type: Copy) {    from(new File(project(':MyProject').buildDir, 'native-libs')) { include '**/*.so' }    into new File(buildDir, 'native-libs')}tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }clean.dependsOn 'cleanCopyNativeLibs'tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->    pkgTask.jniDir new File(buildDir, 'native-libs')}
(2)新版本号。详细版本号号忘记了。反正假设你下载的是最新的那么自带就是最新的编译器。

这个版本号我如今知道的有三种办法做到打包.SO文件

(2.1)打包前先生成.Jar文件后自己主动解包到apk文件

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {    destinationDir file("$buildDir/native-libs")    baseName 'native-libs'    extension 'jar'    from fileTree(dir: 'libs', include: '**/*.so')    into 'lib/'}tasks.withType(Compile) {    compileTask -> compileTask.dependsOn(nativeLibsToJar)}
以下一句话就是打包生成文件夹(build\native-libs)中的.jar文件

compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')

(2.2)手动生成.Jar文件后自己主动解包到apk文件

这个方式须要自己手动进行.SO文件压缩,详细步骤为:将全部须要使用的.so文件压缩为.zip文件(zip中的文件文件夹结构为: lib/armeabi/*.so)然后把zip文件后缀改为.Jar然后放到libs生成apk就ok

默认就是自己主动打包全部.Jar文件:

dependencies {    compile fileTree(dir: 'libs', include: '*.jar')}
(2.3)这也就是如今
我正在使用的方式(推荐)。事实上弄了大半天无非就是把.SO文件打包到APK的lib文件夹中,假如细致阅读了Gradle的用法。自然就知道事实上Gradle官方在新版已经自己主动实现了打包.SO文件的.非常easy级就是在配置的android节点下增加以下的内容就ok:

sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }
其它地方无需改动,整个项目的配置文件例如以下:

apply plugin: 'android'android {    compileSdkVersion 19    buildToolsVersion "19.0.0"    defaultConfig {        minSdkVersion 16        targetSdkVersion 19        versionCode 1        versionName "1.0"    }    buildTypes {        release {            runProguard false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'        }    }    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])}

这不就是非常easy么,无需手动打包,也无需非常复杂的打包拷贝命令。简单的操作就ok。能够说多看看官方文档是多么的重要。

原创作品,转载请注明出处。

    QIUJUER(qiujuer@live.cn)

转载于:https://www.cnblogs.com/ldxsuanfa/p/9993131.html

你可能感兴趣的文章
MySQL中的decimal
查看>>
gitlab+jenkins持续集成(一)
查看>>
4.signed/unsigned char
查看>>
iOS,UIImage有个contentmodel属性
查看>>
Debian 7 amd64 + fbterm + ucimf
查看>>
数据结构之【排序】复习题
查看>>
spring boot 首次请求Controller慢
查看>>
事件绑定
查看>>
grep命令详解
查看>>
iterm2快捷键
查看>>
asp.net 生成PDF方法
查看>>
EntityFramework 7 Join Count LongCount 奇怪问题(已修复)
查看>>
设计模式---组件协作模式之模板方法模式(Tempalte Method)
查看>>
程序员心理看WEB开发框架
查看>>
@Data 注解在实体类的使用可省去生成GET,SET方法
查看>>
webpack 介绍 & 安装 & 常用命令
查看>>
ASP.NET刷新页面的六种方法总结
查看>>
ECSHOP增加独立评论页面,并分页显示
查看>>
linux date -s
查看>>
jQuery实现可编辑表格
查看>>