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

来源:互联网 发布:js修改object类的内容 编辑:程序博客网 时间:2024/05/21 06:17

以前用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,直接回车就自动开始打包了

1 0
原创粉丝点击