我一直在使用 Android 的 0.13 插件的新功能 APK splits,成功将大多数构建脚本的大小减半,并将构建速度提高了 4 倍。我的应用程序每个平台都有超过 20MB 的库,因此保持 APK 大小较小是优先考虑的。在 0.13 版本之前,我们有一些脚本,可以动态地将 .so 文件分阶段放置在正确的构建文件夹中(取决于我们为哪个平台进行构建),然后执行完整的构建。这种方法虽然有效,但非常缓慢,而且涉及 gradle 和非 gradle 脚本的不幸混合。
最新的 APK 拆分功能解决了我的大部分问题,但我仍然遇到了 armeabi-v7a 库的问题。似乎当 gradle 构建 armeabi-v7a flavor 时,它只查找 /libs/armeabi-v7a 文件夹中定义的库,并忽略为 armeabi 而非 armeabi-v7a 编译的库。
例如,这是我的一个应用程序:
当我将它编译为armeabi-v7a时,Gradle会包含armeabi-v7a/lib3.so,但不包含armeabi/lib1.so和armeabi/lib2.so。在运行时,APK无法工作(显然),因为找不到lib1.so和lib2.so。
有没有办法告诉Gradle将armeabi/中找到但在armeabi-v7a/中未找到的库添加到armeabi-v7a APK中?
最新的 APK 拆分功能解决了我的大部分问题,但我仍然遇到了 armeabi-v7a 库的问题。似乎当 gradle 构建 armeabi-v7a flavor 时,它只查找 /libs/armeabi-v7a 文件夹中定义的库,并忽略为 armeabi 而非 armeabi-v7a 编译的库。
例如,这是我的一个应用程序:
App1/
- libs
- armeabi
- lib1.so
- lib2.so
- lib3.so
- armeabi-v7a
- lib3.so
- x86
- lib1.so
- lib2.so
- lib3.so
当我将它编译为armeabi-v7a时,Gradle会包含armeabi-v7a/lib3.so,但不包含armeabi/lib1.so和armeabi/lib2.so。在运行时,APK无法工作(显然),因为找不到lib1.so和lib2.so。
有没有办法告诉Gradle将armeabi/中找到但在armeabi-v7a/中未找到的库添加到armeabi-v7a APK中?
split
函数的限制。如果在这里得不到帮助,可以尝试adt-dev
谷歌小组,或者在 http://b.android.com 上提交问题。 - CommonsWare