如何将Android DEX(VM字节码)文件反编译成相应的Java源代码?
由于更新到ADT14,我无法再建立我的项目.在更新之前,它正在建设中.
错误:
[2011-10-23 16:23:29 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
[2011-10-23 16:23:29 - myProj] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
Run Code Online (Sandbox Code Playgroud)
有类似的问题已经报道,我已经尝试过那里的建议,包括
Eclipse.Android开发人员工具我以前见过各种版本的dex erros,但这个版本是新的.清理/重启等无济于事.图书馆项目似乎完好无损,依赖似乎正确联系在一起.
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
Run Code Online (Sandbox Code Playgroud)
要么
Cannot merge new index 65950 into a non-jumbo instruction
Run Code Online (Sandbox Code Playgroud)
要么
java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
Run Code Online (Sandbox Code Playgroud)
tl;博士:Google的官方解决方案终于来了!
http://developer.android.com/tools/building/multidex.html
只有一个小提示,你可能需要这样做以防止在执行dex-ing时内存不足.
dexOptions {
javaMaxHeapSize "4g"
}
Run Code Online (Sandbox Code Playgroud)
还有一种巨型模式可以以不太可靠的方式解决这个问题:
dexOptions {
jumboMode true
}
Run Code Online (Sandbox Code Playgroud)
更新:如果您的应用程序很胖并且您的主应用程序中有太多方法,则可能需要按照应用程序重新设置应用程序
http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html
我有Android Studio Beta.我创建了一个新项目,编译我的旧模块,但是当我尝试启动应用程序时,它没有启动消息:
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
Run Code Online (Sandbox Code Playgroud)
com.android.builder.dexing.DexArchiveMergerException:无法合并dex
但我不知道如何解决这个错误.我用谷歌搜索了几个小时但没有成功.
我的项目是:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta6'
classpath "io.realm:realm-gradle-plugin:3.7.1"
classpath 'com.google.gms:google-services:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序gradle:
apply plugin: 'com.android.application'
android …Run Code Online (Sandbox Code Playgroud) 我有一些关于dex文件的问题
dexAndroid中的文件是什么?我需要具体的信息请帮忙,欢迎任何真实的例子!
在编译特定的Android项目时,只在我的Windows机器上,我java.nio.BufferOverflowException从dex 获得了一个.使用Eclipse和使用Ant时都会出现问题.
使用Ant时的输出是:
...
[dex] Pre-Dexing C:\MyProject\libs\android-support-v4.jar -> android-support-v4-5f5341d3c1b10a79d7d93f9c1e64421e.jar
[dex] Converting compiled files and external libraries into C:\MyProject\bin\classes.dex...
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.nio.BufferOverflowException
[dx] at java.nio.Buffer.nextPutIndex(Buffer.java:499)
[dx] at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:296)
[dx] at com.android.dex.Dex$Section.writeShort(Dex.java:818)
[dx] at com.android.dex.Dex$Section.writeTypeList(Dex.java:870)
[dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437)
[dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423)
[dx] at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317)
[dx] at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423)
[dx] at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163)
[dx] at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
[dx] at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
[dx] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:230)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:199)
[dx] at com.android.dx.command.Main.main(Main.java:103)
BUILD FAILED
C:\Users\Jaap\android-sdks\tools\ant\build.xml:892: The following error occurred while …Run Code Online (Sandbox Code Playgroud) 我有一个相当大的Android应用程序,它依赖于许多库项目.Android编译器对每个.dex文件有65536个方法的限制,我超过了这个数字.
当你达到方法限制时,你可以选择两种途径(至少我知道).
1)缩小你的代码
2)构建多个dex文件(参见此博文)
我调查了两个并试图找出导致我的方法计数变得如此之高的原因.Google Drive API占据了Guava依赖的最大块,超过12,000.Drive API v2的总库存超过23,000!
我想我的问题是,你认为我该怎么做?我应该删除Google云端硬盘集成作为我应用的功能吗?有没有办法缩小API(是的,我使用proguard)?我应该采用多重dex路由(看起来相当痛苦,尤其是处理第三方API)?
用户是否能够将我的应用程序的apk文件转换回实际代码?如果他们这样做 - 有什么办法可以阻止这种情况吗?
实际上我试图提取一个名为cloudfilz.apk的.apk文件的代码,并想在其源代码中操作,所以我按照下面给出的步骤: -
创建一个新的文件夹并放入.apk文件(你要解码)现在重命名这个扩展名为.zip的.apk文件(例如:从filename.apk重命名为filename.apk.zip)并保存它..现在你得到了类.dex文件等...在这个阶段你可以看到drawable而不是xml和java文件......所以继续......
第2步:
现在解压缩此zip文件在同一个文件夹中(在这个例子或case NEW FOLDER).现在从这个链接http://code.google.com/p/dex2jar/下载dex2jar 并将其解压缩到同一个文件夹(在本例中为NEW FOLDER).....现在打开命令提示符并到达该文件夹(在这个案例NEW FOLDER)....在达到写"dex2jar classes.dex"并按下回车.....现在你得到同一文件夹中的classes.dex.dex2jar文件......
=>问题: - 我成功实现了第1步,但是在第2步,当我执行dex2jar classes.dex时java.lang.UnsupportedClassVersionError,我在命令提示符上出现错误,我知道这是由于我安装的jdk版本和classes.dex jdk版本号之间的不兼容所以卡在这里,dnt出路......
我在使用SimpleXML尝试使用Gradle 0.5.+和Android Studio编译Android应用程序时遇到了麻烦.
这是错误:
Gradle: Execution failed for task ':MyApplication:dexDebug'.
> Failed to run command:
/Applications/Android Studio.app/sdk/build-tools/android-4.2.2/dx --dex --output <REALLY_LONG_STRING.....>
Error Code:
1
Output:
trouble processing "javax/xml/stream/events/StartElement.class":
Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.
This is often due to inadvertently including a core library file
in your application's project, when using an IDE (such as
Eclipse). If you are sure you're not intentionally defining a
core class, then this is …Run Code Online (Sandbox Code Playgroud) android ×10
dex ×10
java ×2
adt ×1
apk ×1
decompiler ×1
decompiling ×1
eclipse ×1
gradle ×1
guava ×1
obfuscation ×1