Android Studio 多渠道打包(二)

来源:互联网 发布:guwan.com域名交易 编辑:程序博客网 时间:2024/06/13 09:59

看本篇博文你需要掌握:

  • Android Studio IDE 的使用
  • Gradle 语法脚本的基本了解

eclipse 时代已经过去 Google 已经明确宣布在 15 年底停止对 eclipse 开发 Android ADT 等相关插件的支持和维护 , 意味着 Google 的亲儿子 Android Studio 和 gradle 打包的上位! 你还在用 eclipse ? 还在用 ant 打包? 那你就 out 了赶紧跟我来看看吧
Android Studio 多渠道打包(一)
Android Studio 多渠道打包(三)

Android Studio 多渠道打包(一)

我们接着 Android Studio 多渠道打包(一) 向下说

signingConfigs {        debug {            // No debug config        }        release {            storeFile file("/Users/zhouxuming/SeaStar.jks")            storePassword "123456"            keyAlias "SeaSatrKey"            keyPassword "123456"        }    }

此处的代码片段 如何理解和配置 debug 是我们平时的开发环境打的包 release 是发布应用市场的 APK 包, 此处 release 如何生成配置?请参考:

生成签名 key


三:

buildTypes {        debug {            versionNameSuffix "-debug"            minifyEnabled false            zipAlignEnabled false            shrinkResources false            signingConfig signingConfigs.debug        }        release {            //混淆            minifyEnabled true            //是否压缩对齐            zipAlignEnabled true            //清除不用的资源            shrinkResources true            //混淆脚本路径            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.release            applicationVariants.all { variant ->    /...

来对 buildTypes 的理解做一下说明

  • debug : 我们平时调试需要用到的环境 代码不要做混淆 日志不要做关闭

  • release : 发布到应用市场的 APK 包 需要减小体积 需要防反编译 需要关闭 logcat 输出 log

Android Studio 清除冗余资源


混淆不仅能 防止反编译 还能减小 APK 包的体积大小. 所以我们有必要对 代码进行混淆

getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

此处是配置混淆的脚本代码对应在工程中的 proguard-rules.pro 文件

pic

混淆脚本:

# Add project specific ProGuard rules here.# By default, the flags in this file are appended to flags specified# in /Users/zhouxuming/Library/Android/sdk/tools/proguard/proguard-android.txt# You can edit the include path and order by changing the proguardFiles# directive in build.gradle.## For more details, see#   http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following# and specify the fully qualified class name to the JavaScript interface# class:#-keepclassmembers class fqcn.of.javascript.interface.for.webview {#   public *;#}-optimizationpasses 5          # 指定代码的压缩级别-dontusemixedcaseclassnames   # 是否使用大小写混合-dontpreverify           # 混淆时是否做预校验-verbose                # 混淆时是否记录日志-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法-dontwarn java.lang.invoke**-dontwarn org.apache.lang.**-dontwarn org.apache.commons.**-dontwarn android.support.**-dontwarn com.rongseal.**# rongcloud-keepclassmembers class fqcn.of.javascript.interface.for.webview { public *;}-keepattributes Exceptions,InnerClasses-keep class io.rong.** {*;}-keep class * implements io.rong.imlib.model.MessageContent{*;}-keepattributes Signature-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.examples.android.model.** { *; }-keepclassmembers class * extends com.sea_monster.dao.AbstractDao { public static java.lang.String TABLENAME;}-keep class **$Properties-dontwarn org.eclipse.jdt.annotation.**-keep class com.ultrapower.** {*;}# bugTags-keepattributes LineNumberTable,SourceFile-keep class com.bugtags.library.** {*;}-dontwarn org.apache.http.**-dontwarn android.net.http.AndroidHttpClient-dontwarn com.bugtags.library.**-dontwarn com.bugtags.library.vender.**# 自己代码混淆-keep class com.umeng.**{*;}-keep class com.nostra13.universalimageloader.** { *; }-keep class com.rongseal.**{*;}# 公用混淆-dontwarn butterknife.internal.**-keep class **$$ViewInjector { *; }-keepnames class * { @butterknife.InjectView *;}-keep public class * extends android.app.Fragment-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.Preference-keep public class com.android.vending.licensing.ILicensingService-dontnote com.android.vending.licensing.ILicensingService#如果有引用v4包可以添加下面这行-keep public class * extends android.support.v4.app.Fragment#如果引用了v4或者v7包-dontwarn android.support.**#忽略警告-ignorewarning-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆    native <methods>;}-keepclasseswithmembers class * {   # 保持自定义控件类不被混淆    public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * {# 保持自定义控件类不被混淆    public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆    public void *(android.view.View);}-keepclassmembers enum * {     # 保持枚举 enum 类不被混淆    public static **[] values();    public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆    public static final android.os.Parcelable$Creator *;}

大部分的混淆代码都是有注释的,像 公用混淆 下面的混淆代码完全可以 copy 直接使用 这是对所有 App 都适用的 , 其他的自己看着选用.(一般第三方都会在官网文档给出混淆脚本), 对于自己的 App 代码不知道混淆的直接:

-keep class you packagename.**{*;}

未完待续 请参考笔者 blog Android Studio 多渠道打包(三)

0 0
原创粉丝点击