问题标签 [dexclassloader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 带有 DexClassLoader() 和用户界面的插件系统
对于一个长期的学生项目,我正在尝试使用插件开发一个模块化应用程序。具体来说,我们将有:
一个主应用程序,我们可以在其中搜索、更新、删除和运行插件。该主应用程序还将存储来自插件的一些数据。
从 HTTP 服务器下载的几个带有代码和 GUI 组件的插件。
现在,我有一个主应用程序,它能够从 HTTP 下载一个 .apk 文件,并从这个 .apk 文件中定义的类创建一个新实例。我使用这里描述的方式:http ://android-developers.blogspot.fr/2011/07/custom-class-loading-in-dalvik.html和 DexClassLoader() 方法。
但我无法看到如何显示作为资源存储在插件 .apk 文件中的布局(或任何其他 GUI 组件)。例如,我尝试使用插件类名从主应用程序创建一个 Intent,但没有成功:
这不起作用,因为 Intent 没有在主应用程序的 AndroidManifest.xml 中声明。这也在另一个线程中进行了描述:Android- Using DexClassLoader to load apk file
这是否意味着绝对没有办法构建这样一个“动态”的用户界面?更一般地说,这种类型的插件系统可以在Android上完成吗?我应该尝试其他方法吗?
android - Android:动态类加载到沙盒
我想从不受信任的来源加载动态类。
我发现本教程使用DexClassLoader加载动态类。如何防止加载的类侵入我的数据库或对我的应用程序造成任何损害?可能吗?
android - 如何在外部非活动类(插件)中使用本地资源?
我正在尝试为我的活动设计一个插件系统。为此,我创建了名为 PluginClass 的新类,该类位于我的项目外部并放入不同的包中,我使用 DEXClassLoader 从我的主应用程序加载该类。
我可以轻松地从主应用程序调用所有 PluginClass 方法,并且工作正常。当我尝试访问 PluginClass 项目的资源时,问题就出现了。让我解释一下:PluginClass 使用 getInflatedBox 方法将本地布局膨胀到主活动对象中,如下所示:
这应该将布局“boxeslayout”膨胀到根对象中,来自这个调用的主要活动(我删除了 try/catch 以使其可读):
其中 BoxX 是扩展 LinearLayout 的自定义类。
这是问题出现的地方:我得到了一个扩展为根实例的布局,但不是我想要的布局。实际上,R.layout.boxeslayout 访问本地主要活动资源,将恰好具有相同 id 值的活动的布局膨胀到根目录。
由于我的 PluginClass 不是一个活动,我不能使用 context.getResources。知道如何强制 pluginclass 的方法访问插件资源吗?
非常感谢您的帮助。
android - DexClassLoader - 添加功能
我正在用 DexClassLoader 做一些测试,看看是否可以用新功能“更新”我的应用程序。目前我有这种测试方法,它适用于 testClass 并运行 test() 方法。我想知道,我怎样才能“替换”或“更新”和已经存在的类..?欢迎任何想法或其他建议。
方法:
android - 加载加密的 apk 并即时解密
我想动态加载一个加密的 jar 文件。我已经动态加载了一个 Dex 文件,它工作正常。我在模拟器和我的安卓设备上都试过了。现在我想加载加密文件。据我了解,我必须自定义类加载器,以便它可以在执行文件之前先动态解密文件。
如果有人可以指导我如何实际实现这一点,我会很高兴。我有一个想法,但我不是经验丰富的程序员。
提前致谢
公共类 MainActivity 扩展 Activity {
}
android - Android 从不卸载类的情况仍然如此吗?
我们有一个大型应用程序,它总是遇到可怕的方法计数限制。我被要求想出一种让它做更多事情的方法,包括支持插件。寻找卸载代码的方法,我遇到了JNI Tips 上面说
仅当与 ClassLoader 关联的所有类都可以被垃圾回收时,类才会被卸载,这在 Android 中很少见,但并非不可能。
这似乎确实意味着如果您说可以卸载插件,
DexClassLoader
为每个 .jar 文件使用一个新的,- 仅通过接口引用引用插件,并且
- 完成后取消该接口引用的任何副本。
所以,我创建了一个测试用例:
- 我创建了几个微不足道的插件,每个插件都使用一个独特的加载器。
- 我使用该队列创建了一个
ReferenceQueue<ClassLoader>
并创建了对我的两个加载器的弱引用;我创建/启动了一个无限循环的线程,进行队列.remove()
和报告。 - 我同样使用队列创建了一个
ReferenceQueue<Class<?>>
并创建了对每个插件的弱引用;getClass()
我创建/启动了另一个监视类引用队列的线程。 - 我创建了一千个 1000x1000xARGB_8888 位图来彻底强制 gc。
我的监控线程似乎可以工作 -当我错误地加载两个插件时,我看到了loader2
gc-ed ;-) - 但否则我的线程保持沉默,即使在 4.3 上也是如此。loader1
我是否可能在这个测试用例中遗漏了一些明显的东西,或者仍然是这样的情况
Dalvik VM 当前不卸载类
正如 Google 员工fadden在Android 中所说:系统何时卸载类?
android - DexClassLoader 的 jar 中的 android startactivity
我把jar文件放到sd卡里,jar文件已经被dx处理过了。在jar里面有一个activity,如何在jar文件中启动activity?
android - Delphi xe5 JNI:ClassNotFoundException
我按照 stackoverflow ( http://www.pclviewer.com/android/androidJNI.html ) 上提供的教程导入设备特定库来处理扫描仪 (Honeywell 70e Black)。
TJDexClassLoader 确实正确实例化(不是零......)但我无法加载我需要的内部类......
我在eclipse下打开了库,我多次检查了字符串,没关系,但是我得到了这个异常:
我已经知道如果它有效,我将立即陷入一个新问题:为我将实例化的类提供 Context 和 Handler,其签名是:
提前感谢您的帮助或建议^^
android - Android:在运行时从位于 assets 文件夹中的 jar 文件加载自定义类
我正在开发一个从资产中读取 excel 文件的 Android 应用程序。我正在使用 POI-3.9 库来读取 .xls 文件并且工作正常。然后我还必须读取 .xlsx 文件,所以我添加了其他 jar 文件,如 poi-ooxml-schemas-3.9.jar、poi-ooxml-3.9.jar、log4j.jar ……等等。但是当我尝试构建时应用程序,日食冻结并崩溃。然后我尝试使用命令行构建项目,它揭示了 dex 文件限制的错误,它最多可以有 64K 方法,而我的项目超过了 66K。然后我尝试删除一些jar文件,找出哪个文件有这么多的方法,发现它是poi-ooxml-schemas-3.9.jar。所以我打算将 poi-ooxml-schemas-3.9.jar 文件放在 assets 文件夹中,并使用 DexClassLoader api 加载 jar。但它每次都会给出 ClassNotFoundException,即使在调试时我可以在 DexClassLoader 实例中看到一些类名条目。我不知道我哪里错了。我的 jar 文件格式是否错误,无法被 DexClassLoader 或其他东西读取?这是我正在使用的示例代码:
android - 由意外 DEX 解析的类;
我正在开发一个应用程序,它自动从外部 apk 文件中的外部 dex 加载类(外部 apk 文件存储在应用程序的内部存储中)。外部 apk 文件具有使用 com.google.gson 的类。
应用程序的源代码
外部apk文件中的类有以下方法
但是我在运行时遇到以下问题:
03-05 17:10:59.479:W/dalvikvm(5433):(Lorg/vkedco/android/startedsumlooperservice/StartedSumLooperService;使用了不同的 Lcom/google/gson/Gson;在预验证期间)
根据 Android 构建过程,dex 文件与 3rd 方库(例如这里的 gson)被捆绑到 dex 文件(classes.dex)中。因此,在使用 DexClassLoader 初始化类加载器时,我不需要手动指定所有第三个库。我是对还是错?