请帮忙,
这是我第一次使用android studio生成发布APK,尝试了几天后,我可以签署我的项目但是当我安装apk时我总是得到这个错误 ..
7290-7290/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.enma.app, PID: 7290
java.lang.NoSuchFieldError
at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:688)
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663)
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)
at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:171)
at libcore.reflect.AnnotationAccess.getAnnotation(AnnotationAccess.java:72)
at java.lang.Class.getAnnotation(Class.java:359)
at com.c.a.c.f.al.<clinit>(Unknown Source)
at com.c.a.c.f.al.a(Unknown Source)
at com.c.a.c.z.<clinit>(Unknown Source)
at com.zopim.android.sdk.data.Parser.<init>(Unknown Source)
at com.zopim.android.sdk.data.Path.<init>(Unknown Source)
at com.zopim.android.sdk.data.ConnectionPath.<init>(Unknown Source)
at com.zopim.android.sdk.data.ConnectionPath.<clinit>(Unknown Source)
at com.zopim.android.sdk.data.PathDataSource.<init>(Unknown Source)
at com.zopim.android.sdk.api.ZopimChat.<clinit>(Unknown Source)
at com.enma.app.MyApp.onCreate(Unknown Source)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4914)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1526)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5683)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
Caused by: java.lang.NoSuchFieldException: No field PUBLIC_ONLY in class Lcom/c/a/a/g; (declaration of 'com.c.a.a.g' appears in /data/app/com.enma.app-1/base.apk)
at java.lang.Class.getDeclaredField(Native Method)
at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:685)
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663)
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)
at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:171)
at libcore.reflect.AnnotationAccess.getAnnotation(AnnotationAccess.java:72)
at java.lang.Class.getAnnotation(Class.java:359)
at com.c.a.c.f.al.<clinit>(Unknown Source)
at com.c.a.c.f.al.a(Unknown Source)
at com.c.a.c.z.<clinit>(Unknown Source)
at com.zopim.android.sdk.data.Parser.<init>(Unknown Source)
at com.zopim.android.sdk.data.Path.<init>(Unknown Source)
at com.zopim.android.sdk.data.ConnectionPath.<init>(Unknown Source)
at com.zopim.android.sdk.data.ConnectionPath.<clinit>(Unknown Source)
at com.zopim.android.sdk.data.PathDataSource.<init>(Unknown Source)
at com.zopim.android.sdk.api.ZopimChat.<clinit>(Unknown Source)
at com.enma.app.MyApp.onCreate(Unknown Source)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4914)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1526)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5683)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
这是我的 gradle :
apply plugin: 'com.android.application'
android {
compileSdkVersion 'Google Inc.:Google APIs:23'
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.enma.app"
minSdkVersion 9
targetSdkVersion 17
multiDexEnabled true
signingConfig signingConfigs.HPAY
}
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/DEPENDENCIES'
}
productFlavors {
}
}
dependencies {
compile project(':volley')
compile 'com.android.support:support-v4:18.0.0'
compile files('libs/disklrucache-2.0.1.jar')
compile 'com.zopim.android:sdk:1.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'
compile files('libs/httpcore-4.4.3.jar')
compile files('libs/httpclient-4.5.1.jar')
compile 'com.android.support:multidex:1.0.0'
}
非常感谢任何帮助。
谢谢
感谢回复这是我的计划,现在我的应用程序可以正常工作,但为什么混淆不适用于某些来源。
Proguard的
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
#-dontoptimize
#-dontpreverify
# If you want to enable optimization, you should include the
# following:
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
#
# Note that you cannot just include these flags in your own
# configuration file; if you are including this file, optimization
# will be turned off. You'll need to either edit this file, or
# duplicate the contents of this file and remove the include of this
# file from your project's proguard.config path property.
-dontwarn **
-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
-keep public class * implements java.io.Serializable
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.ListFragment
-keep class com.android.volley.** { *; }
-keep interface com.android.volley.** { *; }
-keep class com.fasterxml.jackson.** {*;}
-keep class com.zopim.android.** {*;}
-keep class org.apache.http.** {*;}
-ignorewarnings
-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);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
答案 0 :(得分:10)
问题显然在班级com.c.a.c.f.al
的一个注释中。它似乎试图访问类PUBLIC_ONLY
中出现的名为com.c.a.a.g
的字段。
要弄清楚com.c.a.c.f.al
和com.c.a.a.g
是什么,只需查看ProGuard生成的mappings.txt
文件(通常出现在 build / outputs / mapping /.../中mapping.txt )并在混淆之前搜索显示这些类的名称的行。映射会有这样的条目:
com.yourapp.class1 -> com.c.a.c.f.al
找到包含PUBLIC_ONLY
的类后,请确保通过在ProGuard配置文件中添加与此类似的行来将其排除在混淆之外:
-keep class com.yourapp.class1 { *; }
如果此方法有效,则应尝试将PUBLIC_ONLY
替换为*;
*** PUBLIC_ONLY;
字段。