AS--›Gradle 打包指定文件到jar/dex

借助强大的Gradle构建系统, 可以很轻松的打包出jar, 再借助Android SDK中的dx.bat dx.jar文件, 就能转换成dex

使用Gradle创建生成jar文件的任务

/**
 * Jar任务类型, 不支持kotlin文件
 * */
task _makeJar(type: Jar) {
    //任务依赖于assemble任务. 所以此任务执行前, 会先执行assemble任务
    //之所以需要依赖assemble任务, 是因为assemble执行完成后, 会把java文件转换成class文件,
    //然后收集需要的class文件到jar文件.
    dependsOn(assemble)

    //设置生成jar文件所在的路径
    destinationDir = file(rootDir.getAbsolutePath() + "/jar")

    //设置jar文件版本
    version = time()

    //设置jar文件中MANIFEST.MF的内容
    manifest {
        attributes("Manifest-Version": version)
    }

    //设置jar文件名称, 名称后面会自动拼接上 version 值.
    //具体可以查看源码: org.gradle.api.tasks.bundling.AbstractArchiveTask#getArchiveName
    baseName "jar_file_name"

    //保存jar完整路径到全局变量, 此变量主要用于将jar文件转换成dex文件的参数
    project.ext.makeJarPath = getArchivePath().getAbsolutePath()

    //需要打包class文件的路径, 这个路径可以是任意的, 也可以是 assemble 任务生成的.
    //不同的gradle版本, 生成的路径不一样, 可以在 build 文件夹下搜索即可得到.
    from('/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes')
    
    //需要排除的class文件, 比如:去掉R$开头的文件
    exclude {
        it.name.startsWith('R$') || it.name.startsWith('android')
    }

    //需要指定包含的class文件, 此规则优先于 exclude
    include {
        if (it.isDirectory()) {
            true
        } else {
            def name = it.name
            name.startsWith('Java1')
        }
    }
}

之后再AS IDEtasks列表就能看到_makeJar任务. 双击即可运行.

Jar任务Gradle官方API文档

使用Gradle创建jar转换dex文件的任务

/**
 * 此任务需要依赖_makeJar,因为需要拿到jar文件路径
 * */
task _jarToDex(type: Exec, dependsOn: _makeJar) {
    //借助windows的cmd命令行执行
    commandLine 'cmd'

    doFirst {
        //jar文件对象
        def srcFile = file(project.ext.makeJarPath)
        //需要生成的dex文件对象
        def desFile = file(srcFile.parent + "/" + srcFile.name.substring(0, srcFile.name.lastIndexOf(".")) + ".dex")

        //此行可以不需要
        workingDir srcFile.parent

        //拼接dx.bat执行的参数
        def list = []
        list.add("/c")
        list.add("dx")
        list.add("--dex")
        list.add("--output")
        list.add(desFile)
        list.add(project.ext.makeJarPath)

        //设置参数到cmd命令行
        args list
    }
}

执行此任务前, 请确保dx.bat能在命令行中执行.

AS--›Gradle 打包指定文件到jar/dex

此文件在"Android SDK\build-tools\28.0.3\dx.bat", 请将Android SDK\build-tools\28.0.3\路径添加到windowsPATH环境变量中, 即可.

Exec任务Gradle官方API文档


群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.

联系作者

点此快速加群

请使用QQ扫码加群, 小伙伴们都在等着你哦!

AS--›Gradle 打包指定文件到jar/dex

关注我的公众号, 每天都能一起玩耍哦!

AS--›Gradle 打包指定文件到jar/dex