Tag: dex

在使用多个dex文件时,是否有必要将同一个包的类保留在同一个dex中

关于标题 “相同包的类”表示共享相同包访问的类。 请注意,类abcFoo没有类abBar的包访问权 。 因为如果前者的修饰符是默认值,后者无法访问前者。 问题 如果我将同一个包中的两个类分成两个dex文件,即使我正确加载它们,我也会在运行时遇到一些错误,logcat喜欢: I / dalvikvm(6498):DexOpt:非法方法访问(从Lcom / fish47 / multidex / TestMatchWord调用Lcom / fish47 / multidex / Foo; .isWholeWord(Lcom / fish47 / multidex / Foo;)Z;) I / dalvikvm(6498):找不到方法com.fish47.multidex.core.Foo.isWholeWord,从com.fish47.multidex.core.TestMatchWord.test_english方法引用 W / dalvikvm(6498):VFY:无法解析虚方法758:Lcom / fish47 / multidex / Foo; .isWholeWord(Lcom / fish47 / multidex / Foo;)Z 推测 这是代码,它会弹出以下错误消息: vm / analysis / Optimize.c […]

试图逆向工程我的应用程序,但得到一些奇怪的文件树

我丢失了去年我建立的所有应用程序的代码(雷击我的硬盘,没有备份任何应用程序)。 由于它们是相当简单的应用程序,我将它们置于逆向工程过程中。 我已经在过去几十次这样做了,每次我都没有问题(如果我们不计算工作时间将所有文件组合到一个项目中)。 我已经完成了在硬盘耗尽期间丢失的3个应用程序。 他们几乎完美无缺地反转,但我被困在了这个。 让我们详细了解一下。 逆向工程进展顺利。 我能够从APK中提取的编码XML文件中获取XML代码。 我还能够从classes.dex成功反编译Java代码。 我得到所有文件可读,然后我可以通过文本编辑器打开/查看。 但我有一个奇怪的文件结构和奇怪的文件名 。 项目文件位于通常的路径src/com/mycompanyname/appname 。 在RI处理之后, 一些文件保留在主路径( R.java ,第三方广告文件和其他一些文件 )中,而所有其他文件都被重新映射到文件结构中,如下所示: a.java b.java c.java … z.java 我写的所有文件都被重命名并获得了这些奇怪的名字,而所有第三方文件都保持不变。 问:有谁可以告诉我这可能是什么原因? 问:在将代码编译成APK之前,Eclipse是否以某种方式混淆了代码? 这是混淆的APK在通过IR流程后的样子吗? 我真的希望有人能够帮助我,因为我仍然需要重建超过10个其他应用程序。 它

来自APK的源代码

我在搜索引擎中搜索转换dex文件到jar文件但我无法在code.Google.com找到dex2jar文件 我从这里得到了基本的想法。 但是当我从dex2jar-0.0.9.8.zip表单下载文件时,我无法找到dex2jar.jar文件,所以你能告诉我在哪里可以找到文件吗?

多个dex文件定义 – 删除额外的jar文件仍然无效。 我该怎么办?

我正在尝试将Google Play服务应用到我的应用程序中。 我知道有一个名为BaseGameUtils的示例项目,我需要将其导入我的工作区并将其标记为库。将google-play-services_lib导入我的工作区后,我将其作为BaseGameUtils库中的库引用。 最后,我在我实际想要发布到Google Play的项目中引用了BaseGameUtils和google-play-services_lib。 在所有这些连接的某个地方,我的类路径中有一个同名的jar文件。 要解决此问题,我需要删除google-play-services_lib的一个引用,因为当我尝试导出项目时,我收到此错误: 无法执行dex:多个dex文件定义Lcom / google / ads / AdRequest $ ErrorCode; 好的,所以如果我取消选择“Android私人图书馆”,项目将会导出,但没有任何Google Play服务可用。 当我尝试启动该类时,在启动应用程序时,我收到错误: super.onCreate(savedInstanceState); 我明白我必须打电话 setRequestedClients(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE); 之前 // call BaseGameActivity’s onCreate() super.onCreate(savedInstanceState); 但它不起作用。 这意味着GoogleApiClient将无法启动,因为未导出类。 @Override public void onCreate(Bundle savedInstanceState) { // set requested clients (games and cloud save) setRequestedClients(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE); // call BaseGameActivity’s onCreate() super.onCreate(savedInstanceState); // […]

