生成签名apk时出错

时间:2013-05-19 08:43:14

标签: android apk

我有旧项目和密钥库文件,但是当我尝试创建签名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文件。

2 个答案:

答案 0 :(得分:1)

好吧,还有一些事情:

  1. 确保您的Proguard版本为4.8及更高版本。在4.7.

  2. 中有一个已知错误
  3. 假设您正在运行最新版本的Proguard并且仍然存在,请转到[android-sdk-folder]/sdk/tools/proguard/bin/proguard.sh并进行以下更改:

    变化:

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

    致:

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

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

  6. 使用以下内容填充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 *;
    }
    
  7. 关闭Project -> Build Automatically转到菜单Project -> Clean...并首先清理项目。

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

答案 1 :(得分:0)

如果您在命令shell中使用它,我认为这是最佳做法。

请参阅以下链接,其中包含您在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对齐,对齐你apk

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

以上文档中详细说明了这些步骤。