Eclipse中导出到Android Studio的粗心小坑一则

来源:互联网 发布:松江3208g编程类型代码 编辑:程序博客网 时间:2024/06/06 19:59

今天把一个原本是Eclipse下的一个开源项目导入到Android Studio中,Android Studio非常智能,在我导入后,开发了一段时间项目,由于是Eclipse导出时生成的build.gradle文件,所以目录结构没有变化。于是乎我在加上了JNI目录之后,开始加入C代码。等到我编译进手机测试的时候,总是找不到我的库。找不到库的原因一般就是so文件不存在于apk文件中。我就找了一下build\outputs\apk目录下的apk文件,用7zip打开后便是这幅景象:

image

明明存在jni目录,但是却没有编译so文件进去。

 

后来我经过一番资料的搜寻得知,既然build.gradle为我们重新映射了目录结构,jni目录是否也正确映射了呢?

image

 

果不其然,在main的接收的闭包中没有映射jni目录,仅仅映射了清单文件,assets,src,res这几个常用目录,jni目录没有映射进去。于是乎在build.gradle中加了一句话:

image

 

清理了项目,重新Make module,运行一下。果然不会再报找不到库的问题了。

 

重新用7zip打开apk文件,

image

 

lib目录果然存在。

 

综上所述,由于Eclipse导出的项目的目录和Android Studio不相同,因此编译所需要的目录也需要通过build.gradle脚本告诉gradle在编译时

重新映射这些目录。android studio默认编译使用的目录是/src/main/java, /src/main/res还有/src/main/jni,因为jni很少用到,所以Eclipse在导出gradle的时候没有重新映射,这导致gradle在组织构建apk的时候编译目录中没有找到/src/main/jni,却又不知道开发者将C/C++源码放在了/jni目录中,所以没有编译生成so链接库。解决方法只要在build.gradle当中main的接收闭包参数中加入这一行:

image

 

重新make module,运行。解决问题。

 

 

 

后记:

gradle的配置文件非常强大,你可以通过这个机制随意映射你想要的组织的目录风格,可以充分利用gradle脚本去编译生成apk文件,其灵活强大不容小视。这也就知道了Google把开发平台转到Android Studio上、编译系统从ANT或m2android 转移到Gradle上的一个很好的理由吧。当然,现在的Android Studio的版本才到1.1,gradle已经到了2.2.1这个成熟的版本,相比将来还会有更出色的表现。

 

关于Gradle for Android Studio 的一些知识可以从android开发者官网上找到

传送门:http://developer.android.com/intl/zh-cn/tools/building/configuring-gradle.html

 

更加具体的描述和build.gradle中的代码块的用法也能在开发者官网上找到:

传送门:http://developer.android.com/intl/zh-cn/tools/building/plugin-for-gradle.html

0 0
原创粉丝点击