2

运行Eclipse Kepler。我的应用程序有以下项目:

  1. FacebookSDK(图书馆)
  2. com.myapp.main(图书馆)
  3. com.myapp.main.free(应用)
  4. com.myapp.main.pro(应用)

补充笔记:

  • 所有项目都依赖于Android Support Library v4.
  • 这两个应用程序都依赖于这两个库。
  • 所有项目都禁用 Proguard。
  • 我的项目的目标是android-19 ,FacebookSDK 的目标是 android -8

当我想发布我的两个应用程序中的任何一个时,我右键单击应用程序项目并选择:

Android Tools->Export Signed Application Package...

问题

APK 安装正确,但应用程序立即崩溃。现在,如果我使用该命令再次构建签名的 APK Export Application Package...,该应用程序将完美运行。很明显,我的项目设置以某种方式欺骗了编译器来构建损坏的文件。我已经用谷歌搜索了这个。没有!

这种奇怪行为的原因可能是什么?

了解运行此导出向导时运行的确切命令会很有帮助。

更新

当我激活 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])

更新 2

我已经用谷歌搜索了一整天。我能找到的唯一相关信息是: 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.** {
    *;
}
4

2 回答 2

2

根据我的经验,我强烈建议您每次要构建签名的 APK 时清理和重建项目。如果我忘记清理项目,我也会不时遇到奇怪的异常。

这通常是由于自动生成的文件(如 R.java)没有正确更新,但有时会发生在库项目中,因为编译器会预编译(pre-dex)它们。在这里,它可能使用了您的库的过时预编译版本,而不是新版本。

不过,不知道为什么会这样。

于 2013-11-01T23:54:49.923 回答
1

正确答案真的很简单。从 Facebook SDK 中删除支持库并将其指向应用程序中的支持库。

于 2013-12-12T11:53:16.997 回答