我想更改用于cordova的条形码扫描插件jar文件中的一些内容,即CaptureActivity class中的CaptureActivity class。
我用终端解压缩(我在mac上)。
然后,使用ClassEditor查找类CaptureActivity,并更改值。接下来,我使用jar cfv samenameasoriginal.jar *重新归档了它。然后,我把原来的jar文件换成了新的。
问题是,当我尝试使用离子型构建它时,我会得到一长串错误列表,其中包括:
意外的顶级异常: com.android.dx.cf.iface.ParseException:糟糕的属性长度;预期长度00000002 ...while解析
我注意到新的jar文件比原来的jar文件大7kb,虽然我只将1500更改为9500,所以这有点奇怪。
有人能帮我吗?在网上查了一下但什么也没发现。
发布于 2015-08-24 14:04:14
从类中扩展并调整值:
public class CustomCaptureActivity extends CaptureActivity {
RESULT_DISPLAY_DURATION_MS = 9500; // wheras 9500 is your custom value
}而不是现在调用CaptureActivity,而是使用您的自定义类。
如果RESULT_DISPLAY_DURATION_MS是只读的:将使用该变量的方法复制并粘贴到您的自定义类中,并用在您自己的类中定义的新常量替换该变量。只要CaptureActivity不是final,希望这能为您带来好处。
发布于 2015-08-25 12:33:40
我认为问题在于,当您创建JAR时,有一些链接可能与文件的旧版本有关(因为选择原因),而且所有的东西都崩溃了。
不确定,但我想这就是原因。
因此,您可以使用或装饰设计模式(如果可能的话)子类,而不是更改文件( 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"
}
}发布于 2015-08-25 12:24:25
正确的答案是,有些jar文件没有编译。您应该进入项目中的构建路径(设置所有依赖路径)文件,并查看您的依赖项。
如果您只是导入一些jar文件,您可以尝试删除它们并一次添加它们。这将帮助您确定它们中的哪一个会导致错误。
在我的例子中,我就是这样做的,当我导入最后一个程序时,应用程序编译了。所以我认为真正的问题是我同时进口了太多。但现在一切都成功了。
https://stackoverflow.com/questions/31996598
复制相似问题