标签:java android proguard samsung-mobile samsung-mobile-sdk
我正在尝试使用我的Android应用程序proguard,并使用三星附件sdk,这一直在给麻烦.
无论我在proguard配置中尝试什么,我似乎无法通过此运行时异常:
07-21 13:44:12.851: E/SAAgent(3563): <init> []
07-21 13:44:12.851: E/SAAgent(3563): java.lang.NoSuchMethodException: <init> []
...
07-21 13:44:12.851: E/AndroidRuntime(3563): Caused by: java.lang.RuntimeException: Invalid implemetation of SASocket. Provider a public default constructor.
…
有没有人知道该尝试什么?
解决方法:
问题在于,通过启用一些优化,Proguard将改变顶级类中的每个内部类.
这意味着内部类的默认构造函数将与一个参数构造函数交换,该构造函数接受外部类的实例,因为在java中,内部类保留对外部类的引用.
Samsung Accesory SDK需要SASocket内部类实现的默认构造函数,因为我猜他们使用反射来实例化该对象.
在这里http://sourceforge.net/p/proguard/bugs/387/,您可以读到:“外部$Inner不会更改为顶级类,除非您还将-repackageclasses和-allowaccessmodification添加到配置中”.
不幸的是,这些标志通常是从proguard-android-optimize.txt继承的,如果你想保持优化,解决方案是添加到你的proguard配置:
-keepattributes InnerClasses
请注意,为了能够使用Samsung Accesory SDK的所有功能,您还应该包括以下规则:
# Based on http://proguard.sourceforge.net/manual/examples.html#library
-keep public class com.samsung.** {
public protected *;
}
-keepclassmembernames class com.samsung.** {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
-keepclasseswithmembernames class com.samsung.** {
native <methods>;
}
-keepclassmembers enum com.samsung.** {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class com.samsung.** 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();
}
标签:java,android,proguard,samsung-mobile,samsung-mobile-sdk 来源: https://codeday.me/bug/20190528/1173335.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。