Articles of dex

自动转换Android的dex代码

我想转换/仪器Dex文件。 转型的目标包括测量代码覆盖率。 请注意,源文件不可用。 所以检测Dex是唯一的选择。 我想知道是否有任何现有的代码库,我可以看作为编写工具来实现我的目标的示例。 我了解Smali项目以及以Smali为基础的许多其他项目。 但是,这些项目都不是我的目的的好例子。 我正在寻找自动转换smali代码或dexlib表示的代码,从中生成smali。 后一个选项对我来说是首选,因为可以避免生成smali的开销。

如何将特定类放入主DEX文件?

我们在Amazon market上发现一个问题,如果IAP的接收器不在主DEX文件中,则IAP不起作用。 问题是如何强制gradle将特定类(接收器)放入主DEX文件中。 编辑:使用gradle DEX设置更新 afterEvaluate { tasks.matching { it.name.startsWith(‘dex’) }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += ‘–multi-dex’ dx.additionalParameters += “–main-dex-list=class_files.txt” } } dexOptions { javaMaxHeapSize “4g” preDexLibraries = false } compile(‘com.android.support:multidex:1.0.0’)

使用ant或Eclipse进行编译时出现多个dex文件错误

我无法构建我的应用程序我正在运行今天下载的最新构建工具,这在更新后开始发生。 -dex: [dex] Converting compiled files and external libraries into /Users/rob/Repos/my_app/bin/classes.dex… [dx] [dx] UNEXPECTED TOP-LEVEL EXCEPTION: [dx] com.android.dx.util.DexException: Multiple dex files define Lcom/robaldred/myapp/About$1; 我已经尝试过清理和重建,我也尝试过在Eclipse中但它也会出现同样的错误。 有人有任何想法吗? 我现在在这里的砖墙。

无法执行dex:多个dex文件定义Lcom / actionbarsherlock / R $ attr

我为我的应用程序创建了一个库项目。 当我尝试将库添加到项目时,尝试运行时会出现以下错误: [2013-02-07 04:51:26 – Dex Loader] Unable to execute dex: Multiple dex files define Lcom/actionbarsherlock/R$attr; [2013-02-07 04:51:26 – testfromlibrary] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/actionbarsherlock/R$attr; 我已将HoloEverywhere库添加到我的库中,而我已将ActionBarSherlock库添加到HoloEverywhere。 我在Windows 7上使用Eclipse。 即使我将SDK更新到最新版本,重新启动Eclipse并清理了各种项目,但错误仍然存​​在。 有没有人知道如何解决这个错误? 我的bin目录不包含在属性下的构建路径中,我尝试完全删除bin文件夹 。 谢谢!

带有multidex的Xamarin Android – 调试模式下的bug

我创建了Xamarin Forms应用程序。 我使用Android的multidex(许多库)。 我使用带有MultiDexMainDexList选项的multidex.keep文件。 现在部署工作。 但是我在调​​试模式下遇到exception: System.ArgumentException: The offset and length have exceeded the bounds of the array or the counter value exceeds the number of elements from the pointer to the end of the original collection. в System.Buffer.BlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count) в Mono.Cecil.Metadata.GuidHeap.Read(UInt32 index) в Mono.Cecil.MetadataReader.InitializeCustomDebugInformations() в Mono.Cecil.MetadataReader.GetCustomDebugInformation(ICustomDebugInformationProvider […]

用于调试版本的Android Studio APK Analyzer

我正在运行最新版本的Android Studio(2.2 Preview 1),该版本刚刚发布并试图利用一些新工具。 新的APK分析器非常有用,但是我不能让它与调试版本一起工作,它似乎只对发布版本准确。 下面是发布版本的截图,因为您可以看到方法计数看起来准确,并且包含了我正在使用的所有android库。 现在,如果我拉入相同应用程序的调试版本,它看起来完全不同。 我缺少所有应用程序代码,以及所有第三方库。 而且你可以看到方法计数也大大减少了。 我在这做错了吗? 如何在我的调试版本中进行此分析? 请注意 James Lau的G +: 工具旨在帮助您了解并减少发布APK的大小,因为这是您发布的内容。 因此,您可能希望在Release APK上运行它。 您可以启用Instant Run以构建Release APK,因为Instant Run仅适用于Debug。

MultiDex支持Android应用程序错误

我想使用Android L compat libs。 将相关代码添加到gradle后,我收到错误: Error Code: 2 Output: objc[36290]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167) at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) […]

