Android Studio Gradle配置,代码混淆,多渠道一键打包

以前用eclipse的时候多渠道打包往往依赖于第三方插件,不是很方便也经常打包出错。有了android studio就方便多了。


一、我们来先看看Gradle配置

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24 //编译的sdk版本
    buildToolsVersion '24.0.3'

    defaultConfig {
        applicationId "com.android.google"//应用包名
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "5.1.0"
        // 方法数突破64k的限制
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
    }

    //配置签名信息,签名钥匙
    signingConfigs {
        release {
            keyAlias 'keyalias'
            keyPassword 'keypassword'
            storeFile file('E:/Lee/keystore/keystore')//签名钥匙的文件目录
            storePassword 'storepassword'
        }
    }

    buildTypes {
        release {
            minifyEnabled true//这个值决定了打包时是否要执行代码混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//这个是代码混淆文件
            signingConfig signingConfigs.release//指定使用的是signingConfigs里面的release配置进行打包
            zipAlignEnabled true//是否进行压缩
        }
    }

    useLibrary 'org.apache.http.legacy'//如果要使用apache的网络请求,要配置这个lib

    sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }

    //配置打包渠道
    productFlavors {
        bd{}
       "360"{} //渠道不能以数字开头,否则会报错,所以加一个引号,可以打包,并且渠道名是360
       yyb{}
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [CHANNEL_NAME: name]//manifest里面的meta-data定义的友盟渠道名
	//这里会用上面productFlavors里面的渠道名替换CHANNEL_NAME

    }
}

//第三方依赖包
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'src/main/libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:design:24.0.0'
    compile 'com.jaredrummler:android-processes:1.0.3'
    compile 'com.android.support:recyclerview-v7:24.0.0'
    compile files('src/main/libs/libammsdk.jar')
    compile files('src/main/libs/android-async-http-1.4.5.jar')
    compile files('src/main/libs/litepal-1.3.0.jar')
    compile files('src/main/libs/Msc.jar')
    compile files('src/main/libs/jpush-android-2.1.5.jar')
    compile files('src/main/libs/umeng-analytics-v6.0.1.jar')
    compile files('src/main/libs/glide-3.6.1.jar')
    compile files('src/main/libs/zbar.jar')
    compile files('src/main/libs/gson-2.2.4.jar')
}
 
 
 
 
  二、manifest的配置

manifest里面配置友盟的渠道名称,打包的时候,会根据Gradle 

的配置,进行逐一替换。也就是在生成bd渠道包的时候会用bd替换CHANNEL_NAME,从而达到多渠道打包。

三、代码混淆

很多时候android 的代码很容易被反编译,所以为了保护我们的程序不被盗用,我们对他进行代码混淆,已增加

反编译难度,或者说是就算反编译出来,也很难看的懂。代码混淆文件如下图


#类  一些系统自带的类可以不用混淆
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
   public *;
}
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preferenc

#第三方类库,第三方类库的代码也要避免混淆,不然在运行时会出现找不到类的错误
-keep class cn.sharesdk.** {*;}
-keep class cn.sharesdk.sina.weibo** {*;}
-keep class com.sina.weibo.sdk.** {*;}
-keep class com.sina.sso.** {*;}
-keep class com.nostra13.universalimageloader.** {*;}
-keep class com.loopj.android.http {*;}
-keep class com.google.gson.**{*;}
-keep class org.apache.http.entity.mime.**{*;}
-keep class org.apache.http.entity.mime.content.**{*;}
-keep class cn.jpush.a.a**{ *;}
-keep class cn.jpush.android.**{ *;}
-keep class com.tencent.mm.sdk.** {*;}
-keep class com.tencent.mm.a.** {*;}
-keep class com.tencent.wxop.stat.** {*;}
-keep class com.tencent.a.a.a.a**{*;}
-keep class com.tencent.stat.**{*;}
-keep class com.tencent.connect.**{*;}
-keep class com.tencent.connect.auth.**{*;}
-keep class com.tencent.connect.avatar.**{*;}
-keep class com.tencent.connect.common.**{*;}
-keep class com.tencent.connect.dataprovider.**{*;}
-keep class com.tencent.connect.share.**{*;}
-keep class com.tencent.tauth.**{*;}


-keepclassmembers class * {   public <init>(org.json.JSONObject);}
-keep public class [com.android.google].R$*{public static final int *;}
-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}


#自定义布局
-keep class com.google.android.view.datepicker.**{*;}
-keep class com.google.android.view.switchButton.**{*;}
-keep class com.google.android.view.**{*;}
-keep class com.google.android.widget.**{*;}


-dontwarn com.tencent.**
-dontwarn uk.co.senab.photoview.**
-dontwarn cn.jpush.**
-dontwarn com.google.**
-keep class com.google.protobuf.**{*;}

-keep class **.R$* {
*;
}
#工程中含有第三方jar包,因为build,所以不用再配置

#内部实体类
-keepattributes Exceptions,InnerClasses,...
-keep class com.google.android.ectService$AppInfo{ *;}
-keep class com.google.android.QuickService//一些在别的app要调用的类也不能混淆
,否则被混淆之后再按照之前定义好的路径和类名就找不到了
-keepclasseswithmembers class *{
   public *;
}

-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
    native <methods>;
}
 
四、所有这些配置完了就可以进行混淆打包了

只要在Terminal里面输入打包指令 gradlew assembleRelease,直接回车就自动开始打包了


 


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闽农qq:994955138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值