跳转到内容

Java→DEX 编译与调用

更新: 2025/7/20 字数: 0 字 时长: 0 分钟

IntelliJ IDEA 开发java模块

IntelliJ IDEA 的安装和java环境的配置

不会的可以自己百度解决,很简单

创建项目

新建项目-》java模块

新建软件包

com.cloud

创建Student类

生成构造方法常用快捷键Alt + Insert

快速补全功能自动生成左侧的类型和变量名快捷键:Ctrl + Alt + V

java
package com.cloud;
public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

创建UseDex 类(运行测试)

java
package com.cloud;
public class UseDex {
    public static void main(String[] args) {
        Student student = new Student("Bot.js", 18);
        String name = student.getName();
        student.setAge(15);
        int age = student.getAge();
        System.out.println("学生名字: " + name + ", 年龄: " + age);
    }
}

jar转dex视频教程Bot.js pro9调用jar dex

添加工件

文件-》项目结构-》工件-》+ -》来自具有依赖项的模块-》选择主类-》确认

构建 JAR 包

构建-》构建工件

会在项目目录的out/artifacts/useDex_jar目录下生成useDex.jar文件

生成后的路径为:

bash
out/artifacts/useDex_jar/useDex.jar

你可以运行该 JAR 文件测试:

shell
java -jar useDex.jar

jar转dex视频教程Bot.js pro9调用jar dex

JAR 转换为 DEX

你可以使用 Android SDK 的 dx 工具,或 MT 管理器直接转换:

shell
dx --dex --output useDex.dex useDex.jar

Bot.js 脚本调用 JAR 文件

js
var dexFilePath = "/storage/emulated/0/cloud/dex/useDex" + ".jar";
runtime.unloadJar(dexFilePath);// 是一个用于实现 jar 卸载的自定义方法或函数。它的参数 dexFilePath 是要卸载的 jar 文件的路径。通过调用这个方法,你可以通知 Android 运行时系统去卸载特定的 jar 文件,从而释放相关的资源和内存。
runtime.loadJar(dexFilePath);//导入jar文件
importClass(com.cloud.Student);//导入类
var student = new Student("Bot.js", 18);
var name = student.getName();
log(name)
student.setAge(15);//修改年龄
var age = student.getAge();
log("学生名字: " + name + ", 年龄: " + age);

jar转dex视频教程Bot.js pro9调用jar dex

Bot.js 脚本调用 DEX 文件

js
var dexFilePath = "/storage/emulated/0/cloud/dex/useDex" + ".dex";
//runtime.unloadAll(true);//是一个用于实现卸载所有类和 DEX 文件的自定义方法或函数。它的参数 true 表示在卸载时会同时释放相关的资源和内存。
runtime.unloadDex(dexFilePath);// 是一个用于实现 DEX 卸载的自定义方法或函数。它的参数 dexFilePath 是要卸载的 DEX 文件的路径。通过调用这个方法,你可以通知 Android 运行时系统去卸载特定的 DEX 文件,从而释放相关的资源和内存。
runtime.loadDex(dexFilePath);//导入dex文件
importClass(com.cloud.Student);//导入类
var student = new Student("Bot.js", 18);
var name = student.getName();
log(name);
student.setAge(15);//修改年龄
var age = student.getAge();
log("学生名字: " + name + ", 年龄: " + age);

jar转dex视频教程Bot.js pro9调用jar dex

Android Studio 开发java模块

和IDEA 的类似

打包注意事项

在打包 APK 应用时,项目根目录下或其任意子目录中的所以文件(包含.dex.jar.so……等 )会被自动打包进最终的 APK 中。因此:

  • 建议将 DEX 文件放置在项目内的特定目录中(例如 ./dex/),以便管理。
  • 在脚本中使用相对路径加载 DEX 文件,确保在 APK 中也能正确访问。

示例代码如下:

js
// 指定项目内相对路径,指向 dex 文件所在位置
var dexFilePath = "./dex/useDex.dex";

// 检查 dex 文件是否存在(支持 APK 内路径)
if (files.exists(dexFilePath)) {
    // 为避免重复加载,先卸载已有 dex(如果已加载)
    runtime.unloadDex(dexFilePath);
    
    // 加载 dex 文件,使其中的 Java 类和方法可供 JS 脚本调用
    runtime.loadDex(dexFilePath);
}