zoukankan      html  css  js  c++  java
  • android studio gradle 打jar 包 (混淆+第三方库包)

    将依赖的第三方库打包进自己的jar包

    1、先将第三方的库包拿到,然后添加jar包到项目的libs。

    2、项目的build.gradle脚本添加下面的task:

     1 task buildJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
     2     appendix = "sample"
     3     baseName = "demo"
     4     version = "1.0.0"
     5     classifier = "release"
     6 //后缀名
     7     extension = "jar"
     8 //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
     9 //    archiveName = "AndroidDemo.jar"
    10 //需打包的资源所在的路径集
    11     def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
    12 //初始化资源路径集
    13     from srcClassDir
    14     from (project.zipTree("libs/第三方库包.jar"))
    15     destinationDir = file("build/libs")
    16     //去除路径集下部分的资源19     exclude "**/**/BuildConfig.class"
    20     exclude "**/**/BuildConfig$*.class"
    21     exclude "**/R.class"
    22     exclude "**/R$*.class"
    23     //只导入资源路径集下的部分资源
    24     include "**/*.class"
    25     include "第三方库的包名/**/*/class"27 }

    3、添加好第三方包,以及包名。

    4、执行task。

    jar 包 混淆:

    1、打非混淆的jar包:

     1 task buildJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
     2     appendix = "sample"
     3     baseName = "demo"
     4     version = "1.0.0"
     5     classifier = "release"
     6 //后缀名
     7     extension = "jar"
     8 //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
     9 //    archiveName = "AndroidDemo.jar"
    10 //需打包的资源所在的路径集
    11     def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
    12 //初始化资源路径集
    13     from srcClassDir
    14 //去除路径集下部分的资源
    15  exclude "**/**/BuildConfig.class"
    16  exclude "**/**/BuildConfig$*.class"
    17  exclude "**/R.class"
    18  exclude "**/R$*.class"
    19 //只导入资源路径集下的部分资源
    20     include "**/*.class"
    21 }

    2、混淆的jar 包:

    (1)修改混淆文件:proguard-rules.pro

    (2)执行如下task:

     1 task proguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {
     2 //Android 默认的 proguard 文件
     3     configuration android.getDefaultProguardFile('proguard-android.txt')
     4 //manifest 注册的组件对应的 proguard 文件
     5     configuration project.buildDir.absolutePath + "/intermediates/proguard-rules/release/aapt_rules.txt"
     6     configuration 'proguard-rules.pro'
     7     String inJar = buildJar.archivePath.getAbsolutePath()
     8 //输入 jar
     9     injars inJar
    10 //输出 jar
    11     outjars inJar.substring(0, inJar.lastIndexOf('/')) + "/proguard-${buildJar.archiveName}"
    12 //设置不删除未引用的资源(类,方法等)
    13     dontshrink
    14     Plugin plugin = getPlugins().hasPlugin(AppPlugin) ?
    15             getPlugins().findPlugin(AppPlugin) :
    16             getPlugins().findPlugin(LibraryPlugin)
    17     if (plugin != null) {
    18         List<String> runtimeJarList
    19         if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
    20             runtimeJarList = plugin.getRuntimeJarList()
    21         }
    22         else if(android.getMetaClass().getMetaMethod("getBootClasspath")) {
    23             runtimeJarList = android.getBootClasspath()
    24         } else {
    25             runtimeJarList = plugin.getBootClasspath()
    26         }
    27         for (String runtimeJar : runtimeJarList) {
    28 //给 proguard 添加 runtime
    29             libraryjars(runtimeJar)
    30         }
    31     }
    32 }
  • 相关阅读:
    Linux的各个文件夹名称解释(FHS)
    ThinkPHP3.1URL分发BUG修正
    HTTP响应头缓存控制
    Web性能测试工具:http_load安装&使用简介
    无法登陆github官网的解决办法
    次梯度(Subgradient)
    科普帖:深度学习中GPU和显存分析
    关于图像分类的问题
    深度学习中的多尺度模型设计
    Pytorch模型定义的三要
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/7002170.html
Copyright © 2011-2022 走看看