在 Android 中动态加载 .dex 文件时出现“ClassNotFound”异常

2023-12-02

我正在尝试学习在 Android 中动态加载类(.dex/.jar)。我从教程和 Stack Overflow 问题中收集了基本想法 (tutorial, this, and this),但我未能实现动态加载类文件并不断给出的目的ClassNotFound例外。

我的步骤简述:

  1. 创建了文章中给出的 Java 文件。

     public class DynamicClass {
         public static void main(String[] args){
             print();
         }
    
         public static void print() {
             System.out.println("Hello Dynamic");
         }
     }
    
  2. 将 java 源代码转换为 .class(结果 = DynamicClass.class)

     javac DynamicClass.java
    
  3. 使用创建的jar文件dxAndroid SDK 中的工具。 (结果=包含classes.dex的dynamic.jar)

     dx --dex --output=dynamic.jar DynamicClass.class
    

    获得 .jar 文件后,我将其推送到 /sdcard/ (在模拟器和设备上都进行了测试)

    模拟器:Android 6.0 和 设备:安卓11.0

    加载类的简要代码:

     try {
             String dexPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dynamic.jar";
             Log.d("DYNAMIC_TEST","dexPath: "+dexPath);
             final File tmpDir = getDir("dex", 0);
    
             // temporary file creation for .exists() check
             File dexFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dynamic.jar");
    
             if (dexFile.exists()){ // dexFile location is same as dexPath location
                 Log.d("DYNAMIC_TEST", "File Found");
                 DexClassLoader dexClassLoader = new DexClassLoader(dexPath,
                         tmpDir.getAbsolutePath(), null, this.getClass().getClassLoader());
    
                 Class dynamicClass = dexClassLoader.loadClass("DynamicClass");
                 Method printMethod = dynamicClass.getMethod("print");
                 printMethod.invoke(dynamicClass.newInstance());
                 Log.d("DYNAMIC_TEST","Success");
             }
             else {
                 Log.d("DYNAMIC_TEST", "File NOT Found");
             }
    
         }catch (Exception e){
             Log.d("DYNAMIC_TEST", "Exception: "+ e.toString());
         }
    

我不断地得到ClassNotFound例外。

