【发布时间】:2014-11-04 22:23:31
【问题描述】:
我在 Eclipse 中为我正在开发的 NDK 应用程序生成有效 APK 时遇到了困难。文件大小非常不一致。要生成 APK,我单击我的项目并转到:
Tools --> Export Signed Application Package...
我正在使用 Eclipse Juno SR 2、Android NDK r9 和 ADT 22.3(不是 Eclipse 的 ADT 捆绑版本)。
在多次生成 APK 并遵循签名过程后,我收到了以下文件大小:
5268198 app1.apk
12388155 app2.apk
6092599 app3.apk
12320133 app4.apk
12201439 app5.apk
请注意,在这些“运行”之间,我没有对项目中的任何文件(或项目所依赖的文件)进行任何更改。
另请注意,其中一些在部署到我的手机时有效,而另一些则无效。这是非常受欢迎的!
将这些文件重命名为.zip 文件并检查其内容后,似乎应该归咎于 NDK 运行生成的 lib 文件的大小。在app1.apk 中为 1,584kb(未压缩),在app2.apk 中为 14,892kb。作为 NDK 构建的一部分,有一个符号剥离过程,所以我认为这是问题所在,因为它会解释 lib 大小的变化。事实上,在仔细检查签名的 APK 生成过程后,我注意到较大的 APK 通常在 NDK 控制台中具有以下输出:
C:/Android/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin/arm-linux-androideabi-strip --strip-unneeded ./libs/armeabi-v7a/libnative.so
C:/Android/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin/arm-linux-androideabi-strip: unable to rename './libs/armeabi-v7a/libnative.so'; reason: File exists
make: *** [libs/armeabi-v7a/libnative.so] Error 1
make: *** Deleting file 'libs/armeabi-v7a/libnative.so'
make: unlink: libs/armeabi-v7a/libnative.so: Permission denied
我的理论是,当 NDK 构建正在进行时,Makefile 的另一部分可能正在访问 lib 文件或在它创建后立即访问它(尚未剥离)。这种干扰导致了 APK 大小的变化。
一时兴起,我尝试在 Eclipse 中关闭“自动构建”,这起到了作用,因为我现在可以生成 APK 并且它们具有一致的大小。大概 Eclipse/CDT 没有足够的 NDK 构建脚本“知识”来推迟自动调用 NDK 构建,而 NDK 构建已经在进行中!
我不应该关闭这个选项,不是吗?这是一个错误吗?其他人是否看到这种行为?我的同事使用 Eclipse 的 ADT 捆绑版本没有这个问题。
有解决办法吗?
【问题讨论】:
-
请注意,此问题与stackoverflow.com/q/13943563/249239 和stackoverflow.com/q/13549772/249239 有关,因为解决方法可能相同。
标签: android eclipse android-ndk