Jar包及混淆

2019-04-10  本文已影响0人  zhi5ai

几年前自学android的时候就比葫芦画瓢的整过aar,当时好像是为了学自定义 view,最后还把aar发布到了Jcenter上。然后就出现了断层,如今需要给别人提供SDK,才有印象自己曾经是做过的,但是笔记什么的也不知道记到哪儿了,两眼一抹黑,写个笔记吧!

注:关于打包,有两种格式:*.jar 和 *.aar,
区别:前者只包含代码文件;而后者包含(图片、布局等)资源文件。
这次需要提供的SDK只包含代码,所以就选Jar包!

makeJar

首先是makeJar,了解下。需要先在你的android library中的build.gradle中添加如下:

task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
    injars 'build/intermediates/intermediate-jars/release/classes.jar' // 未混淆的jar路径
    outjars 'build/outputs/mylibrary-1.0.0.jar' // 混淆后的jar输出路径
    configuration 'proguard-rules.pro' // 混淆协议
}

在Gradle中选yourlibrary->Tasks->other->makeJar
或者

// Mac 系统
./gradlew makeJar
// Windows 系统
gradlew makeJar

injars 指明的路径写其他的时候,makeJar 会出现以下类似问题。(就算你所写路径下确实存在classes.jar,也会问题)


148881554865651_.pic_hd.jpg

Pro guard打包混淆Build Failed,报错:


148901554868373_.pic_hd.jpg

方法:

#忽略警告
-ignorewarnings

最后记得在proguard-rules.pro中keep 你对外提供的

完成!

参考链接

附:

重新设计了结构之后的SDK,在打包后,出现了AbstractMethodError错误


149511555056905_.pic_hd.jpg

问题解决:抽象类里的抽象方法被混淆了,在proguard-rules.pro中加入对该方法的keep就好了

上一篇 下一篇

猜你喜欢

热点阅读