问题标签 [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.

0 投票
1 回答
252 浏览

android - Android Instrumentation 测试用例

我想测试来自其他 apk 的活动,并且此测试扩展了 ActivityInstrumentationTestCase2 ( http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html ),因为我需要获取 Activity 和 Instrumentation。

我尝试使用这样的 DexClassLoader:

但我得到一个例外:optimizedDirectory not readable/writable: /data/data/valentin.myapplication2

有解决办法吗?

我需要这个活动,因为我在之后使用它:activity.getWindow().getDecorView()

供参考:

0 投票
1 回答
526 浏览

android - 安卓 DexClassLoader。我无法获得一个名为的方法

  • 我正在使用 DexClassLoader 使用 dx 工具加载从 Java jar 转换为 DEX 的 jar 文件。
  • jar 文件位于:/storage/sdcard0/Download/br_applications/calculator.dx.jar
  • 我有权限:
  • 我的代码是(+/-):

    /li>
  • 我尝试过使用 .apk 文件。结果是最糟糕的。我没有加载课程...
  • 我尝试过使用 .aar 文件。结果很糟糕。
  • ¿ 有人可以给我一个工作代码吗?
  • 我正在使用 Android Studio,并使用带有模块的假 apk 应用程序创建 jar 文件,该模块是 Java Jar。我使用 dx 工具创建 dx.jar 文件:dx --dex --outputcalculator.dx.jarcalculator.jar 谢谢。
0 投票
2 回答
2899 浏览

java - 安卓 | DexClassLoader、ClassNotFound 异常

所以我正在尝试加载我从我的应用程序中编写的类,但我收到 ClassNotFound 异常。

班级:

然后我使用以下命令创建一个 jar 文件:

我的下一步是为我的 jar 文件创建一个 classes.dex,并将其添加到 jar 中:

到目前为止,一切正常,没有错误。

这一步结束时,我的jar文件如下:

我的清单文件包含以下几行:

现在在我的应用程序中,我正在这样做:

笔记:

  1. 我将 myclass.jar 文件复制到

Environment.getExternalStorageDirectory()

目录,我确认应用程序正在正确读取文件。

  1. 我已经在清单文件中设置了所需的权限(读写到外部存储)

给我错误的行是:

错误:

这是被抑制的异常:

我究竟做错了什么?

0 投票
1 回答
705 浏览

android - 无法使用 DexClassLoader、URLClassLoader 或 PathClassLoader 加载类

我正在尝试从服务器加载类文件并使用不同的类加载器对其进行实例化,但没有成功。

我试过了DexClassLoaderURLClassLoaderPathClassLoader。无论我做什么,我得到的唯一东西就是一个ClassNotFoundExceptionfromloadClass方法。

我要做的第一件事是下载:

  • 包含class文件和sex文件的jar文件
  • 包含类文件但没有性文件的jar文件
  • 裸类文件

并将其存储到应用程序私有存储文件夹中。然后我尝试使用上述ClassLoader实现之一加载类,导致:

错误:java.lang.ClassNotFoundException:在路径上找不到类“FormTestView”:DexPathList[[zip file“/data/data/[PACKAGE_NAME]/app_test_folder/test.jar”],nativeLibraryDirectories=[/vendor/lib, /系统/库]]

任何想法?

0 投票
1 回答
535 浏览

java - 为什么动态加载 dex jar 时出现 java.lang.NoSuchMethodError?

APK 文件中有一个interface IA类。我创建了一个包含 IA 的 jar implementation MA。罐子有一个Global classB class。jar 是使用数据目录中的 Dexclassloader 动态加载的。

但是通过反射调用实例的测试方法是可以的。

为什么?当然,我不熟悉 Classloader 或 DexClassloader 的一些原理。有人可以为我解释吗?谢谢

0 投票
2 回答
2891 浏览

android - DexClassLoader 和 PathClassLoader 有什么区别?

我将一个包含 .dex 文件的 .jar 文件放到目录“/sdcard”中,然后我尝试分别使用 DexClassLoader 和 PathClassLoader 将类加载到 .jar 文件中。他们都可以成功加载类。它们之间有什么区别?这是我的代码:

0 投票
0 回答
729 浏览

android - 本机方法 DexFile.defineClassNative 中的 Android IllegalAccessError

我在我的项目中遇到了这个异常:

我的目标 api 是 23;

我的构建工具是 classpath 'com.android.tools.build:gradle:1.5.0'

导致这种情况的 aar 正在使用 dagger、rxjava 和 otto。因此,寄存器功能适用于 otto。

我该如何解决

更让我困惑的是,我在 6.0 设备上运行这个应用程序,但异常发生在 dalvik.system 包中

更重要的是,我检查了我的 apk 中的 dex 文件。可以看出,之前添加的两个aar在同一个dex文件中,即我项目中的第二个dex文件(我使用google的multidex工具将我的应用拆分为multidexes)

0 投票
1 回答
3117 浏览

java - Android:加载界面时DexClassLoader类加载失败

简介:我正在尝试从classes.dexclasses.jar 中的运行时加载代码。我已经做了很多研究,也花了很多时间在这上面,所以我真的需要帮助。

问题:当我的 jar 包含一个简单的类时,它会成功加载。但是,在完全相同的情况下,当我的 jar 包含相同的类时,现在该类实现了一个 interface,加载此类失败并出现错误:

“在路径上找不到类“com.xyzwPatch”:DexPathList[[zip 文件“/data/user/0/xyz/app_dex/classes_dexed.jar”],nativeLibraryDirectories=[/vendor/lib64, /system/lib64] ]"

我也得到:

I/dalvikvm:解析 Lcom/x/y/TestClassImpl 失败;接口 4 'Lcom/x/y/TestClassInterface;'

环境: - 用于尝试加载类的函数:

(DexClassLoader 实例).loadClass & (DexFile 实例).loadClass。

具体来说:

方法一:

方法二:

  • IDE:Android Studio 2.1.2
  • 测试设备:Emulator Nexus 4(带有 API 16、19 和 23),以及带有 Android 6.0.1 的物理 Nexus 5 设备
  • 最令人惊讶的事情:当我打印 dex 文件的类时,我看到了正确的类路径。我使用 DexFile 加载 dex 内容并打印其类路径。此方法识别正确的内容!这让我觉得这与 Android 权限或 Linux 权限有关。我不知道..

这是我的打印方法:

  • PS 似乎无关紧要,但也许不是:我的主机应用程序、通用界面和新内容的实现都位于同一项目的 3 个不同模块中。该应用程序的包名称为 xyz,接口的 pkgName 为 xyzinterface,实现的 pkgName 为 xyzimpl。

我尝试将所有 3 个模块放在同一个项目中的第二个项目,1 个模块无法以相同的方式工作。

请帮忙!

0 投票
0 回答
126 浏览

java - Android 类解析中的怪事

我在 Android 上观察到很多行为(我正在处理一个 multidex 问题,所以我在 4.4.4 中使用了一个模拟器),这让我对 Android 类加载无言以对:

在 Android上,类加载器加载时应该解析类。但是如果我创建一个类:

并调试我的应用程序,添加手表:

然后我可以看到加载M确实加载FooFoo2

于是上课解决了。

奇怪的是,这几乎是第二个问题,但如果我添加M extends Application, thenM根本没有解决,即使在实例化它时也是如此。Foo并且仅在被调用Foo2时才加载到 JVM中,(在is时加载,for )。m(X)FooX"0"Foo2X="1"

这里有没有人对这些潜在问题有合理的解释:

  • 为什么M解决了,类不应该解决。即使实例化M也不应该加载Fooat least Foo2.
  • 为什么扩展类的Application行为不同?
  • 是否有其他以不同方式运行的 Android 类?
0 投票
0 回答
856 浏览

java - 使用 DexClassLoader 从动态加载的 apk 加载本机库

我正在使用动态从 APK 加载 dex 文件,DexClassLoader并且 APK 包含的本机库也打包在以下路径中,

DexClassLoader接受一个文件路径来搜索要加载的本机库,

librarySearchPath String:包含本机库的目录列表,由 File.pathSeparator 分隔;可能为空

但是这个搜索路径似乎只接受文件系统路径。

有没有办法直接在 APK中提供本机库搜索路径,或者我应该手动将本机库提取到某个位置并提供提取的路径?