我缺少什么?为什么无法加载这个简单的类文件:(?

我的清单:

  1. 确保代码能够获取加载的文件(.exists())。代码能够获取该文件。只是无法加载类。
  2. 确信动态jar包含一个类.dex进入其中。 (这是因为Dex类加载器想要一个.jar/.apk文件与类.dex进入其中)
  3. 尝试在模拟器和设备上运行代码(两者都有不同的 Android 版本)。

异常描述:

异常:java.lang.ClassNotFoundException:在路径上找不到类“DynamicClass”:DexPathList[[zip文件“/storage/emulated/0/dynamic.jar”],nativeLibraryDirectories=[/system/lib64,/vendor/lib64 ]]

包含包后出现异常。

异常:java.lang.ClassNotFoundException:在路径上找不到类“mypack.DynamicClass”:DexPathList[[zip文件“/storage/emulated/0/mypack.jar”],nativeLibraryDirectories=[/system/lib64,/vendor /lib64]]


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中动态加载 .dex 文件时出现“ClassNotFound”异常 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • Android 中用虚拟键盘捕捉按键按下的情况?

    使用物理键盘 您可以使用按键监听器 http developer android com reference android text method KeyListener html 就像是 myEditText setOnKeyListe
  • 与其他图标相比,AppCompat ShareActionProvider 图标太大

    我将 ActionBarSherlock 更改为 AppCompat v7 我已经完成了使其工作所需的所有更改 但是共享图标 使用 ShareActionProvider 发生了一些奇怪的情况 与其他图标相比 共享图标太大 我还使用支持库进
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • android webview 函数 onPagefinished 被调用两次

    我的android webview功能onPageFinished被调用两次 我不知道为什么 但它在 android 2 2 上运行良好 但当我将其升级到 4 时 它就不起作用了 代码附在下面 Code Override public vo
  • 如何获取.so文件的依赖项列表?

    假设我有libFoo so为 android arm 编译 我不确定它链接到什么STL实现 有options http developer android com intl ru ndk guides standalone toolchai
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • Renderscript 示例构建错误

    所以我想尝试使用 RenderScript 的示例 并在 Eclipse 中导入了 HelloWorld 但它给了我这样的错误 2011 10 25 13 10 48 HelloWorld home mileoresko workspace
  • Android:应用内计费V3超时返回哪个响应码?

    出现网络超时情况时 Google Play 应用内结算服务 ice er V3 将返回哪些响应状态代码 它的所有功能都是统一的吗 我将在这里描述我的发现 我通过拔掉主机插头 在安装了全功能 GP GP Store V3 10 10 GP S
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • 如何在进入新活动之前终止线程和处理程序

    大家好 在我尝试清理处理程序时 这段代码可能有点混乱 因为我一直在尝试追踪崩溃发生的位置 我有一个对话框活动 显示密码输入 进度条由线程和处理程序动画显示 似乎当我试图查看进度条是否完成并尝试终止线程时 当我尝试进入新活动时 我这样做的方式
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • BottomSheetDialog get Behavour 始终返回 null

    我与底部表单对话框我必须获得行为才能设置setBottomSheetCallback 来处理一些事情 As 谷歌说 https android developers googleblog com 2016 02 android suppor
  • 在为 Android 实现 Google 登录时,任务“:app:transformClassesWithDexForDebug”执行失败

    我正在尝试为 Android 实现 Google 登录 并且我正在按照以下说明进行操作 https developers google com identity sign in android start integrating https
  • NoClassDefFoundError:无法解析:Landroid/support/v7/appcompat/R$styleable

    新手尝试完成 Google 提供的我的第一个应用程序教程 在这个致命异常的过程中 我确实导入了很多随机包来消除许多事情的 无法解析 错误 例如 ActionBarActivity EditText Fragment LayoutInflat
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A

随机推荐

  • scala 编译错误

    我是scala的新手 我最近开始使用 netbeans 编写 scala 程序 我已经安装了 scala 版本 2 11 0 400 及其 netbeans 插件 当我尝试编译我的 scala 代码时 package scalaapplic
  • 如何修改 Fedora 软件包并修复错误

    我有一个来自 Fedora 的老游戏 位于一个名为 6 的包中 它有一个错误 我想添加一些简单的功能 我在这里询问了该过程的一部分 参见如何处理源 RPM 中的构建依赖关系 得到了一些答案 发现学习曲线对于我的老大脑来说实在是太难了 文档往
  • Cygwin bash shell 中的 For 循环,后跟“">”

    当我在 cygwin bash shell 中键入以下命令时 for i in ls do echo i done 我收到一个 gt 要求我继续输入 这与预期的行为相反 为什么 你需要将 for do 和 did 语句分开 试试这个 for
  • python中的零填充右移

    function e t return e lt lt t e gt gt gt 32 t 我在js中有这个方法 我对移位操作不太了解 我想用 python 写这个 我如何在 python 中编写等效代码 因为它不支持JS 中的零填充右移运
  • 使用具有非标准端口的远程存储库

    我正在为远程存储库设置本地 git 项目 远程存储库正在非标准端口 4019 上提供服务 但这不起作用 相反 我收到以下错误消息 ssh connect to host git host de 4019 port 22 Connection
  • Whatsapp 和 Viber 使用哪些机制进行聊天和消息传递

    我正在搜索有关 Whatsapp 和 Viber 的一些信息 他们通过 VOIP 提供免费通话 短信和聊天功能 任何人都可以确定这两个应用程序使用哪种机制 意味着聊天使用了哪种协议以及其他详细信息 以及任何其他可能有助于创建此类聊天应用程序
  • 更改带有选项卡的接受按钮

    我有一个用 C 编写的 Windows 窗体应用程序 它有三个选项卡 我希望接受按钮随活动选项卡一起更改 就像当我在选项卡 1 中时 我希望按钮 1 成为接受按钮 但当我在选项卡 3 中时 我希望按钮 3 成为我的接受按钮 我不知道如何做到
  • 如何为networkD3的sankeyNetwork中的组着色?

    我的节点由名称和组组成 但我似乎无法在桑基图中为组实现不同的颜色 默认颜色为全蓝色 或者使用下面的代码为全黑色 这是我使用的代码 sankeyNetwork Links data links Nodes data nodes Source
  • Android Java UTF-8 JSON

    我的应用程序的一部分在 mysql 数据库上执行查询 通过 php 我在数据库中使用 UTF 8 因为我有像 这样的字母需要出现 我通读了这个问题 因为这看起来几乎是一样的 Android Java UTF 8 HttpClient 问题
  • RMarkdown 自动锚定部分

    嗯 我使用 Markdown 已经一年了 今天突然在标题旁边自动添加了一个 a 标签 有人会知道为什么这些锚点是自动生成的以及我如何删除它们 Pd 解决这个问题的一种方法是使用h1 h2等 但是随着pdf输出 索引被消除 所以它并不能真正解
  • 检查字符串中是否包含对象值的任何部分

    我有一个看起来像这样的字符串 link to page foo bar test 1 另外我有一个看起来像这样的对象 key foo bar test false mock data 我想要实现的事情相当简单 我认为 但也许我在这里错过了显
  • 在 IIS 7.5 中部署 MVC3 - 不断收到 CS1009: 无法识别的转义序列错误消息

    我不断得到 Line 43 public override void Execute Line 44 WriteLiteral Line 45 Line 46 Source File c Windows Microsoft NET Fram
  • 如何在 Spring 中使用列表作为模型属性?

    我的家庭控制器是这样的 RequestMapping public ModelAndView welcome ModelAttribute myValuesInRows List
  • FolderItem.InvokeVerb("Delete") 无需确认

    我正在尝试编写一个工具 该工具将自动存档服务器上的旧日志文件并从存档中删除太旧的文件 并且有问题 我需要使用 powershell 从 ZIP 存档中删除单个文件 所以我这样做 testFile C test logs FirstEntry
  • Avaje - EBean - 部分对象查询禁用延迟加载

    我正在使用 Play 开发一个应用程序 框架 2 1 3 使用 EBean 作为模型层我希望能够执行部分对象查询 并且当我序列化为 JSON 准备将结果发送回用户时 不要按需延迟加载未选择的属性 我尝试将 AutoFetch 设置为 fal
  • 无法在 Rmarkdown 报告中生成交互式绘图

    我有一个 Rmarkdown 文档 其中包含用plotly绘制的图 并且想生成一个html文件 当我点击时它起作用编织为 HTML在 Rstudio 中 但当我在命令行上运行以下命令时则不然 Rscript e require knitr
  • 为什么这个 Less 表达式根据数学运算而成为语法错误?

    我有以下 Less 片段 Foo 50px someClass width calc 100 Foo 5px 这很好用 但是 如果我将其更改为 Foo 50px someClass width calc 100 Foo 5px 我们现在有一
  • 如何测试是否已获得管理员同意

    我们正在开发一个 Office 加载项 可使用 Azure AD 的组织帐户进行身份验证 该加载项需要管理同意 因此 如果管理员登录 应引导他表达管理同意 我们使用 OAuth 进行身份验证 https login microsoftonl
  • Mysql事务:提交和回滚

    我将 PhpMyAdmin 数据库引擎从 MyISAM 更新为 INNODB 以允许回滚 这是我的 SQL 查询 START TRANSACTION UPDATE jkm content SET state 0 WHERE title IN
  • 在 Android 中动态加载 .dex 文件时出现“ClassNotFound”异常

    我正在尝试学习在 Android 中动态加载类 dex jar 我从教程和 Stack Overflow 问题中收集了基本想法 tutorial this and this 但我未能实现动态加载类文件并不断给出的目的ClassNotFoun