Android 多模块打包混淆

作者: Android架构 | 来源:发表于2019-02-19 21:33 被阅读2次

最近有个 sdk 的项目使用了多模块(Module)开发,然后提供 jar 包给接入者使用,要求大部分类是混淆过的,保留几个接口,
Android Studio 能够导出 aar 文件,对于导出 jar 却要大费一番周折。我在网上找到这个比较靠谱的解决方案: [Android Studio分模块自动化构建实战](Android Studio分模块自动化构建实战),它通过 shell 脚本执行 Java 打包命令,解压各个模块的 class 文件然后合成一个完整的 class 文件。
导出 jar 后,下一步就是进行混淆了。根据网上的资料,我自己写了一个 gradle task: proguardJar,专门用来做混淆。遇到的坑就是下面的 libraryjars,加上该参数会忽略 jar 包引用的 Java 和 Android API,保证混淆继续进行,要不然就会出现类似 can't find referenced class java.lang.String 这样的报错。

// 混淆 jar 包
task proguardJar(type: ProGuardTask) {
    def properties = new Properties()
    def file = file("../../local.properties")
    properties.load(new FileInputStream(file))
    def sdkDir = properties.getProperty("sdk.dir")

    // 输出路径
    def path = "../../output/${project.ext.SDK_NAME}.jar"
    delete path

    // 未混淆的jar路径
    injars "../../output/unminified/${project.ext.SDK_PRODUCT}_sdk_unminified.jar"
    // 混淆后的jar输出路径
    outjars path
    // 混淆协议
    configuration '../../proguard-rules.pro'

    // 忽略 Java 和 Android API
    libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
    libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
    libraryjars "${sdkDir}/platforms/android-${rootProject.ext.pyramidneyCompileSdkVersion}/android.jar"

    println("proguardJar done!")
}

另外,混淆规则需要加上 -dontshrink,表示不压缩输入的类文件,比如不会移除无用的方法、域或者类。这样做的目的是保留对外的接口,但是带来的问题是 jar 包体积的增大,所以在编码中就要做好优化工作。
【附录】

资料图

需要资料的朋友可以加入Android架构交流QQ群聊:513088520

点击链接加入群聊【Android移动架构总群】:加入群聊

获取免费学习视频,学习大纲另外还有像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等Android高阶开发资料免费分享。

相关文章

  • Android 多模块打包混淆

    最近有个 sdk 的项目使用了多模块(Module)开发,然后提供 jar 包给接入者使用,要求大部分类是混淆过的...

  • Android 多模块打包混淆填坑记

    最近有个 sdk 的项目使用了多模块(Module)开发,然后提供 jar 包给接入者使用,要求大部分类是混淆过的...

  • Android上线事项

    1 ,混淆 混淆相关 点这里 混淆手册 2,签名打包 正式开始打包,首先Android Studio --B...

  • Android 混淆使用入门笔记

    概述 混淆是Android Apk打包过程中的一个重要步骤,默认情况下,打包都是需要混淆过程的。 Android ...

  • Android的多渠道打包|SquirrelNote

    系列文章:Android的反编译和代码混淆Android的打包签名[Android的多渠道打包 前言 本篇包括以下...

  • Android的反编译和代码混淆

    系列文章:Android的反编译和代码混淆Android的打包签名Android的多渠道打包 前言 包括以下内容 ...

  • Android的打包签名

    系列文章:Android的反编译和代码混淆Android的打包签名Android的多渠道打包 前言 从以下几个方面...

  • 优雅的处理 Android 代码混淆 Keep 问题

    为了源码安全以及缩小 APK 体积,Android 应用发布前是必须要进行混淆打包的。而混淆打包并不是全量打包,特...

  • android混淆打包

    # Gson -keepclass com.google.gson.stream.** {*;} -keepatt...

  • Android多模块混淆的问题

    Android在多模块或者组件化的时候,关于混淆的管理,一般常见的做法就是两条。 把所有的混淆规则规则都放在app...

网友评论

    本文标题:Android 多模块打包混淆

    本文链接:https://www.haomeiwen.com/subject/ofhqyqtx.html