正在运行Eclipse Kepler
。我的应用程序有以下项目:
FacebookSDK
(图书馆)com.myapp.main
(图书馆)com.myapp.main.free
(申请)com.myapp.main.pro
(申请)附加说明:
Android Support Library v4
。当我想发布我的两个应用程序中的任何一个时,我右键单击应用程序项目并选择:
Android Tools
- > Export Signed Application Package...
APK安装正确,但应用程序立即崩溃。现在,如果我使用Export Application Package...
命令再次构建已签名的APK ,则该应用程序可以正常运行。很明显,我的项目设置以某种方式欺骗了编译器来构建一个损坏的文件。我用谷歌搜索了这个。没事!
造成这种奇怪行为的原因是什么?
了解运行此导出向导时运行的确切命令会很有帮助。
当我激活ProGuard时,我收到一些可能表示存在问题的警告:
[proguard] Preparing output jar [C:\App\com.myapp.main.pro\bin\proguard\obfuscated.jar]
[proguard] Copying resources from program jar [C:\App\com.myapp.main.pro\bin\proguard\original.jar]
[proguard] Copying resources from program jar [C:\App\com.myapp.main\bin\classes.jar]
[proguard] Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])
[proguard] Copying resources from program jar [C:\App\facebook-android-sdk-3.0.1\facebook\bin\classes.jar]
[proguard] Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])
[proguard] Copying resources from program jar [C:\App\facebook-android-sdk-3.0.1\facebook\libs\android-support-v4.jar]
[proguard] Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [android-support-v4.jar:META-INF/MANIFEST.MF])
我整天用Google搜索了这一天。我能找到的唯一相关信息是: http://code.google.com/p/android/issues/detail?id=27612
project.properties
文件包含此行(请注意,删除此行不能解决原始问题):
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
proguard-project.txt
包含这些额外的参数:
-keepattributes Signature
-keep class com.facebook.** {
*;
}
-dontwarn android.support.**
-keep class android.support.v4.** {
*;
}
答案 0 :(得分:2)
根据我的经验,我强烈建议您每次要构建已签名的APK时清理并重建项目。如果我忘记清理项目,我也会不时得到奇怪的例外。
这通常是由于自动生成的文件(如R.java)未正确更新,但有时会发生在库项目中,因为编译器预编译(pre-dex)它们。在这里,它可能使用了过时的预编译版本的库而不是新版本。
不知道为什么会发生这种情况。
答案 1 :(得分:1)
正确答案非常简单。从Facebook SDK中删除支持库,并将其指向应用程序中的支持库。