안 드 로 이 드 코드 혼동 실전
Android SDK 는 혼동 도구 인 Proguard 를 자체 가 져 왔 습 니 다.SDK 루트 디 렉 터 리\tools\proguard 아래 에 있 습 니 다.혼동 이 열 리 면 Proguard 는 기본적으로 제3자 패 키 지 를 포함 한 모든 코드 를 혼동 합 니 다.그러나 일부 코드 나 제3자 패 키 지 는 혼동 할 수 없습니다.헷 갈 리 지 않 는 부분 을 유지 하기 위해 서 는 혼동 규칙 을 수 동 으로 작성 해 야 합 니 다.
왜 헷 갈 려?
app 아래 build.gradle 에 혼동 을 추가 합 니 다.
buildTypes {
release {
// ,
minifyEnabled true
//
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
// debug ,
signingConfig signingConfigs.debug
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [
// UAT
GETUI_APP_ID : "FZi793fjp9654LfeDPcR29",
GETUI_APP_KEY : "YrVmZT4KTp65hqAtZbCj79",
GETUI_APP_SECRET: "aLf186Rb617uj7jeNnUB89"
]
}
}
}
debug 환경 에서 서명 파일 을 사용 하여 debug 환경 에서 헷 갈 린 코드 를 디 버 깅 하 는 데 편리 합 니 다.혼동 파일 proguard-rules.pro
공통 혼동 설정(APP 공통)
################################## #################################
# , 0~7 , 5,
-optimizationpasses 5
# ,
-dontusemixedcaseclassnames
#
-dontskipnonpubliclibraryclasses
#
# ->
-verbose
#
-dontskipnonpubliclibraryclassmembers
# ,preverify proguard ,Android preverify, 。
-dontpreverify
-dontoptimize
#
-verbose
-ignorewarnings
# Annotation
-keepattributes *Annotation*
#
-keepattributes Signature
-keepattributes Exceptions,InnerClasses
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
#
-keepattributes SourceFile,LineNumberTable
-keepattributes Deprecated,Synthetic,EnclosingMethod
#
-renamesourcefileattribute SourceFile
# ,
# ,
-optimizations !code/simplification/cast,!field/*,!class/merging/*
앱 이 보관 해 야 할 공공 부분(통용)
#############################################
#
# Android
#
#############################################
# , Application
#
-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 * extends android.view.View
#-keep public class com.android.vending.licensing.ILicensingService
# support
-keep class android.support.** {*;}
#
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v7.**
-keep public class * extends android.support.annotation.**
# R
-keep class **.R$* {*;}
# native
-keepclasseswithmembernames class * {
native <methods>;
}
# Activity view ,
# layout onClick
-keepclassmembers class * extends android.app.Activity{
public void *(android.view.View);
}
#
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# ( View)
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# Parcelable
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# onXXEvent、**On*Listener ,
-keepclassmembers class * {
void *(**On*Event);
void *(**On*Listener);
}
# webView , webView
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.webView, jav.lang.String);
자신의 항목 부분 코드 를 유지 하 는 것 은 헷 갈 리 지 않 습 니 다.(자신의 항목 을 더 갖 춰 야 합 니 다)java -keep class .** { *; } 。
예 를 들 어 인 용 된 과 대 신 비 를 유지 하 는 제3자 jar 가방 은 헷 갈 리 지 않 습 니 다.
java -keep class com.iflytek.** { *; }
#
-keep class com.xxxxx.function.**.net.** { *; }
-keep class com.xxxxx.function.**.bean.** { *; }
-keep class com.xxxxx.common.net.** { *; }
-keep class com.xxxxx.common.bean.** { *; }
#
-keep class com.xxxxx.crypt.** {*;}
#
-keep class com.xxxxxx.function.**.dao.** { *; }
#
-keep class com.xxxxx.common.utils.** { *; }
#greenDAO 3
#-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
#public static java.lang.String TABLENAME;
#}
#-keep class **$Properties
#-dontwarn org.greenrobot.greendao.database.**
#-dontwarn rx.**
#greenDAO 3
# Fresco
#-keep class com.facebook.** {*;}
#-keep interface com.facebook.** {*;}
#-keep enum com.facebook.** {*;}
# OkHttp3
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**
#Picasso
#-dontwarn com.squareup.okhttp.**
#zxing
-dontwarn com.google.zxing.**
-keep class com.google.zxing.** { *; }
#webview
-dontwarn com.tencent.**
#eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
# de.greenrobot.even beta1 ,
-keepclassmembers class ** {
public void onEvent*(**);
}
#
-dontwarn com.amap.api.**
-keep class com.amap.api.** {*;}
#bugout
-dontwarn com.qamaster.android.**
-dontwarn com.testin.agent.**
-keepattributes InnerClasses
-keep class com.testin.agent.** { *; }
-keepattributes SourceFile, LineNumberTable
#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
#sharesdk
-keep class cn.sharesdk.**{*;}
-keep class com.sina.**{*;}
-keep class **.R$* {*;}
-keep class **.R{*;}
-dontwarn cn.sharesdk.**
-dontwarn **.R$*
-dontwarn com.tencent.**
-keep class com.tencent.** {*;}
# rx
-dontwarn rx.**
-keepclassmembers class rx.** { *; }
# retrolambda
-dontwarn java.lang.invoke.*
# Glide specific rules #
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
#
-keep class com.umeng.message.protobuffer.* {
public <fields>;
public <methods>;
}
-keep class com.umeng.message.* {
public <fields>;
public <methods>;
}
#ormLite
-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
-keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager
-keepclassmembers class * {@com.j256.ormlite.field.DatabaseField *;}
-keep class com.j256.ormlite.** {*;}
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
#zbar
-keep class net.sourceforge.zbar.**{*;}
-keep class com.nineoldandroids.** {*;}
# ocr
-keep class com.yd.ocr.idcard.** { *; }
-keep class com.googlecode.** { *; }
-keep class org.opencv.** { *; }
#
-keep class com.iflytek.** { *; }
# FastJson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
이로써 코드 혼동 은 이미 소개 가 끝 났 습 니 다.문제 가 있 으 면 제때에 지적 하고 같이 공부 하 세 요.감사합니다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.