- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
按照@AlexWein 在this question 中的建议看着 ProGuard Troubleshooting ,我在 SherlockFragment 中有以下内容:
Class<?> c = Class.forName("co.uk.MyApp.pdf.MyData");
Method main = c.getDeclaredMethod("pdfsleep", Report_Holder.class);
Report_Holder paramsh = null;
paramsh = SRH;
main.invoke(null, (Object)paramsh);
“co.uk.MyApp.pdf.Data”构造函数是:
public class MyData {
public static void pdfsleep(Report_Holder args) {
...
}
}
Proguard 是这样设置的:
-keepnames class co.uk.MyApp.classes.Report_Holder
-keepclassmembers class co.uk.MyApp.pdf.Data { public static void pdfsleep(Report_Holder); }
-keepnames class co.uk.MyApp.DataActivity
但我仍然收到 NoSuchMethodException:
05/23/13 12:14:28 GMT+01:00 ERROR AsyncTask #2 - java.lang.NoSuchMethodException: pdfsleep [class co.uk.MyApp.classes.Report_Holder]
at java.lang.Class.getConstructorOrMethod(Class.java:460)
at java.lang.Class.getDeclaredMethod(Class.java:685)
at co.uk.MyApp.fy.a(Unknown Source)
at co.uk.MyApp.fy.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
我错过了什么?
更新
我已将 Proguard 行更改为:
-keepattributes Signature
-keepnames class co.uk.MyApp.classes.Report_Holder
-keepclasseswithmembers class co.uk.MyApp.DataActivity
-keepclasseswithmembers class co.uk.MyApp.pdf.Data { void pdfsleep(Report_Holder); }
我仍然收到错误。
查看映射文件,我想我明白了导致问题的原因:
co.uk.MyApp.classes.Report_Holder -> co.uk.MyApp.classes.Report_Holder:
co.uk.MyApp.DataActivity -> co.uk.MyApp.DataActivity:
java.util.ArrayList arrDataItems -> a
co.uk.MyApp.classes.Report_Holder SRH -> b
看起来 Proguard 保留了对 co.uk.MyApp.classes.Report_Holder 的引用,但在将其作为 co.uk.MyApp.DataActivity 的子项引用时混淆了它。
我尝试了不同的方式来保留 co.uk.MyApp.DataActivity,试图让它停止混淆 co.uk.MyApp.classes.Report_Holder,但无法获得正确的语法。有什么建议吗?
更新 2
我已经按照 Eric Lafortune 的建议更新了一些代码和 ProGuard 配置文件(顺便说一句,我现在正在显示正确的包/类名):
在 co.uk.FibroApp.SleepDataActivity
Class<?> c = Class.forName("co.uk.FibroApp.pdf.SleepData");
Method main = c.getDeclaredMethod("pdfsleep", co.uk.FibroApp.classes.SleepReport_Holder.class);
SleepReport_Holder paramsh = SRH;
co.uk.FibroApp.pdf.SleepData 是:
public class SleepData {
public static void pdfsleep(co.uk.FibroApp.classes.SleepReport_Holder args) {
...
}
}
完整的 ProGuard 配置是:
-keepattributes Signature
-keep class co.uk.FibroApp.classes.SleepReport_Holder
-keep class co.uk.FibroApp.pdf.SleepData
-keepclassmembers class co.uk.FibroApp.pdf.SleepData {
public static void pdfsleep(co.uk.FibroApp.classes.SleepReport_Holder);
}
# do not obfuscate the classes from droidtext but shrink them
-keep,allowshrinking class harmony.java.awt.** { *; }
-keep,allowshrinking class org.apache.harmony.** { *; }
-keep,allowshrinking class org.bouncycastle.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keepattributes *Annotation*
完整的错误日志是:
05/24/13 08:25:52 WEST ERROR AsyncTask #2 - java.lang.NoSuchMethodException: sleeppdf [class co.uk.FibroApp.classes.SleepReport_Holder]
at java.lang.Class.getConstructorOrMethod(Class.java:460)
at java.lang.Class.getDeclaredMethod(Class.java:685)
at co.uk.FibroApp.fy.a(Unknown Source)
at co.uk.FibroApp.fy.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
最佳答案
已解决!
我将这些行添加到 ProGuard 配置文件中:
-keep class co.uk.FibroApp.pdf.SleepDataActivity
-keep class co.uk.FibroApp.pdf.SleepMainActivity
我添加了 SleepDataActivity,因为它是包含联系 pdfsleep 的异步任务的类。
我添加了 SleepMainActivity,因为从技术上讲,SleepDataActivity 是 TabSwipe Activity 中的 fragment ,而 SleepMainActivity 是这些选项卡的父级。
'pdfsleep' 现在在 mapping.txt 中被提及,并且一切正常。
我会接受 Eric Lafortune 的回答作为这个问题的答案,因为他对“-keepclassmembers”的语法不是我自己能得到的,也因为我在上一个问题中接受了 AlexWien 的回答我到这个阶段。
谢谢你们,你们已经保存了我的发布日期!
关于android - Proguard 导致 NoSuchMethodException - 跟进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703291/
对于我的程序,目标是使用一堆接口(interface)并创建一个程序来进行测试并允许用户进行测试。我遇到的具体问题是 IQuestionFactory 接口(interface),它有助于在 Test
我刚刚读到有关反射的内容并决定尝试一下,但我似乎遇到了一个错误,我找不到原因。 我在一个类中得到了以下代码: String hashType = "md5"; Method method = Dige
我正在尝试使用反射来加载一个类的实例。当我尝试这样做时,我没有得到这样的方法异常。我已经检查并检查并重新检查。该构造函数显然确实存在。有人有什么想法吗?我之前在另一个代码基本相同的项目中成功使用过它,
这是连接两个关系的作业, import org.apache.hadoop.mapred.*; import org.apache.hadoop.conf.*; import org.apache.h
我正在尝试反序列化包含方法的 XML 文件。 片段看起来像: XMLDecoder decoder = new XMLDecoder(os); deSerializedObject = de
在我的 POM 中,我添加了依赖项 String 4.2.9.RELEASE、Spring boot 1.5.1.RELEASE 和 FasterXML/jackson 2.8.6,并出现以下错误:
在我的代码中有一个方法应该调用对象的方法doSomething。首先,不知道对象的类是否具有公共(public)方法。到目前为止,我使用了以下代码: try { Method method = c
我有以下具有静态方法的类,该方法采用 Class 类型的参数并生成一个 FunctionDescriptor。 public class NoInputFunctionDescriptorFactor
我正在使用 glassfish 3.1.2.2 服务器和 idea Ultimate Edition 11(在 Ubuntu 12.04 上)。当我部署我的耳朵项目时,有一个异常(exception)
所以我有一个定义了 2 个公共(public)方法的类。当我调用 getDeclaredMethods 时,然后循环结果,打印名称,两者都正确显示。所以不仅该方法存在,而且反射调用也找到了它。 但是当
每当使用 URLClassLoader 动态加载类时,当尝试执行使用自定义数据类型作为参数的方法时,我都会收到 NoSuchMethodException 异常。它查找具有标准类型(如 String
我正在尝试根据类和参数创建类的实例。用于创建此类的方法如下所示: @SuppressWarnings("unchecked") public Plugin instantiatePlugin(
我正在构建一个 JavaFx 应用程序,我想创建一个接收 GridPane 和 Node[] 以及添加到 Pane 中的项目数量的方法。但是,当我调用该方法时,我收到 NoSuchMethodExce
我有一个类如下: public class StreamEventSuccess { private final T event; public StreamEventSuccess(
我们正在开发一个动态类加载器项目,并尝试通过 URLClassLoader 调用动态加载类中的方法。它在 Eclipse 中运行时工作得很好,因此调用和动态加载的类被捆绑到两个不同的 jar 中,然后
我正在使用 Taylor 近似在 Java 中编写正弦函数的递归定义,但在运行代码时得到了 noSuchMethodException。这是我到目前为止所拥有的: public static void
我有一个 Android 应用程序。我正在使用反射来调用 CookieManager 的方法。 我在做什么: if (Build.VERSION.SDK_INT >= 21) { Method
我正在尝试编写一个表单,有一次有 2 个单选按钮询问此人的性别。我想要求至少按下一个按钮,否则他们就会 toast 。它们出现在 activity_main 中:
给出的类奖: public class Award { /* * */ // fields of the class Award() {
我在执行时得到一个NoSuchMethodException: operacionDTO.getClass().getMethod("setPrioridad").invoke(operacionDT
我是一名优秀的程序员,十分优秀!