Android studio使用gradle将assets目录so库打进jar包以及jar包拆分

Android studio gradle脚本不但可以编译出apk,还可以导出jar包,同时可以将assets目录、so目录打进jar包,还可以将jar包中不需要的class去除,下面我们介绍一下如何写gradle脚本。

Android studio使用gradle将assets目录so库打进jar包以及jar包拆分_第1张图片

选择build/assembleDebug或者assembleRelease就可以在不用编译成apk的情况下快速将Java类编译成jar包。

def SDK_BASENAME = "android";
def UNITY_BASENAME = "unity";
def DOWNLOAD_BASENAME = "download";
def SDK_VERSION = "${android.defaultConfig.versionName}";
def sdkDestinationPath = "build/jar/";
def zipFile = file('build/intermediates/bundles/debug/classes.jar')

task deleteBuild(type: Delete) {
    delete sdkDestinationPath + SDK_BASENAME + SDK_VERSION + ".jar"
}

task makeJar(type: Jar) {
    from zipTree(zipFile)
    from fileTree(dir: 'src/main',includes: ['assets/**'], excludes: [''])//将assets目录打入jar包
    baseName = SDK_BASENAME + SDK_VERSION
    destinationDir = file(sdkDestinationPath)
}

makeJar.dependsOn(deleteBuild, build)
我们makeJar脚本建立在上一步编译出的jar包的基础上,同时额外将assets打进jar包

form zipTree()指明jar包获取的路径

from fileTree()要添加到jar包的部分,注意第一步已经将Java全部类文件编译进了jar包,这一步只需要添加assets文件夹就可以了,excludes指明要排除assets下的哪个部分

Android studio使用gradle将assets目录so库打进jar包以及jar包拆分_第2张图片assets目录下的png已经打进jar包


task makeDownloadJar(type: Jar) {
    from zipTree(zipFile)
    exclude('com/jason/test/')
    from fileTree(dir: 'libs',includes: [ '**/*.so'])//将so库打入jar包
    baseName = DOWNLOAD_BASENAME + SDK_VERSION
    destinationDir = file(sdkDestinationPath)

}

makeDownloadJar.dependsOn(deleteBuild, build)

exclude()在第一步基础上排除jar包中不需要的(com/jason/test/)目录

from fileTree添加要打入jar包的so库

Android studio使用gradle将assets目录so库打进jar包以及jar包拆分_第3张图片

我们看到so库已经打进了jar包


参考文章:

http://blog.csdn.net/lsyz0021/article/details/52162414

http://www.alloyteam.com/2015/03/shi-yong-gradle-da-bao-zhi-ding-bao-ming-he-lei-di-jar/


你可能感兴趣的:(Android,总结)