Android Studioマルチチャンネルの一括包装とコードの混同


一、一括包装
1、友盟統計をまとめて、Android Manifest.xmlに下記のコードを追加しました。

<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_VALUE}"/>
2、アプリのbuild.gradleのandroidタグに下記のコードを追加します。

productFlavors {
myapp {}
_360 {}
appchina {}
hiapk {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
3、gradle_PATH環境変数が設定されているかどうかを確認し、命令ラインの下でgradle-vを実行し、識別できない場合はAndroid dStudioのインストールディレクトリの下でgradleディレクトリを見つけ、その下のbinディレクトリをPathに追加し、次のコマンドを実行します。
gradle assieble Release
コンパイル包装が成功しました。初めて使う原因かどうかは分かりません。このコマンドを実行してからずっとdownloadで何をしていますか?四五分ぐらい経ったら、違うチャンネルのアプリを包装し始めます。最終的には下の図のようになります。
这里写图片描述
这里写图片描述
以上はコマンドラインで梱包してもいいです。もちろんUI方式でメニューBulildCを選択して、Generate Signed APKCを選択して、作成したキーkeystoteを選択します。(なしで一つを作成します。)そして、Nextをクリックすると次の図のようなダイアログが出ます。
这里写图片描述 
ここでチャネルやbuild typeを選択してもいいです。Flaavorsは少なくとも一つを選択して、Finishをクリックして同じようにマルチチャンネルで包装できます。
以前はEclipseを使って多くのチャンネルを包装する時とても面倒だと感じて、今ASのマルチチャンネルは包装するのがとても便利です。
二、コード混淆
1、build.gradleの中のbuildTypesの下のminifyEnbaleをtrueにします。
shrink Resource false
上の行のコードは、未使用の不必要なリソースファイルをオーバーフローさせるために、最後にインストールされたパッケージの体積を減らすために、releaseモードでtrueにオープンします。debugではtrueを設定する必要がありません。さもなければ、Warningsに報告します。
2、appディレクトリのプログレッシブファイルは以下の通りです。

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\AndroiSdK/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 *;
#}
#----------------    Start---------------------
-optimizationpasses 5 #          
-dontusemixedcaseclassnames #          
-dontpreverify #          
-verbose #          
-ignorewarnings #     
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #          
-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 #          
-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 *;
}
#----------------    End---------------------
#----------------  5.0  Start---------------------
-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.facebook.**
-keep class com.facebook.** { *; }
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.umeng.socialize.handler.**
-keep class com.umeng.socialize.handler.*
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-dontwarn twitter4j.**
-keep class twitter4j.** { *; }
-keep class com.tencent.** {*;}
-dontwarn com.tencent.**
-keep public class com.umeng.soexample.R$*{
public static final int *;
}
-keep public class com.umeng.soexample.R$*{
public static final int *;
}
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
-keep class com.sina.** {*;}
-dontwarn com.sina.**
-keep class com.alipay.share.sdk.** {
*;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
-keep class com.linkedin.** { *; }
-keepattributes Signature
#----------------  5.0  End---------------------
#----------------      Start---------------------
-dontwarn com.amap.api.mapcore2d.**
#  
-keep class com.amap.api.location.**{*;}
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}
#  
-keep class com.amap.api.services.**{*;}
#2D  
-keep class com.amap.api.maps2d.**{*;}
-keep class com.amap.api.mapcore2d.**{*;}
#----------------      End---------------------
#----------------      Start---------------------
-dontoptimize
-dontpreverify
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
#gson
-dontwarn com.google.**
-keep class com.google.gson.** {*;}
#protobuf
-dontwarn com.google.**
-keep class com.google.protobuf.** {*;}
#----------------      End---------------------
#----------------Mob      Start---------------------
-keep class android.net.http.SslError
-keep class android.webkit.**{*;}
-keep class cn.sharesdk.**{*;}
-keep class cn.smssdk.**{*;}
-keep class com.mob.**{*;}
#----------------Mob      End---------------------
コードが多いですが、分かりやすいです。まず汎用混淆は必ずあります。他はプロジェクトによってどの第三者ライブラリを追加したらいいですか?第三者の開発プラットフォームの下で彼らが提供した混淆内容を見つけたらいいです。
a.混同して包装に成功したら、アプリケーションが実行されて下図のようなエラーが発生しました。
这里写图片描述 
それは間違いなくMobショートメッセージの検証の混淆コードを添加していないためで、彼らの公式の集積文書の中で言及していないため、過去のフォーラムの中でむしろ解答を探し当てたので、上のコードの最後の1段のようです。
b.データのパッケージがGsonに使用されている場合は、プロジェクトのすべてのjavaBean、すなわち実体類を含めて、混淆コードは以下の通りである(公式Githubを参照して説明することができる):

##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
#-keep class com.google.gson.examples.android.model.** { *; }
##---------------End: proguard configuration for Gson ----------
-keep class com.xxx.xxxxxxxxx.bean.** { *; } #              

c.          MPAndroidChart  ,        ,    ,    :

-keep class com.github.mikephil.charting.** { *; } #   MPAndroidChart      

d.          Webview      Javainterface js   ,            :

#----------------JS  Start---------------------
-keepclassmembers class com.xxxxx.xxx.xxxActivity$MyJavaScriptInterface {
public *;
}
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
#----------------JS  End---------------------
e.appkの生成に失敗した場合、多くの警告が表示されます。この行のコードを追加して警告を無視することができます。
-ignorewarnings警告を無視する
appkの生成が成功したら、異常がないかを確認してください。もし運行が崩壊したら、具体的な崩壊情報に基づいて、対応する紛らわしいルールを追加すればいいです。これを追加したのもデバッグしやすいためです。
3、包装を実行すればいいです。
4、包装に対して得たappkをdex 2 jarとjdguiで逆コンパイルした後、javaのソースコードを調べたら、確かに多くのファイルが混同されていることが分かりました。
以上は小编が绍介したAndroid Studioマルチチャンネルの量产とコードの混同で、皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。