本文主要介绍了Android studio利用gradle打jar包并混淆的方法,下面话不多说,来看看详细的介绍吧。

首先打jar包的配置很简单,使用jar的task,可以参考gradle官方文档,具体代码如下:
task buildJar(type: Jar, dependsOn: ['assembleRelease']) {
destinationDir = file('build/outputs/jar/')
appendix = ""
baseName = ""
version = SDK_VERSION
// manifest信息
def map = ['Version': SDK_VERSION,
'Gradle': project.gradle.gradleVersion,
'Vendor': '',
'Date': new Date().getDateTimeString()
]
manifest.attributes(map)
from('build/intermediates/classes/release/')
exclude('**/BuildConfig.class')
exclude('**/BuildConfig\$*.class')
exclude('**/R.class')
exclude('**/R\$*.class')
include('**/*.class')
}
但是发现上面打出来的jar包中的代码没有被混淆,于是加混淆。使用混淆的proguard.gradle.ProGuardTask task时,发现总是报如下错误:
java.io.IOException: The output jar [....jar] must be specified after an input jar, or it will be empty.
按照上面的提示,outjars是写在injars后面啊,it will be empty是提示哪里有问题?以为是proguard-rules.pro文件中的配置有问题,结果把文件清空,还是报上面的错误,错误原因不得而知了。在这个问题上耗了很长时间,最终还是没有解决。
突然看到上面的assembleRelease task想起了平常打APK时,会使用到这个task,打出来的APK会自动混淆。
那这个assembleRelease task就会依赖处理混淆的task,于是查看了输出日志:
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html. Observed package id 'system-images;android-22;google_apis;x86' in inconsistent location 'android-sdk-windows-studio\system-images\addon-google_apis-google-22 \x86' (Expected 'android-sdk-windows-studio\system-images\android-22\google_apis\x86') Observed package id 'system-images;android-22;google_apis;x86' in inconsistent location 'android-sdk-windows-studio\system-images\addon-google_apis-google-22 \x86' (Expected 'android-sdk-windows-studio\system-images\android-22\google_apis\x86') Incremental java compilation is an incubating feature. :sdk:preBuild UP-TO-DATE :sdk:extractProguardFiles :sdk:preReleaseBuild :sdk:checkReleaseManifest :sdk:preDebugAndroidTestBuild UP-TO-DATE :sdk:preDebugBuild UP-TO-DATE :sdk:preDebugUnitTestBuild UP-TO-DATE :sdk:preReleaseUnitTestBuild UP-TO-DATE :sdk:prepareComAndroidSupportAnimatedVectorDrawable2510Library UP-TO-DATE :sdk:prepareComAndroidSupportAppcompatV72510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportCompat2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportCoreUi2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportCoreUtils2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportFragment2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportMediaCompat2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportV42510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportVectorDrawable2510Library UP-TO-DATE :sdk:prepareReleaseDependencies :sdk:compileReleaseAidl UP-TO-DATE :sdk:compileReleaseNdk UP-TO-DATE :sdk:compileLint UP-TO-DATE :sdk:copyReleaseLint UP-TO-DATE :sdk:compileReleaseRenderscript UP-TO-DATE :sdk:generateReleaseBuildConfig :sdk:generateReleaseResValues UP-TO-DATE :sdk:generateReleaseResources UP-TO-DATE :sdk:mergeReleaseResources UP-TO-DATE :sdk:processReleaseManifest UP-TO-DATE :sdk:processReleaseResources UP-TO-DATE :sdk:generateReleaseSources :sdk:incrementalReleaseJavaCompilationSafeguard :sdk:compileReleaseJavaWithJavac :sdk:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.). 注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 :sdk:extractReleaseAnnotations :sdk:mergeReleaseShaders UP-TO-DATE :sdk:compileReleaseShaders UP-TO-DATE :sdk:generateReleaseAssets UP-TO-DATE :sdk:mergeReleaseAssets UP-TO-DATE :sdk:mergeReleaseProguardFiles UP-TO-DATE :sdk:packageReleaseRenderscript UP-TO-DATE :sdk:packageReleaseResources UP-TO-DATE :sdk:processReleaseJavaRes UP-TO-DATE :sdk:transformResourcesWithMergeJavaResForRelease UP-TO-DATE :sdk:transformClassesAndResourcesWithProguardForRelease ProGuard, version 5.2.1 Reading input... Reading program directory [sdk\build\intermediates\classes\release] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-media-compat\25.1.0\jars\classes.jar] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-compat\25.1.0\jars\classes.jar] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-fragment\25.1.0\jars\classes.jar] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-core-ui\25.1.0\jars\classes.jar] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\animated-vector-drawable\25.1.0\jars\classes.jar] (filte red) Reading library jar [android-sdk-windows-studio\extras\android\m2repository\com\android\support\support-annotations\25.1.0\support-annotations-25.1.0.jar] (f iltered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-v4\25.1.0\jars\classes.jar] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-vector-drawable\25.1.0\jars\classes.jar] (filter ed) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\appcompat-v7\25.1.0\jars\classes.jar] (filtered) Reading library jar [sdk\build\intermediates\exploded-aar\com.android.support\support-core-utils\25.1.0\jars\classes.jar] (filtered) Reading library jar [\android-sdk-windows-studio\platforms\android-25\android.jar] Reading library jar [\android-sdk-windows-studio\platforms\android-25\optional\org.apache.http.legacy.jar] Note: duplicate definition of library class [android.net.http.HttpResponseCache] Note: duplicate definition of library class [android.net.http.SslCertificate$DName] Note: duplicate definition of library class [android.net.http.SslError] Note: duplicate definition of library class [android.net.http.SslCertificate] Note: duplicate definition of library class [org.apache.http.params.CoreConnectionPNames] Note: duplicate definition of library class [org.apache.http.params.HttpConnectionParams] Note: duplicate definition of library class [org.apache.http.params.HttpParams] Note: duplicate definition of library class [org.apache.http.conn.scheme.SocketFactory] Note: duplicate definition of library class [org.apache.http.conn.scheme.LayeredSocketFactory] Note: duplicate definition of library class [org.apache.http.conn.scheme.HostNameResolver] Note: duplicate definition of library class [org.apache.http.conn.ConnectTimeoutException] Note: there were 11 duplicate class definitions. (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass) Initializing... Note: you're ignoring all warnings! Ignoring unused library classes... Original number of library classes: 5857 Final number of library classes: 383 Printing kept classes, fields, and methods... Shrinking... Printing usage to [sdk\build\outputs\mapping\release\usage.txt]... Removing unused program classes and class elements... Original number of program classes: 52 Final number of program classes: 48 Obfuscating... Printing mapping to [sdk\build\outputs\mapping\release\mapping.txt]... Writing output... Preparing output jar [sdk\build\intermediates\transforms\proguard\release\jars\3\3\main.jar] Copying resources from program directory [sdk\build\intermediates\classes\release] (filtered) Printing classes to [sdk\build\outputs\mapping\release\dump.txt]... :sdk:transformClassesAndResourcesWithSyncLibJarsForRelease :sdk:mergeReleaseJniLibFolders UP-TO-DATE :sdk:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE :sdk:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE :sdk:bundleRelease :sdk:compileReleaseSources :sdk:assembleRelease :sdk:buildJar BUILD SUCCESSFUL.
好家伙,被我发现了。其中从:sdk:transformClassesAndResourcesWithProguardForRelease这个task就可以看到,下面一堆日志是关于ProGuard混淆工具的,最后可以看到:
Preparing output jar [sdk\build\intermediates\transforms\proguard\release\jars\3\3\main.jar]
这个main.jar就是混淆后的jar包,只不过这个jar还包含了R类和BuildConfig类的信息,所以将这个信息过滤掉就可以。但问题也来了,jar包都已经打好了,怎么配置混淆?解决方法是只要把jar包当输入就行了,最终配置如下:
task buildJar(type: Jar, dependsOn: ['assembleRelease']) {
destinationDir = file('build/outputs/jar/')
appendix = "" // SDK的后缀名称
baseName = "" // SDK名称
version = SDK_VERSION // 这个常量是在gradle.properties中配置的
// manifest信息
def map = ['Version': SDK_VERSION,
'Gradle': project.gradle.gradleVersion,
'Vendor': '',
'Date': new Date().getDateTimeString()
]
manifest.attributes(map)
from(project.zipTree('build/intermediates/transforms/proguard/release/jars/3/3/main.jar'))
exclude('**/BuildConfig.class')
exclude('**/BuildConfig\$*.class')
exclude('**/R.class')
exclude('**/R\$*.class')
include('**/*.class')
}
总结
OK,任务搞定。以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# radle
# 混淆
# jar
# gradle
# jar包混淆
# android
# Android使用插件实现代码混淆
# Android 一些常用的混淆Proguard
# Android Studio配置反混淆的实现
# Android studio 混淆配置详解
# 详解Android代码混淆实战
# Android常用三方库混淆规则整理(小结)
# Android代码混淆的写法总结
# proguar在Android混淆中的用法
# 详解Android的反编译和代码混淆
# Android studio 混淆+打包+验证是否成功
# Android 资源混淆的方案及注意事项
# 就可以
# 就会
# 是在
# 来了
# 好了
# 看了
# 在这个
# 要把
# 请使用
# 很简单
# 可以看到
# 来看看
# 会使
# 这篇文章
# 谢谢大家
# 不得而知
# 多说
# 写在
# 解决方法
# 很长时间
相关文章:
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
ppt制作免费网站有哪些,ppt模板免费下载网站?
建站之星在线客服如何快速接入解答?
如何通过商城自助建站源码实现零基础高效建站?
nginx修改上传文件大小限制的方法
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
制作表格网站有哪些,线上表格怎么弄?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
宝塔建站无法访问?如何排查配置与端口问题?
制作网站公司那家好,网络公司是做什么的?
建站之星后台管理系统如何操作?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
建站之星如何保障用户数据免受黑客入侵?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
网站制作壁纸教程视频,电脑壁纸网站?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何快速生成凡客建站的专业级图册?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何用已有域名快速搭建网站?
建站之星如何一键生成手机站?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
实现点击下箭头变上箭头来回切换的两种方法【推荐】
大同网页,大同瑞慈医院官网?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
c++怎么用jemalloc c++替换默认内存分配器【性能】
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
海南网站制作公司有哪些,海口网是哪家的?
详解jQuery中基本的动画方法
宁波自助建站系统如何快速打造专业企业网站?
如何通过可视化优化提升建站效果?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
如何在Windows虚拟主机上快速搭建网站?
,sp开头的版面叫什么?
兔展官网 在线制作,怎样制作微信请帖?
建站之星展会模版如何一键下载生成?
已有域名和空间如何搭建网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在云虚拟主机上快速搭建个人网站?
建站主机类型有哪些?如何正确选型
实例解析angularjs的filter过滤器
如何在Windows环境下新建FTP站点并设置权限?
如何在Tomcat中配置并部署网站项目?
太平洋网站制作公司,网络用语太平洋是什么意思?
建站主机CVM配置优化、SEO策略与性能提升指南
建站之星如何开启自定义404页面避免用户流失?
音响网站制作视频教程,隆霸音响官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。