android Studio gradle so的加载

最近在使用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相关的说明,

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




 

posted on 2013-11-18 13:29  我的小人生  阅读(2003)  评论(0编辑  收藏  举报