Articles of dex

Javareflection处理库的更改

好的,我有一个Android应用程序,我开始为应用程序创建一个插件系统,以便开发人员可以编写应用程序可以用来生成不同内容的内容提供程序,我不会完成整个过程,但一切正常,如下所示: 1)我创建了一个名为com.myaddonlib的库,我在我的项目中导入了这个库中有一个接口和不同的对象。 2)现在开发人员可以在他的最后创建一个简单的Java项目,导入库com.myaddonlib ,并在他的主类上实现接口,该接口具有从库中返回不同对象的方法。 3)回到Android应用程序,我可以加载开发人员创建的.jar文件(在将classes.dex添加到jar文件之后)和android DexClassLoader我可以加载实现的界面,如下所示: DexClassLoader classloader = new DexClassLoader(jarFilePath, tempDirectory, null, context.getClass().getClassLoader()); Class classToLoad = classloader.loadClass(“com.apackage.Addon”); 其中Addon是由addon开发人员创建的类,它从驻留在名为com.apackage的包中的库实现接口。 然后,我可以将com.myaddonlib库中的接口com.myaddonlib为com.myaddonlib的新实例,并调用addon开发人员实现的函数。 现在问题就是我决定更新插件库并从类中删除其中一个variables,这意味着插件的类现在与更新库中的类(在应用程序中使用)不同。 即使未使用更改的variables,也会导致应用程序崩溃而不会出现任何错误。 事实上两个类都不同(即使唯一的区别只是一个缺失的variables)会导致某些故障。 现在这不是一个简单的解释程序所以我会理解,鉴于我的英语不好,有些人会遇到麻烦。 我的问题是我需要知道如何避免由于两端之一上的库更改而导致的崩溃。 以及java如何在这种情况下处理对象更改

多个R.java中的冗余资源referance导致DexIndexOverflowException

我有多个库项目,他们都依赖于支持库。 我的应用程序依赖于这些多个库项目。 每个库项目都包含对其R.java文件中的库资源的引用。 由于冗余,这会使字段ID计数膨胀。 我的应用得到了 DexIndexOverflowException:字段ID不在[0,0xffff]中:65536 因为这个冗余的R.java引用。 因此,我的应用程序有47k方法,而65k字段ID。 编辑: 我不会使用multi-dex,它不是我的问题的解决方案。 我想削减冗余字段ID。 问题不在于如何解决问题,问题是如何摆脱冗余字段ID。 使用multi-dex不会删除冗余字段ID。

com.android.builder.dexing.DexArchiveMergerException:无法合并dex – Android Studio 3.0稳定

我做了: 在“设置” – >“Android SDK” – >“SDK工具”中,检查并安装了Google Play服务v.46 删除了文件夹/.gradle “清洁工程” “重建项目 错误是: Error:Execution failed for task ‘:app:transformDexArchiveWithExternalLibsDexMergerForDebug’. > java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 项目build.gradle buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.0’ classpath ‘com.google.gms:google-services:3.1.0’ } } allprojects { repositories { jcenter() google() } } task clean(type: Delete) { delete rootProject.buildDir } […]

在Dex阶段构建大型Codename One应用程序时出错

在dex阶段发送Android版本时,我在构建服务器中出错。 谷歌搜索了一下我了解到有64Kfunction的硬限制(包括所有的库,最重的是谷歌播放服务),或者你可以使用多重dex机制。 如何为Codename One激活此function? 我理解Codename One使用Ant,据我所知,这只适用于gradle。 仅供参考,这是解决方法,将谷歌播放服务拆分为具有原生android的子库: http://android-developers.blogspot.com.es/2014/12/google-play-services-and-dex-method.html

如何在android studio中启用dex编译器D8(下一代Dex编译器)

随着Android Studio 3.0 Beta版的发布 ,android studio提供下一代dex编译器,D8编译代码并构建android APK。 目前D8可供预览。 查看更多详情: https : //android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html 如何在android studio中使用D8启用构建?

Android支持multidex库实现

我已达到魔法dex限制,因为我的应用程序使用了大量的jar(驱动器api,greendao,文本到pdf,支持..)。 我目前的解决方案是,我真的创建了第二个apk,仅用于谷歌驱动器,我从主apk调用。 但现在我发现android最终支持这个库。 我的问题只是我不知道如何实现它(最好没有gradle)。 我找不到任何好的教程。 Okey我正在试图实现这个…我已经find了这个: http : //blog.osom.info/2014/10/multi-dex-to-rescue-from-infamous-65536.html 我补充说: android:name=”android.support.multidex.MultiDexApplication” 到我的清单文件和 protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } 到我的mainactivity.java 还为eclipse安装了gradle插件,导出gradle以获取build.gradle文件,我改为: apply plugin: ‘android’ dependencies { compile fileTree(dir: ‘libs’, include: ‘*.jar’) compile project(‘:android-support-v7-appcompat’) compile project(‘:Sync’) compile project(‘:gdrive:google-play-services_lib’) } android { compileSdkVersion 14 buildToolsVersion “21.1.1” sourceSets { main { manifest.srcFile ‘AndroidManifest.xml’ java.srcDirs = [‘src-gen’,’src’] resources.srcDirs […]

Android Studio:错误:任务’:app:dexDebug’的执行失败

我第一次使用Android Studio,导入项目后出现以下错误(以前是一个eclipse项目,我也有问题。) 以下是给出的信息: Error:Execution failed for task ‘:app:dexDebug’. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: /home/crash-id/Development/SDK/adt-bundle-linux-x86_64-20140702/sdk/build-tools/21.1.2/dx –dex –no-optimize –output /home/crash-id/AndroidstudioProjects/LocalSin/app/build/intermediates/dex/debug –input-list=/home/crash-id/AndroidstudioProjects/LocalSin/app/build/intermediates/tmp/dex/debug/inputList.txt Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lcom/google/ads/AdRequest$ErrorCode; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) at com.android.dx.command.dexer.Main.run(Main.java:246) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106) :app:dexDebug UNEXPECTED […]

动态加载aar库

我正在尝试构建一个库,并使用gradle在Android Studio中的另一个应用程序中动态加载它。 我理解如何创建jar并将它们转换为dex文件以进行加载。 但是当我在Android Studio中使用Gradle构建一个库时 – 我没有得到一个jar – 我得到一个aar文件 – 我似乎无法转向或加载为dex。 如何将aar变为dex文件?

IntelliJ – 64K方法dex问题的动态类加载

我正在开发一个快速接近dex文件的64K方法限制的项目。 这篇Android开发人员博客文章 (自2011年7月起)解释了如何使用由Ant驱动的命令行构建来动态加载类,但是没有探讨如何在IDE中使用它(除了说它在Eclipse中不起作用) )。 我环顾四周,找不到任何关于让这个系统在IntelliJ中工作的东西。 IntelliJ是否支持使用多个dex文件构建应用程序? 如果是这样,如何设置它?

获取Android库中源代码的校验和

我正在开发一个Android库,我想在我的代码中应用篡改检测机制,因为它调用了一些敏感的金融Web服务。 我要实现的是在运行时以编程方式计算apk(或其重要部分)的校验和,这样我就可以防止重新打包或重新编译的apk能够造成任何伤害(防篡改)。 到目前为止我想出的是计算applicationInfo.publicSourceDir的校验和。 但我不确定具有多个dex文件或多个splitApks的应用程序会发生什么。 以编程方式基于Android应用程序的代码库计算校验和的最可靠方法是什么?