在Eclipse中为NDK应用程序生成签名APK时,文件大小不一致

时间:2013-12-03 11:48:52

标签: android eclipse android-ndk

我一直难以在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的我的同事没有这个问题。

有解决方案吗?

1 个答案:

答案 0 :(得分:0)

检查您的.cproject文件。你会期待像

这样的东西
<storageModule moduleId="refreshScope" versionNumber="1">
    <resource resourceType="PROJECT" workspacePath="/MainActivity"/>
</storageModule>

这里,MainActivity是我的项目名称。你的不同。