sed*_*yux 2 android apk android-studio android-gradle-plugin android-proguard
请帮忙,
这是我第一次使用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)
Run Code Online (Sandbox Code Playgroud)
这是我的傻瓜:
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'
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
谢谢
感谢响应这是我的计划,现在我的应用程序可以正常工作,但为什么混淆不适用于某些来源.
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();
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ren 12
这个问题显然属于班级的注释之一com.c.a.c.f.al.它似乎试图访问一个叫做PUBLIC_ONLY出现在课堂上的字段com.c.a.a.g.
为了弄清com.c.a.c.f.al和com.c.a.a.g是,只认准mappings.txt该ProGuard的生成文件(通常出现在编译/输出/映射/.../的mapping.txt)并搜索展示一下这些阶层正被混淆之前命名的行.映射会有这样的条目:
com.yourapp.class1 -> com.c.a.c.f.al
Run Code Online (Sandbox Code Playgroud)
找到包含的类后,请PUBLIC_ONLY确保通过向ProGuard配置文件添加与此类似的行来将其排除在混淆之外:
-keep class com.yourapp.class1 { *; }
Run Code Online (Sandbox Code Playgroud)
如果这样做,你应该尝试PUBLIC_ONLY通过替换*;类似的东西来仅定位字段*** PUBLIC_ONLY;
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |