gpt4 book ai didi

android - 必须构建签名的 APK 两次,以避免文件损坏?

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:03 25 4
gpt4 key购买 nike

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

  1. FacebookSDK(库)
  2. com.myapp.main(库)
  3. com.myapp.main.free(应用程序)
  4. com.myapp.main.pro(应用程序)

补充说明:

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

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

Android 工具 -> 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])

更新 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.** {
*;
}

最佳答案

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

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

虽然不确定为什么会这样。

关于android - 必须构建签名的 APK 两次,以避免文件损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19736910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com