Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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中进行模糊处理后未找到匿名类_Android_Obfuscation_Anonymous Class - Fatal编程技术网

在Android中进行模糊处理后未找到匿名类

在Android中进行模糊处理后未找到匿名类,android,obfuscation,anonymous-class,Android,Obfuscation,Anonymous Class,我需要Javascript中的一些项目,因此我使用Gson将JSON字符串转换为值,如下代码所示 来自Java脚本: var Items = [{ "ItemName": "Item1", "ItemPos": "1", "ItemValue":"value1"},{ "ItemName": "Item2", "ItemPos": "2", "ItemValue":"value2"}]; 调用本机Android方法将这些值作为JSON.parse(items)传递 在本机类中,我检索到这些

我需要Javascript中的一些项目,因此我使用Gson将JSON字符串转换为值,如下代码所示

来自Java脚本:

 var  Items = [{ "ItemName": "Item1", "ItemPos": "1", "ItemValue":"value1"},{ "ItemName": "Item2", "ItemPos": "2", "ItemValue":"value2"}];
调用本机Android方法将这些值作为JSON.parse(items)传递

在本机类中,我检索到这些值,如下所示:

 List<Items> ItemsList; 
 Gson gson = new Gson();
 ItemsList= gson.fromJson(args[0].toString(), new TypeToken<List<Items>>(){}.getType());
这些实现方法在本机源代码中运行良好。但在混淆了源代码之后,这些实现方法就不起作用了。我收到“查找失败”错误。反编译模糊代码时,该位置不存在项类“未找到匿名类”。甚至列表项列表的声明也不存在。如何解决这个问题

编辑1: MyProguard.pro

-injars       input.jar
-outjars      output.jar
-libraryjars  android.jar
-libraryjars  android-support-v4.jar
-libraryjars  annotations.jar
-libraryjars  gson-2.2.1.jar


-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-keepparameternames
-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
            SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep public class * {
  public protected *;
 }

-keepclassmembernames class * {
  java.lang.Class class$(java.lang.String);
  java.lang.Class class$(java.lang.String, boolean);
}

-keepclasseswithmembernames class * {
   native <methods>;
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
 }

-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();
 }

 -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.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*(...);
  }

 -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>;
  } 
I think that compiler may ignore the item class during Obfuscating

you must manually mention your missed class name in your proguard.txt file like as follows

-keep public class <your_class_name>
-injars input.jar
-outjars output.jar
-libraryjars android.jar
-libraryjars android-support-v4.jar
-libraryjars annotations.jar
-libraryjars gson-2.2.1.jar
-不要翻转
-重新打包类“”
-允许访问修改
-优化!代码/简化/算术
-keepattributes*注释*
-基帕参数
-重命名SourceFileAttribute源文件
-keepattributes异常、内部类、签名、已弃用、,
SourceFile,LineNumberTable,*注释*,封闭方法
-保持公开课*{
受公众保护*;
}
-keepclassmembernames类*{
java.lang.Class类$(java.lang.String);
java.lang.Class类$(java.lang.String,布尔值);
}
-KeepClassSwithMemberNames类*{
本地人;
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-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();
}
-keep public class*扩展android.app.Activity
-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.view.view{
public(android.content.Context);
public(android.content.Context、android.util.AttributeSet);
public(android.content.Context,android.util.AttributeSet,int);
公共无效集*(…);
}
-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$*{
公共静态;
} 
我已经通过“java-jar proguard.jar@MyProguard.pro”

对源代码进行了模糊处理,我认为编译器可能会在模糊处理过程中忽略item类
您必须在proguard.txt文件中手动提及丢失的类名,如下所示
-保持公开课
请参阅此链接

尝试添加以下内容可能会对您有所帮助:

-keep class com.xxx.yyy$Items { *; }

也许你可以告诉我们你是如何混淆你的代码(proguard,…)和你使用的配置。我认为这是最相关的部分。嗨,我的问题中包括了MyProguard.pro。谢谢你的回复。我试过用这种方法,它是保持类项目。但是在检索javascript json值时,我得到了查找失败的消息。列表项目列表;这在反编译的java文件中不存在。如何使这些类型的声明处于模糊状态。您的应用程序中是否使用了任何第三方jar文件?是的,我在源代码中使用了gson-2.1.1.jar。仅使用此Gson方法检索JSON值。然后将Gson包名称包含到proguard-project.txt文件中,并验证忘记包含的任何子类和属性。例如,-dontwarn com.google.android.gms.*-ignorewarnings您可以提供一些关于将gson包名包含到proguard-project.txt文件中的更多信息吗?我已经包含了上述属性,但仍然出现查找失败错误。在反编译模糊的jar文件时,出现“找不到匿名类”错误。@Karthick:我修复了答案。感谢您的回复。我使用这个Items类作为NativeMethodProcessClass的内部类,现在我在Proguard.pro文件中给出com.example.Android.NativeMethodProcessClass$Items{*;}。但在已取消编译的文件中获取“未找到成员类”。Proguard中有什么需要更改的吗?嗨,OcuS,我的Proguard.pro文件中还有什么需要更改的吗。?请给出一些建议。
-keep class com.xxx.yyy$Items { *; }