Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Proguard:应用程序在混淆后崩溃_Android_Obfuscation_Proguard - Fatal编程技术网

Android Proguard:应用程序在混淆后崩溃

Android Proguard:应用程序在混淆后崩溃,android,obfuscation,proguard,Android,Obfuscation,Proguard,我以前没用过ProGuard,所以我可能忽略了一些东西 问题如下:我必须混淆我的Android Studio项目。我克服了构建问题,能够在测试设备上运行我的发布构建(启用proguard)。应用程序启动,我一按登录按钮它就崩溃了。Logcat为错误提供以下输出: E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pac

我以前没用过ProGuard,所以我可能忽略了一些东西

问题如下:我必须混淆我的Android Studio项目。我克服了构建问题,能够在测试设备上运行我的发布构建(启用proguard)。应用程序启动,我一按登录按钮它就崩溃了。Logcat为错误提供以下输出:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.packagename/com.packagename.activity.MainWebActivity}: android.view.InflateException: Binary XML file line #48: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
            at android.app.ActivityThread.access$700(ActivityThread.java:159)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5419)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #48: Error inflating class fragment
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361)
            at android.app.Activity.setContentView(Activity.java:1956)
            at com.packagename.activity.MainWebActivity.onCreate(Unknown Source)
            at android.app.Activity.performCreate(Activity.java:5372)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
            at android.app.ActivityThread.access$700(ActivityThread.java:159)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5419)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.packagename.fragment.DrawerMenuFragment.a(Unknown Source)
            at com.packagename.fragment.DrawerMenuFragment.onCreateView(Unknown Source)
            at android.support.v4.app.Fragment.performCreateView(Unknown Source)
            at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
            at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
            at android.support.v4.app.FragmentManagerImpl.addFragment(Unknown Source)
            at android.support.v4.app.FragmentActivity.onCreateView(Unknown Source)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361)
            at android.app.Activity.setContentView(Activity.java:1956)
            at com.packagename.activity.MainWebActivity.onCreate(Unknown Source)
            at android.app.Activity.performCreate(Activity.java:5372)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
            at android.app.ActivityThread.access$700(ActivityThread.java:159)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5419)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
            at dalvik.system.NativeStart.main(Native Method)
在LoginActivity之后,应用程序启动一个WebView活动,该活动保存抽屉布局。我的proguard-project.txt如下所示:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*


-keep public class * extends android.app.Activity
-keep public class * extends android.support.v4.app.FragmentActivity
-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.preference.Preference
-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
-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();
}

-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.content.Context {
    public void *(android.view.View);
    public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * {
    public void *ButtonClicked(android.view.View);
}

-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment

-keepclassmembers public class * extends android.view.View {
      void set*(***);
      *** get*();
    }

-libraryjars libs

# The official support library.
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }

# Facebook library
-keep class com.facebook.** {
   *;
}

-dontwarn com.squareup.okhttp.**

# Make sure that Google Analytics doesn't get removed
-keep class com.google.analytics.tracking.android.CampaignTrackingReceiver

# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.** { *; } 
-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-不要翻转
-冗长的
-优化!代码/简化/算术,!字段/*,!类/合并/*
-keepattributes*注释*
-keep public class*扩展android.app.Activity
-keep public class*扩展android.support.v4.app.FragmentActivity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.preference.preference
-keep public class*扩展了android.view.view{
public(android.content.Context);
public(android.content.Context、android.util.AttributeSet);
public(android.content.Context,android.util.AttributeSet,int);
公共无效集*(…);
}
#显式保留所有序列化成员。可序列化接口
#只是一个标记接口,因此无法保存它们。
-keepclassmembers类*实现java.io.Serializable{
静态最终长SerialVersionId;
私有静态final java.io.ObjectStreamField[]serialPersistentFields;
私有void writeObject(java.io.ObjectOutputStream);
私有void readObject(java.io.ObjectInputStream);
java.lang.Object WriterReplace();
java.lang.Object readResolve();
}
-keepclassswithmembers类*{
public(android.content.Context、android.util.AttributeSet);
}
-keepclassswithmembers类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers类*扩展了android.content.Context{
public void*(android.view.view);
public void*(android.view.MenuItem);
}
-keepclassmembers类*实现android.os.Parcelable{
静态android.os.Parcelable$Creator;
}
-keepclassmembers类**.R$*{
公共静态;
}
-KeepClassSwithMemberNames类*{
本地人;
}
-keepclassmembers类*{
public void*按钮点击(android.view.view);
}
-keep public class*扩展了android.support.v4.app.Fragment
-keep public class*扩展了android.app.Fragment
-keepclassmembers公共类*扩展了android.view.view{
无效集*(***);
***得到*();
}
-图书馆馆藏
#官方支持图书馆。
-keep类android.support.v4.*{*;}
-保留android.support.v4.*{*;}
#Facebook图书馆
-保持类com.facebook.*{
*;
}
-dontwarn com.squareup.okhttp**
#确保谷歌分析不会被删除
-keep class com.google.analytics.tracking.android.CampaignTrackingReceiver
#Gson在处理字段时使用存储在类文件中的泛型类型信息。前卫
#默认情况下删除此类信息,因此将其配置为保留所有信息。
-保留署名
#Gson特定类
-保持类sun.misc.Unsafe{*;}
-保持类com.google.gson.*{*;}
我怀疑我的proguard-project.txt中缺少某些内容。我知道这是一个模糊处理的问题,因为当我添加-dontobfuscate时,它将无错误地运行

我错过了什么

编辑:通过添加
-保留属性源文件,行号表

在我的例子中,它与用户模型有关。

这很可能存在一些使用自定义名称的xml属性,例如:

app:fragment="com.example.app.myFragment"
aapt不会选择这些规则,因此您必须自己添加这些规则:

-keep public class * extends android.app.Fragment {
    <init>(...);
}
-keep public class * extends android.support.v4.app.Fragment {
    <init>(...);
}
-keep public class*扩展了android.app.Fragment{
(...);
}
-keep public class*扩展了android.support.v4.app.Fragment{
(...);
}

这很可能存在一些使用自定义名称的xml属性,例如:

app:fragment="com.example.app.myFragment"
aapt不会选择这些规则,因此您必须自己添加这些规则:

-keep public class * extends android.app.Fragment {
    <init>(...);
}
-keep public class * extends android.support.v4.app.Fragment {
    <init>(...);
}
-keep public class*扩展了android.app.Fragment{
(...);
}
-keep public class*扩展了android.support.v4.app.Fragment{
(...);
}

谢谢你的回答!不幸的是,除了facebook登录按钮之外,我没有使用任何自定义名称空间,因为facebook登录按钮已经被排除在外了。谢谢!不幸的是,除了已经被排除在外的facebook登录按钮,我没有使用任何自定义名称空间