Android 64k方法限制56k方法的错误

我在我的android项目中收到此错误: Unable to execute dex: method ID not in [0, 0xffff]: 65536 Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 从我的所有研究来看,这是由于我的android项目中有太多方法 – 限制是64k。 但是,我已经运行脚本来计算当前项目中有多少,并且它提出了56k方法。 这是我正在运行的脚本。 我项目的唯一补充是我已经将Parse从1.4更新到1.7。 在更新解析后构建和编译项目,但是当我尝试添加任何新代码时,会出现此错误。 我第一次遇到这个错误时,我正在使用Android Studio 0.8.9。 我已经恢复到Android Studio 0.8.6并且它仍在发生。

Dex文件中的’字符串数’是什么意思?

来自adt-21-preview DOC 建造 有一个新的标志来强制dex的“巨型模式”,它允许在dex文件中有更多的字符串 ; 在project.properties中设置dex.force.jumbo = true 我在这个安卓程序和字符串限制在Android的应用程序中也是@SamWise ,其中@SamWise回答: 使用jumbo dex时,字符串引用限制介于110K和120K之间。 题: Dex中的String或String引用是什么? 他们的意思是变长吗? 例如,如果我写: private String foo = “fessy”; 它的意思是字符串是3还是值长度,在我的情况下是5? 子问题: 我使用以下脚本dex-method-counts来计算方法Count但是我没有找到任何计算String count的引用。 请帮忙,

如何在Android应用程序中实现Java编译器和DEX转换器?

在尝试查找Android Jasper报告的答案时,我发现还有另外两个问题需要解答,我被要求提出问题,而不是作为答案;): 我现在的问题是:“是否有任何编译器可以直接在设备上使用”和“如何在不设备设备的情况下执行此操作。如果有人可以给我一个提示,我会非常感激… 我在这种方法上看了一点时间,找到了可以直接在没有root的Android设备上创建APK的应用程序: TerminalIDE – https://play.google.com/store/apps/details?id=com.spartacusrex.spartacuside&hl=de JavaIDEdroid – http://code.google.com/p/java-ide-droid/ AIDE – https://play.google.com/store/apps/details?id=com.aide.ui&hl=en 看起来他们正在使用eclipse中的编译器和一个移植的dex转换器。 现在我想弄清楚如何做同样的事情。 当然:获取源代码并查看它。 但是,虽然我有一些奇怪的问题需要连接到服务器并试图解决它,但我请求在这里提出这个问题。 希望既能帮助别人,又能为自己找到答案;) 我从我的indigo的插件目录中获取了org.eclipse.jdt.core_3.7.3.v20120119-1537.jar并尝试了以下代码: org.eclipse.jdt.internal.compiler.batch.Main ecjMain = new org.eclipse.jdt.internal.compiler.batch.Main(new PrintWriter(System.out), new PrintWriter(System.err), false/*noSystemExit*/, null, progress); System.err.println(“compiling…”); ecjMain.compile(new String[] {“-classpath”, “/system/framework”, storage.getAbsolutePath()+”/Test.java”}); ecjMain.compile(new String[] {storage.getAbsolutePath()+”/Test.java”}); System.err.println(“compile succeeded!!!”); 有时会抛出exception,因为无法找到java.lang.Object,并且在使用100%的处理器加热处理器时它无法做任何事情…… 在这个时候,我无法弄清楚发生了什么以及为什么。 因为我有其他工作要做这个部分必须等待一点。