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 包
构建-》构建工件
会在项目目录的out/artifacts/useDex_jar目录下生成useDex.jar文件
生成后的路径为:
bash
out/artifacts/useDex_jar/useDex.jar
你可以运行该 JAR 文件测试:
shell
java -jar useDex.jar
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);
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);
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);
}