Android Studio 다 중 채널 일괄 패키지 및 코드 혼동

대량 포장
1.동맹 통 계 를 통합 하고 AndroidManifest.xml 에 다음 과 같은 코드 를 추가 했다.

<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_VALUE}"/>
2.app 의 build.gradle 의 android 탭 에 다음 코드 를 추가 합 니 다.

productFlavors {
myapp {}
_360 {}
appchina {}
hiapk {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
3.gradle PATH 환경 변 수 를 설 정 했 는 지 확인 하고 명령 행 에서 gradle-v 를 실행 합 니 다.인식 할 수 없 으 면 AndroidStudio 의 설치 디 렉 터 리 에서 gradle 디 렉 터 리 를 찾 아 아래 bin 디 렉 터 리 를 Path 에 추가 한 다음 에 다음 명령 을 수행 합 니 다.
gradle assembleRelease
컴 파일 이 성공 하 기 를 기다 리 고 있 습 니 다.제 가 처음 사용 하 는 이유 인지 모 르 겠 습 니 다.이 명령 을 실행 한 후에 무언 가 를 다운로드 하고 있 습 니 다.약 4,5 분 이 지나 면 서로 다른 채널 의 apk 를 포장 하기 시 작 했 습 니 다.마지막 으로 다음 그림 과 같 습 니 다.
这里写图片描述
这里写图片描述
명령 행 을 통 해 포장 한 것 입 니 다.물론 UI 방식 으로 메뉴 BuildC>Generate Signed APK>만 든 키 keystore(없 으 면 만 들 기)를 선택 한 다음 Next 를 누 르 면 다음 그림 과 같은 대화 상자 가 나타 납 니 다.
这里写图片描述  
여기 서도 채널 이나 build type 을 선택 할 수 있 습 니 다.Flavors 는 최소 하 나 를 선택 하고 Finish 를 누 르 면 여러 채널 로 포장 할 수 있 습 니 다.
감개 무량:예전 에 Eclipse 다 중 채널 로 포장 할 때 귀 찮 았 는데 지금 AS 의 다 중 채널 로 포장 하 는 것 이 편리 하고 빠 릅 니 다.
코드 혼동
1.build.gradle 의 buildTypes 아래 minifyEnable 을 true 로 설정 합 니 다.
shrinkResources false
이 줄 코드 는 마지막 패키지 의 크기 를 줄 이기 위해 사용 되 지 않 은 불필요 한 자원 파일 을 넘 기기 위해 서 입 니 다.release 모드 에서 true 로 열 리 고 debug 에서 true 를 설정 하지 않 아 도 됩 니 다.아니면 Warnings 를 알 리 기 위해 서 입 니 다.
2.app 디 렉 터 리 에 있 는 proguard-rules.pro 파일 을 다음 과 같이 편집 합 니 다.

# 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---------------------
코드 가 많 지만 쉽게 알 수 있 습 니 다.먼저 유 니 버 설 혼동 은 반드시 있어 야 합 니 다.(Android Studio 를 참고 하여 코드 혼동 을 실현 합 니 다)다른 것 은 프로젝트 에 어떤 제3자 라 이브 러 리 를 추 가 했 는 지 에 따라 제3자 개발 자 플랫폼 에서 그들 이 제공 한 혼동 내용 을 찾 으 면 됩 니 다.
a.포장 이 성공 한 것 을 헷 갈 리 게 하면 다음 그림 과 같은 오 류 를 보고 합 니 다.
这里写图片描述  
그것 은 틀림없이 Mob 문자 검증 의 혼동 코드 를 추가 하지 않 았 기 때 문 일 것 이다.왜냐하면 그들의 공식 적 인 통합 문서 에서 언급 되 지 않 았 기 때문이다.과거 에 포럼 에서 해답 을 찾 았 는데 위 코드 의 마지막 부분 과 같다.
b.만약 에 데이터 의 패 키 징 에 Gson 이 사용 된다 면 프로젝트 의 모든 자바 빈,즉 실체 류 를 포함 하여 혼동 코드 를 다음 과 같이 추가 해 야 합 니 다(공식 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.apk 생 성 에 실패 하고 많은 경 고 를 보 냈 다 면 이 코드 를 추가 하여 경 고 를 무시 할 수 있 습 니 다.
-ignorewarnings\#경고 무시
apk 생 성 에 성공 한 후에 이상 여 부 를 확인 합 니 다.만약 에 특정한 붕괴 정보 에 따라 해당 하 는 혼동 규칙 을 추가 하면 됩 니 다.이 문 구 를 추가 하 는 것 도 디 버 깅 을 편리 하 게 하기 위해 서 입 니 다.
3、포장 을 실행 하면 됩 니 다
4.포장 소득 apk 에 대해 dex2jar 와 jdgui 로 역 컴 파일 한 후에 자바 소스 코드 를 보면 많은 파일 이 헷 갈 리 는 것 을 발견 할 수 있 습 니 다.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 스튜디오 의 다 중 채널 대량 포장 과 코드 가 헷 갈 리 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기