zoukankan      html  css  js  c++  java
  • Android资源混淆 + 混淆忽略 .so库

    安装包立减1M--微信Android资源混淆打包工具
    http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd

    AndResGuard
    https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.md

    美团Android资源混淆保护实践
    http://tech.meituan.com/mt-android-resource-obfuscation.html


    AndResGuard资源混淆用法
    http://www.qingpingshan.com/rjbc/az/171398.html

     

    关于AndResGuard

    AndResGuard是一个帮助你缩小APK大小的工具,他的原理类似Java Proguard,但是只针对资源。他会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a。

    AndResGuard不涉及编译过程,只需输入一个apk(无论签名与否,debug版,release版均可,在处理过程中会直接将原签名删除),可得到一个实现资源混淆后的apk(若在配置文件中输入签名信息,可自动重签名并对齐,得到可直接发布的apk)以及对应资源ID的mapping文件。

    项目地址: https://github.com/shwenzhang/AndResGuard

    Gradle集成

    1. Project/build.gradle
      buildscript {    
          repositories {        
              jcenter()
          }    
          dependencies {        
              classpath 'com.android.tools.build:gradle:2.2.2'        
              classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.14'    
          }
      }
    2. Module/build.gradle
      apply plugin: 'com.android.application'
      apply plugin: 'AndResGuard'
      android {
          ...
      }
      dependencies {
          ...
      }
      andResGuard { 
          // mappingFile = file("./resource_mapping.txt") 
          mappingFile = null 
          use7zip = true 
          useSign = true 
          // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字 
          keepRoot = false 
          whiteList = [ 
                 // for your icon 
                 "R.drawable.icon"
          ] 
          compressFilePattern = [
                 "*.png", 
                 "*.jpg", 
                 "*.jpeg", 
                 "resources.arsc" 
          ] 
          sevenzip { 
                 artifact = 'com.tencent.mm:SevenZip:1.1.14' 
                 //path = "/usr/local/bin/7za"  --- Linux
                 //path = "D:7za7za.exe" --- Windows
          }
      }

    如何使用

    用法1:

    用法2:

    在Android Gradle Terminal中

    1. Windows
      gradlew.bat resguardRelsese
    2. OS X or Linux
      ./gradlew reguardRelease

    注意问题

    1. mappingFile用于增量更新,保持本次混淆与上次混淆结果一致;
    2. uss7zip为true时,useSign必须为true;
    3. useSign为true时,需要配置signConfig;
    4. whiteList添加在代码内部需要动态获取的资源id;
    5. sevenzip可使用artifacr或path,path指本地安装的7za(7zip命令行工具)。

    Android studio 混淆打包时如何忽略依赖库中的第三方.so文件
    http://blog.csdn.net/u011907407/article/details/55510379


    在app项目中直接忽略library中的.so文件

    在app的proguard-rules.pro忽略依赖库中的文件写法如下:
    -libraryjars ../XXX(此处为library名称)/src/main/jniLibs/armeabi/xxxxx.so
    -libraryjars ../XXX(此处为library名称)/src/main/jniLibs/armeabi-v7a/xxxxx.so
    -libraryjars ../XXX(此处为library名称)/src/main/jniLibs/x86/xxxxx.so


    同理依赖库中jar包在app 中忽略混淆的写法
    -libraryjars ../XXX(此处为library名称)/libs/xxx.jar
    -libraryjars ../XXX(此处为library名称)/libs/xxx.jar


    最后温馨提醒:
    shrinkResources true
    (该属性为打包时是否自动删除无用的资源与代码,慎用!!据说有人因为这个属性导致app崩溃..此处不详细讨论..)

  • 相关阅读:
    H5 WebSocket
    JS call()、apply()、bind()
    JS中this指向问题
    JS GET POST请求
    php 常用get post http请求
    php 开启redis
    egret接入华为快应用6004
    PHP生成公私钥,签名和验签
    JS数组去重
    Oracle第九课
  • 原文地址:https://www.cnblogs.com/bluestorm/p/6825109.html
Copyright © 2011-2022 走看看