Android工程在编译生成dex文件时dx有时候会出现下面的错误信息:
2.2-froyo中是
trouble processing "javax/Foo.class":
Attempt to include a core class (java.* or javax.*) in something other than a core library.......
2.3-gingerbread中是
trouble processing "javax/Foo.class":
Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.
原因是从安全性和完整性考虑,Android(Java有吗?)不允许从外部引用Java的核心库(java.*或javax.*)。更详细的解释参考http://code.google.com/p/android/issues/detail?id=13084#c2。
但其实并不是所有的javax.*都不允许。dx的代码com/android/dx/command/dexer/Main.java中,保存了一个“黑名单”来过滤javax的包。
private static final String[] JAVAX_CORE = {
"accessibility", "crypto", "imageio", "management", "naming", "net",
"print", "rmi", "security", "sound", "sql", "swing", "transaction",
"xml"
};
那么如果Android并没有提供某些核心库而又必须要使用到这些库的情况下,该如何处理呢?一般来说都是通过repackage来重命名包。
1. 有源码的情况下,可以直接修改源代码。(通过ecllipse的改名重构是一个很好的方法)
2. 如果使用的第三方的jar包,则可以通过工具jarjar进行repackage。
没有评论:
发表评论