Android Studio 混淆jar包

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guibao513/article/details/80967546

在android studio先面创建一个library的module,将要打成jar包的代码写好后就要开始打jar包了,分为两步操作,第一步打出没有混淆的jar。

在library的gradle中,与android标签外配置如下:

//生成jar的命令是Gradle-other-makeJar
task makeJar(type: Jar, dependsOn: ['compileReleaseJavaWithJavac']) {
    appendix = 'library'
    baseName = 'LogSDK'
    version = '1.0.0'
    classifier = 'release'
    //后缀名
    extension = 'jar'
    //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
    //archiveName = 'Demo.jar'
    //需打包的资源所在的路径集
    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"]
    //初始化资源路径集
    from srcClassDir
    //去除路径集下部分的资源
    exclude 'com/scott/jardemo/BuildConfig.class'
    exclude '**/R.class'
    exclude '**/R\$*.class'
    //只导入资源路径集下的部分资源
    include 'com/creditease/android/*.class'
}

   配置完成后,点击IDE右边框上的gradle界面进入到other列表下,找到makeJar命令,双击即可,在build-libs下面找到生成的jar包,这个jar包的代码并没有混淆。如果要混淆则,在此基础上,需要更多的配置,配置如下:

首先在gradle中引入混淆需要的类:

import com.android.build.gradle.AppPlugin
import com.android.build.gradle.LibraryPlugin
import proguard.gradle.ProGuardTask

其次配置混淆命令:

//生成混淆jar的命令是Gradle-other-proguardJar
task proguardJar(dependsOn: ['makeJar'], type: proguard.gradle.ProGuardTask) {
    //Android 默认的 proguard 文件
    configuration android.getDefaultProguardFile('proguard-android.txt')
    //manifest 注册的组件对应的 proguard 文件
    configuration 'proguard-rules.pro'
    String inJar = makeJar.archivePath.getAbsolutePath()
    //输入 jar
    injars inJar
    //输出 jar
    outjars inJar.substring(0, inJar.lastIndexOf(File.separator)) + "/proguard-${makeJar.archiveName}"
    //设置不删除未引用的资源(类,方法等)
    dontshrink
    Plugin plugin = getPlugins().hasPlugin("AppPlugin") ?
            getPlugins().findPlugin("AppPlugin") :
            getPlugins().findPlugin("LibraryPlugin")
    if (plugin != null) {
        List<String> runtimeJarList
        if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
            runtimeJarList = plugin.getRuntimeJarList()
        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {
            runtimeJarList = android.getBootClasspath()
        } else {
            runtimeJarList = plugin.getBootClasspath()
        }
        for (String runtimeJar : runtimeJarList) {
            //给 proguard 添加 runtime
            libraryjars(runtimeJar)
        }
    }
}

重点是在proguard-rules.pro中配置以下两行:

#这两个是必须的,否则混淆后的jar包无法使用
-libraryjars '/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/rt.jar'
-libraryjars '/Users/admin/Library/Android/sdk/platforms/android-27/android.jar'//根据你使用编译版本设定

如果没有这两行,总是会报出错误,can't find java.lang.String等错误,导致打出的包无法使用。


然后在做具体的混淆即可。

配置完成后,Gragle-other-proguardJar命令即可在build-libs下面看到生成的混淆过的jar包



以上就是全部内容

展开阅读全文

没有更多推荐了,返回首页