You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建Android项目时跳过dex流程 获取标准class类与依赖包

Gradle 7.3.3 适配方案:生成含全量class的标准Jar用于运行main方法

不需要调整现有Android构建的dex流程,直接在app模块添加独立自定义构建任务,在Java编译完成后、dex任务启动前收集所有业务class、依赖class,打包为标准JVM可识别的fat jar即可。

配置步骤

1. 添加自定义Gradle任务

打开app模块下的build.gradle文件,在文件末尾追加以下配置:

task fullClasspathJar(type: Jar) {
    archiveBaseName.set("main-runtime-classpath")
    archiveClassifier.set("all")
    // 收集debug变体编译产出的业务class文件(未经过dex转换)
    from android.applicationVariants.debug.javaCompileProvider.get().outputs.files
    // 收集所有debug运行时依赖的class、资源文件
    from configurations.debugRuntimeClasspath.collect { entry ->
        entry.isDirectory() ? entry : zipTree(entry)
    }
    // 排除jar签名、校验类文件,避免运行main方法时触发安全校验报错
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/MANIFEST.MF'
    // 声明任务依赖,确保编译完成、依赖解析完成后再执行打包
    dependsOn configurations.debugRuntimeClasspath.buildDependencies
    dependsOn android.applicationVariants.debug.javaCompileProvider.get()
}

2. 执行任务生成产物

在项目根目录执行以下Gradle命令:
./gradlew :app:fullClasspathJar

任务执行完成后,产物存放在app/build/libs/main-runtime-classpath-all.jar路径下,该jar为标准Java字节码格式,未经过任何dex转换,包含:

  • 所有业务代码的.class文件
  • 全部第三方依赖(含ORMLite、androidx等)的.class文件
  • 依赖包内合法的META-INF资源文件

3. 运行main方法

调用标准java命令时,直接将上述jar作为classpath传入即可,示例:
java -cp app/build/libs/main-runtime-classpath-all.jar <你的main方法所在类的全限定名>

针对ORMLite生成表配置的场景,直接在main方法中调用官方TableConfig工具类即可,不需要额外补充依赖,所有类路径要求已经满足。

补充说明

  • 该自定义任务和原有APK构建流程完全独立,不会修改assembleDebug/assembleRelease的原有产物,不会影响正常打包
  • 如果需要基于release变体构建,将配置中所有debug字段替换为release即可,注意需要临时关闭release的混淆配置,避免类名、注解被混淆导致ORMLite映射失败
  • 该逻辑完全复刻旧版Android Studio自动生成Java运行配置的classpath拼接逻辑,避开了新版Android Studio使用废弃Gradle属性导致的运行崩溃问题

内容的提问来源于stack exchange,提问作者Kenny Wyland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:42:09