我想更改cordova的Barcode Scanner插件的jar文件中的内容,即RESULT_DISPLAY_DURATION_MS
中的CaptureActivity class
。
我使用终端解压缩它(我在Mac上)。
然后,使用ClassEditor,我查找了类CaptureActivity,并更改了值。
接下来,我使用jar cfv samenameasoriginal.jar *
重新存档它。
然后,我替换了原来的jar文件。
问题是,当我尝试使用离子构建它时,我得到一长串错误,包含:
意外的顶级例外情况: com.android.dx.cf.iface.ParseException:错误的属性长度;预期 长度00000002 ......解析时 COM /谷歌/斑马线/客户端/机器人/ CaptureActivity.class
我注意到新的jar文件比原来的大7 kb,虽然我只将1500改为9500,所以这有点奇怪。
任何可以帮助我的人?在线查看但没有发现......
答案 0 :(得分:1)
从类中扩展并调整值:
public class CustomCaptureActivity extends CaptureActivity {
RESULT_DISPLAY_DURATION_MS = 9500; // wheras 9500 is your custom value
}
而不是调用CaptureActivity
现在用户自定义类。
如果RESULT_DISPLAY_DURATION_MS
是只读的:复制&将使用此变量的方法粘贴到您的自定义类,并使用您自己的类中定义的新常量替换该变量。只要CaptureActivity
不是final
,这对你来说就好了。
答案 1 :(得分:1)
我认为问题是因为在创建JAR时,有一些链接可能与文件的旧版本有关(由于选择原因)而且一切都崩溃了。
不确定,但我认为这就是原因。
因此,您可以使用或者使用Decorator设计模式(更好的想法,如果可能的话)继承您需要根据更改(https://en.wikipedia.org/wiki/Decorator_pattern)更改的类,或者您可以使用反射来代替更改文件直接修改库。
这里有一个如何更改私人最终字段的示例。你可以做类似的事情:
import java.lang.reflect.*;
public class EverythingIsTrue {
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
public static void main(String args[]) throws Exception {
setFinalStatic(Boolean.class.getField("FALSE"), true);
System.out.format("Everything is %s", false); // "Everything is true"
}
}
答案 2 :(得分:0)
正确的答案是,你的一些jar文件无法编译。您应该进入项目中的构建路径(设置所有相关路径)文件,并查看依赖项。
如果您只是导入一些jar文件,可以尝试删除它们并一次添加一个。这将帮助您确定哪一个导致错误。
在我的情况下,我做到了这一点,当我导入最后一个时,应用程序编译完成。所以我认为真正的问题是我一次导入的太多了。但现在一切正常。