Android(安卓)Studio 混淆jar包
16lz
2021-12-04
在android studio先面创建一个library的module,将要打成jar包的代码写好后就要开始打jar包了,分为两步操作,第一步打出没有混淆的jar。
在library的gradle中,与android标签外配置如下:
//生成jar的命令是Gradle-other-makeJartask 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.AppPluginimport com.android.build.gradle.LibraryPluginimport proguard.gradle.ProGuardTask
其次配置混淆命令:
//生成混淆jar的命令是Gradle-other-proguardJartask 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) { ListruntimeJarList 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包
以上就是全部内容
更多相关文章
- 关于Android的问号?和@符号的用法
- Android之进度条控件和常用资源分类总结
- mono for android 的ADB
- Android(安卓)自动编译、打包生成apk文件 1 - 命令行方式
- Android与JNI(一)
- Android支持的资源
- 关于Android的keystore生成和查看keystore
- 命令行开发、编译、打包Android应用程序
- android 命令介绍