Android studio 代码混淆、分渠道打包和反编译

Android studio 是googol正式推出代替eclipse的IDE 。 核心文件是build.gradle,可以配置 maven自动代码库 ,并任意修改工程包名

 

一、    混淆

代码混淆后可以将代码的类名变量等编译为ABCD等不利于阅读的代码,xml等配置文件内容转译为乱码,适当的防止别人反编译你的apk阅读你的代码和相关信息。

 

     gradle 文件下配置 开关

     buildTypes {

           release {

                minifyEnabledtrue

           }

     }

     部分版本不支持,是因为至少需要gradle 0.14+

     如 {

       
         dependencies {

                classpath‘com.android.tools.build:gradle:1.3.0’

           }   

     }

     注意:第一次进入后需要手动下载gradle版本

  terminal 下使用命令 ./gradlew,下载时间较长

 

     如要指定混淆的内容可以在项目根目录下编写proguard-rules.pro

     举例:

#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implementsjava.io.Serializable即可

#-keepclassmembers enum * {

#  public static**[] values();

#  public static **valueOf(java.lang.String);

#}

-keepclassmembers class * {

    public void*ButtonClicked(android.view.View);

}

    

    

二、多渠道打包

对于Android来说 ,因为是开源的,碎片化严重,各个厂家各自为政,衍生出了众多的应用平台,公司或个人开发的产品想要抢占市场必须将app推上很多主流平台,如果同时需要统计流量信息和各个平台用户量需要将渠道信息打包进app,

1 在项目mainfest文件application目录下配置
<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

 

2  在gradle文件中
添加
productFlavors {
        wandoujia {}
        _360 {}
//        baidu {}
//        xiaomi {}
//        tencent {}
//        taobao {}
    }

    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

 

 

 

三、    编译签名打包

 

打包分为debug模式和release模式,debug打包时添加的是自动签名文件,release 打包需要自己添加签名文件,信息自定义

1 生成签名文件

菜单-build-generate sinedApk 按步骤执行填写签名信息生成后缀名为jks的文件

然后配置gradle

//签名
  
 signingConfigs{
        jianzhiConfig {
            storeFilefile("/Users/moon/Documents/zhijianss_workspace/Jianzhi/jianzhisskey.jks")
            storePassword"jianzhiss2015"
            keyAlias"jianzhiss"
            keyPassword"jianzhiss2015"
        }
    }

    buildTypes {
        //签名
        release {
            // 不显示Log
           
buildConfigField "boolean", "LOG_DEBUG", "false"
           
//混淆
           
minifyEnabled true
           
//Zipalign优化
           
zipAlignEnabled true

           
// 移除无用的resource文件
           
shrinkResources true
       
     signingConfig signingConfigs.jianzhiConfig
//            runProguard false
            proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

 

注意:gradle文件是顺序访问的,需要将被引用的信息写在引用它的信息之前

 

 

四、   反编译

需要工具 apktool dex2jar  jd-gui

apktool可以编译apk文件提取其中的资源文件如mainfest,res

dex2jar可以将apk文件编译为jar文件,然后用jd-gui读取源代码

 

1 下载工具

2 安装使用apktool,以mac为例,将解压后的apktool文件apktool和apktool.jar 拷贝进系统/urs/local/bin中

最简单的方式:Finder-前往-文件夹-输入 /urs/local/ 有的电脑没有bin文件夹,需要利用sudo权限建立(其他:根据命令建立文件夹并cp拷贝)

这样的好处是在任何目录都可以执行apktool命令

举例:终端下执行: apktool d /……app-_360-release.apk

在该apk目录下生产 对应的app-_360-release的文件夹内部含有配置文件和资源文件,如图


3 提取apk的jar文件

将apk文件后缀改为ZIP 并解压,取出其中的classes.dex文件,

将dex2jar工具整个拷贝进/usr/local/bin中,将之前的classes.dex文件拷贝进dex2jar根目录下,执行sh dex2jar.sh classes.dex命令,

在当前目录下生产同名jar文件,如图

4 用jd-gui直接打开jar文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值