我一直难以在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构建!
我不应该关闭此选项,不是吗?这是一个错误吗?其他人是否看到这种行为?使用ADT捆绑版Eclipse的我的同事没有这个问题。
有解决方案吗?
答案 0 :(得分:0)
检查您的.cproject
文件。你会期待像
<storageModule moduleId="refreshScope" versionNumber="1">
<resource resourceType="PROJECT" workspacePath="/MainActivity"/>
</storageModule>
这里,MainActivity是我的项目名称。你的不同。