3

我有旧的项目和密钥库文件,但是当我尝试创建签名的 APK 时,它会出现以下错误。

   [2013-05-19 12:36:02 - xxxxxxx] Proguard returned with error code 1. See console
   [2013-05-19 12:36:02 - xxxxxxx] Unable to access jarfile /Users/muhammadali/Documents/development
   [2013-05-19 12:36:12 - xxxxxx] Proguard returned with error code 1. See console
    [2013-05-19 12:36:12 - xxxxxx] Unable to access jarfile /Users/muhammadali/Documents/development

请帮助我为什么无法生成 APK 文件。

4

2 回答 2

1

好吧,有几件事:

  1. 确保您Proguard的版本4.8及以上。有一个已知的错误导致4.7.

  2. 假设您正在运行最新版本的 Proguard 并且它仍在发生,请转到[android-sdk-folder]/sdk/tools/proguard/bin/proguard.sh并进行以下更改:

    改变:

    java -jar $PROGUARD_HOME/lib/proguard.jar "$@"
    

    至:

    java -jar "$PROGUARD_HOME/lib/proguard.jar" "$@"
    
  3. 将此行添加到project.properties应用程序文件夹中的文件中。

    proguard.config=proguard.cfg
    
  4. 在您的应用程序文件夹中创建一个proguard.cfg文件。

  5. 使用以下内容填充您的proguard.cfg文件(根据需要进行修改)。

    -optimizationpasses 5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -dontpreverify
    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
    
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class * extends android.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class com.android.vending.licensing.ILicensingService
    
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    
    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet);
    }
    
    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    
    -keepclassmembers class * extends android.app.Activity {
       public void *(android.view.View);
       public void onSearchButtonClicked(java.lang.String);
    }
    
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    -keep class * implements android.os.Parcelable {
       public static final android.os.Parcelable$Creator *;
    }
    
  6. 关闭Project -> Build Automatically转到菜单Project -> Clean...并首先清理您的项目。

祝你好运!当您尝试上述所有步骤并完成它时,我很乐意为您提供帮助。

于 2013-06-08T10:58:34.007 回答
0

如果您将它与命令外壳一起使用,我认为这是一个最佳实践。

请参考下面的链接,其中包含您在 eclipse 或通过命令 shell 中遵循的所有必要步骤。

http://developer.android.com/tools/publishing/app-signing.html

首先,您需要取消签名您的 apk。

然后创建私钥

$ keytool -genkey -v -keystore my-release-key.keystore-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

然后用私钥签署你未签名的 apk

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-releasekey.keystore my_application.apk alias_name

最后使用zip align,对齐你的apk

$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

这些步骤在上述文档中得到了很好的解释。

于 2013-06-05T08:29:55.557 回答