我现在已经挣扎了一段时间了。我试图在IntelliJ IDEA 13.1.3中Generate Signed APK
和在APK上运行ProGuard 4.7 ,但我无法摆脱以下错误:
错误:ProGuard:[project_name]错误:无法读取[C:\ Program Files(x86)\ Android \ android-sdk \ tools \ proguard \ libs](没有这样的文件或目录)
错误消息前面有以下消息:
信息:ProGuard:[project_name]读取库目录[C:\ Program Files(x86)\ Android \ android-sdk \ tools \ proguard \ libs]
该位置只有一个lib
目录,其中包含proguard.jar
和另外两个jar文件。我创建了一个空的libs
目录,但之后又出现了更多错误。
否则混淆似乎工作正常,没有混淆,正确生成签名的APK。
Android SDK Build-tools版本为20。
这是proguard项目文件:
-libraryjars libs
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class * extends java.util.ListResourceBundle
{
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable
{
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class *
{
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable
{
public static final ** CREATOR;
}
更新
似乎此问题归结为-libraryjars libs
文件中的行proguard-project
。当我从Generate Signed APK
删除该行时,我设法通过一个简单的测试项目正确proguard-project.txt
。但是,当-libraryjars libs
未被删除时,混淆失败。
如果在尝试在实际项目上运行ProGuard时该行被剥离,则会产生更多错误。
答案 0 :(得分:3)
感谢您的回答,Eric。
实际上,我已经解决了这个问题。到目前为止,还没有更新答案。
是的,-libraryjars
中的proguard-project.txt
是万恶之源。我只是把它包含在那里,因为我遇到了一些示例配置。
以下是正常运行的配置:
-keep class * extends java.util.ListResourceBundle
{
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable
{
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class *
{
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable
{
public static final ** CREATOR;
}
-keep public class com.google.android.gms.ads.**
{
public *;
}
-keep public class com.google.ads.**
{
public *;
}
-keep class com.android.vending.billing.**
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-dontwarn com.google.android.gms.**
答案 1 :(得分:2)
您的配置中应该有-libraryjars或-injars。 Android构建过程(Ant,Eclipse,Gradle,以及可能是IntelliJ IDEA)在内部已经为您指定了这些选项。
我还没有遇到将-libraryjars
添加到proguard-project.txt
的Android SDK(并且指定的路径相对于配置文件本身的目录,而不是.../tools/proguard
),但也许你应该更新到最新版本的SDK以避免这个问题。