最近在使用Android Studio开发android项目,我的项目是由gradle构建的,gradle的优势文档上有说明,当你不断使用中,我越来越发现,太TMD方便啦,优势大大的明显。

打包,功能模块多实现切换等等吧,在这里感谢Nick Xu的引导和帮助。

回到正题,如何加载so库。以前的项目都没有使用jni比较简单的项目,最近由于工作原因,感觉切换成Android studio基于gradle构建项目能够很好的解决公司内多款产品的问题,所所以开始研究如何加载so库,发现这方面的资料很少,多次尝试终于成功啦,在此笔记。(如有错误,请留言纠正)。

一:so库应该放在那里呢?


│app

│ |── libs

│ │ ├── armeabi

│ │ ├── libtest.so

如上图,我这里放在libs中,注意在build.gradle需要配置这个路径为libs。

二:如果书写build.gradle?

    task copyNativeLibs(type: Copy) {        from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'    }    tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }    clean.dependsOn 'cleanCopyNativeLibs'    tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->        pkgTask.jniDir file('build/native-libs')    }

注意:第二行中的dir为so库所在目录,我这里是libs,可根据具体情况自己配置。其他都不用动。


在解决这个问题时,我尝试的几种方案:

1.https://gist.github.com/khernyo/4226923#comment-812526

这个是在stackoverflow.com中很多人推荐的。

task copyNativeLibs(type: Copy) {from(new File(project(':main').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')}


注意下第二行,这里需要制定project,我不太清楚project应该设置成什么,尝试了几次,没有成功。

这个方案和我使用的方案,主要差别就是指定project,如果您能够正确配置,请邮件我cczscq@163.com。谢谢。

2。http://www.w3c.com.cn/%E5%9C%A8android-studio-%E4%B8%AD%E5%8A%A0%E5%85%A5jar-%E5%92%8C-so-%E6%96%87%E4%BB%B6

这个方案看似很搞笑,我实验了几次,发现so的确copy到/data/data/XXXX/lib/中,当时在app中真正调用so库是还是加载失败,我估计原因可能是我哪里做的不对。

http://rickosborne.org/blog/2013/07/build-and-use-libgdx-for-x86-in-android-studio/这个是一个开源的项目在android-stdio中使用的教程,它采取同样的方法,

看来这个看似搞笑的方法也许真的能够奏效,很遗憾的是我没有能够成功,大家有谁使用这种方法解决soku加载问题,可以邮件我,同上,谢谢。

使用gradle构建android项目的人并不是很多,中文资料质量大家都懂,在http://tools.android.com/tech-docs/new-build-system/user-guide中没有找到so相关的说明,

在此总结下我的解决方案,希望能够对大家有所帮助。




更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android 使用html5作布局文件: webview跟javascript交互
  6. Android(安卓)Resource介绍和使用
  7. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  8. 使用NetBeans搭建Android开发环境
  9. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link

随机推荐

  1. Android培训班(46)
  2. Android(安卓)IPC框架分析 Binder,Service
  3. Android内存分析和优化
  4. Android:手机扫描局域网所有ip,并进行sock
  5. Android如何通过https协议下载自己的http
  6. 关于android的屏幕常亮和完全关闭程序
  7. Android: 绘制的文本如何排版
  8. Android Studio主要目录及文件简介
  9. Android 下移植WIFI 驱动
  10. 在Android模拟机上跑javaeye android 客