ClassLoader替换预加载的类?

一般问题:是否可以使用ClassLoader替换预加载(通过系统,例如在Android的%android%/ frameworks / base / preloaded-classes文件中find)类? 具体:我试图在我的应用程序中创建WebView之前使用DexClassLoader替换android.net。*中find的类。 我可以得到一个Class对象,但getMethods()例如给了我一个我期望在未修改/原始类实现中的数组。 这是由于preloaded-classes系统吗? 基本设置和伪代码: 修改android.net。*类,添加一些测试方法/等。 编译并以classes.dex结束 jar cf mytest.jar classes.dex 在APK资产中包含mytest.jar 创建DexClassLoader并通过loadClass()获取Class Class对象上的getMethods()返回一个我希望在#1中没有修改的情况下看到的数组 我可以提供有关我正在使用的设置和代码的更多详细信息(如果需要)。

当dex.force.jumbo = true时,dexopt在一个非常大的APK(乱序的method_idx)上失败了

我有一个非常大的Android项目,包含多个大型第三方jar子(作为Android库)。 我相信我已经达到了Dex的最大方法限制数量(通过eclipse进行编译): [2012-11-18 02:28:45 – 在文件中查找] Dx处理classes.dex … [2012-11-18 02:28:48 – Dex Loader]无法执行dex:无法将新索引66774合并为非巨型指令! [2012-11-18 02:28:48 – 在文件中查找]转换为Dalvik格式失败:无法执行dex:无法将新索引66774合并为非巨型指令! 因此,利用SDK工具21(平台工具16)编辑了我的主项目project.properties来设置dex.force.jumbo=true 。 允许我生成APK的标志。 但我无法正确安装(在物理和模拟器上)。 似乎有一个dex优化器失败: 11-18 20:11:05.338:I / PackageManager(103):运行dexopt on:com.mypackage.myapp 11-18 20:11:08.577:E / dalvikvm(868):乱序method_idx:0x2ae0然后是0x1 11-18 20:11:08.577:E / dalvikvm(868):问题1544 @ offset 0xf7ae24 11-18 20:11:08.577:E / dalvikvm(868):交换types2006失败 11-18 20:11:08.577:E / dalvikvm(868):错误:字节交换+validation失败 11-18 20:11:08.597:E / dalvikvm(868):优化失败 11-18 20:11:08.597:W / installd(39):DexInv:— END’/ […]

使用.aar NoClassDefFoundError但是Class Exists并且是Dexed

我有几个项目,我建立一个.aar。 然后我将这个.aar导入到/ libs下的Android Studio中。 此依赖项的build.gradle文件如下所示: repositories{ flatDir{ dirs ‘libs’ } } dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) compile ‘com.android.support:appcompat-v7:22.0.0’ compile ‘com.google.android.gms:play-services:7.0.0’ compile ‘com.android.support:multidex:+’ compile(name: ‘customApi-debug’, ext:’aar’) } 由于库非常大,我设置了multiDexEnabled = true。 Android Studio查找库和自动填充function。 构建工作正常,但运行应用程序会出现以下错误: java.lang.NoClassDefFoundError: com.companyx.android.api.ui.vision.metaio.MetaIoView at com.companyx.android.api.ui.vision.metaio.MetaIoView$$InjectAdapter.(MetaIoView$$InjectAdapter.java:29) 我分别对.aar和dex文件进行了解压缩和反汇编,并validation了它所抱怨的类实际存在。 我已经尝试过处理这个问题的现有方法,但它们都没有奏效。 有人经历过这个吗? 提前致谢。