Appearance
接入指南
概述
本页主要介绍工程配置注册事项
前提条件
- 确保您应用的 build 文件使用以下值:
- 最低 SDK 版本 (minSdkVersion) 为
24或更高
- 最低 SDK 版本 (minSdkVersion) 为
1. Gradle 依赖
在 App 的 build.gradle 文件中加入对应的依赖
java
implementation 'io.github.adgocompany:unad_cn:2.6.9.8'2. 配置 maven
java
maven {
url "https://s01.oss.sonatype.org/content/repositories/releases/"
}
maven {
url "https://jfrog.takuad.com/artifactory/china_sdk"
}
maven {
url "https://artifact.bytedance.com/repository/pangle"
}
maven {
url "https://maven.aliyun.com/repository/public"
}
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mimo-developer'
password 'AKCp8ih1PFG9tV8qaLyws67dLGZi8udFM39SfsHgihN15cgsiRvHuxj8JzFmuZjaViVeNawaA'
}
}
maven {
url "https://jitpack.io"
}
maven {
url "https://developer.huawei.com/repo/"
}
maven {
url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_support"
}
mavenCentral()
google()
3. 初始化 SDK
注意:在 Application 的 onCreate 方法中调用初始化方法,传入 UNAD 的 appid
单进程进行初始化
测试 TEST_APPID 应用上线时请替换为正式的 applicationId
java
请主线程中初始化unad,参考DEMO
UNAD.initialize(new UNADConfig.Builder()
// true-屏蔽个性化推荐广告(关闭)
//false-不屏蔽个性化推荐广告(打开)
//默认false
.disablePersonalRecommand(false)
.setDebug(true).build(),
"TEST_APPID", this, new UNAD.InitCallback() {
@Override
public void onSuccess() {
Log.e("unadsdk", "UI:onSuccess");
}
@Override
public void onError(UnadError error) {
Log.e("unadsdk", "UI:onError");
}
});4. 修改 AndroidManifest.xml 文件, 添加必要权限
添加访问权限
在 AndroidManifest.xml 文件中添加
SDK 不强制校验下列权限(即:无下面权限 sdk 也可正常工作),但建议开发者申请下面权限,尤其是 READ_PHONE_STATE 权限 READ_PHONE_STATE 权限用于允许 SDK 获取用户标识
xml
<!--SDK 通用 必要权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取MAC地址,⽤于标识⽤户-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--获取设备标识IMEI。⽤于标识⽤户-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 如果需要精确定位的话请加上此权限 不强制要求-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 如果视频广告使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 此权限在Android R系统上判定广告对应的应用是否在用户的app上安装,避免投放错误的广告,以此提高用户的广告体验。若添加此权限,需要在您的用户隐私文档中声明! -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<!--SDK内自定义的权限,与下载相关,aar中已经申请 快手需要-->
<permission
android:name="${applicationId}.permission.KW_SDK_BROADCAST"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.KW_SDK_BROADCAST" />添加 APPLICATION_ID 配置
在 AndroidManifest.xml 文件的 application 节点下添加以下文件,其对应的 xml 文件可在 demo 中获取。
注意 applicationId 应该与您的应用包名一样,不一致可能会闪退
xml
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<uses-sdk tools:overrideLibrary="com.octopus.ad" />
<!-- source file: china/network_sdk/gdt/4.630.1500/AndroidManifest.xml -->
<provider
android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>
<!-- source file: china/network_sdk/csj/6.7.0.7/AndroidManifest.xml -->
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/adgo_file_paths" />
</provider>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
<!-- source file: china/network_sdk/sigmob/4.21.1/AndroidManifest.xml -->
<provider
android:name="com.sigmob.sdk.SigmobFileV4Provider"
android:authorities="${applicationId}.sigprovider"
android:exported="false"
android:initOrder="200"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/sigmob_file_path"/>
</provider>
<!-- h5广告入口 -->
<activity
android:name="com.unad.sdk.GameAdActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|stateAlwaysHidden"
>
</activity>build.gradle 添加 Java 1.8 兼容性
java
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
exclude 'META-INF/io.netty.versions.properties' // will not include LICENSE file
exclude 'META-INF/INDEX.LIST' // will not include INDEX.LIST file
}5. 混淆
如果需要混淆,添加下面配置
# 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。)
-optimizationpasses 5
# 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名)
-dontusemixedcaseclassnames
# 指定不去忽略非公共的库类(不跳过library中的非public的类)
-dontskipnonpubliclibraryclasses
# 指定不去忽略包可见的库类的成员
-dontskipnonpubliclibraryclassmembers
#不进行优化,建议使用此选项,
-dontoptimize
# 不进行预校验,Android不需要,可加快混淆速度。
-dontpreverify
# 屏蔽警告
-ignorewarnings
# 指定混淆是采用的算法,后面的参数是一个过滤器
# 这个过滤器是谷歌推荐的算法,一般不做更改
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# 保护代码中的Annotation不被混淆
-keepattributes *Annotation*
# 避免混淆泛型, 这在JSON实体映射时非常重要
-keepattributes Signature
# 抛出异常时保留代码行号
-keepattributes SourceFile,LineNumberTable
#优化时允许访问并修改有修饰符的类和类的成员,这可以提高优化步骤的结果。
# 比如,当内联一个公共的getter方法时,这也可能需要外地公共访问。
# 虽然java二进制规范不需要这个,要不然有的虚拟机处理这些代码会有问题。当有优化和使用-repackageclasses时才适用。
#指示语:不能用这个指令处理库中的代码,因为有的类和类成员没有设计成public ,而在api中可能变成public
#-allowaccessmodification
#表示不混淆任何一个View中的setXxx()和getXxx()方法,
#因为属性动画需要有相应的setter和getter的方法实现,混淆了就无法工作了。
-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);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆
-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
#表示不混淆上面声明的类,最后这两个类我们基本也用不上,是接入Google原生的一些服务时使用的
# 保留继承的
#表示不混淆任何包含native方法的类的类名以及native方法名,这个和我们刚才验证的结果是一致
-keepclasseswithmembernames class * {
native <methods>;
}
#这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
#表示不混淆Activity中参数是View的方法,因为有这样一种用法,在XML中配置android:onClick=”buttonClick”属性,
#当用户点击该按钮时就会调用Activity中的buttonClick(View view)方法,如果这个方法被混淆的话就找不到了
-keepclassmembers class * extends android.app.Activity{
public void *(android.view.View);
}
#表示不混淆枚举中的values()和valueOf()方法,枚举我用的非常少,这个就不评论了
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#adgo
-keep class com.unad.sdk.** {*;}
#aliyun
-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
# 不混淆内部类
-keepattributes InnerClasses
# 对于R(资源)类中的静态方法不能被混淆
-keepclassmembers class **.R$* {
public static <fields>;
}
-ignorewarnings
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-dontwarn com.androidquery.**
-keep class com.androidquery.** { *;}
-dontwarn tv.danmaku.**
-keep class tv.danmaku.** { *;}
-dontwarn androidx.**
#tbs版本的sdk需要进行以下配置
-keep class com.tencent.smtt.** { *; }
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**
-keep class com.tencent.mm.opensdk.** {
*;
}
-keep class com.tencent.wxop.** {
*;
}
-keep class com.tencent.mm.sdk.** {
*;
}
# 如果接入了Bugly,需要添加如下配置
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
# Google IMA
-keep class com.google.obf.** { *; }
-keep interface com.google.obf.** { *; }
-keep class com.google.ads.interactivemedia.** { *; }
-keep interface com.google.ads.interactivemedia.** { *; }
-dontwarn com.google.ads.interactivemedia.**
# 穿山甲
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep class com.androidquery.callback.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.ss.sys.ces.* {*;}
-dontwarn com.ss.android.socialbase.downloader.**
-dontwarn com.ss.android.crash.log.**
-keep class com.pgl.sys.ces.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bytedance.embedapplog.** {*;}
# MTG
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mintegral.** {*; }
-keep interface com.mintegral.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mintegral.**
-keep class **.R$* { public static final int mintegral*; }
-keep class com.alphab.** {*; }
-keep interface com.alphab.** {*; }
# 快手
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
# qapm 平台
-keep class com.tencent.qapmsdk.**{*;}
-dontwarn com.tencent.qapmsdk.**
-dontnote com.tencent.qapmsdk.**
-ignorewarnings
-keep class com.koms.fert.co.mpd.**{*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep class com.kwad.sdk.** { *;}
-keep class com.ksad.download.** { *;}
-keep class com.kwai.filedownloader.** { *;}
#tencent.klevin
-keep class com.tencent.tgpa.lite.**{*;}
-keep class com.ihoc.mgpa.deviceid.**{*;}
-keep class com.tencent.klevin.**{*;}
########### 移动安全联盟 OAID 混淆要求 begin ########
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.bun.lib.**{*;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {
public<methods>;
}
########### 移动安全联盟 OAID 混淆要求 end ########
#京东sdk混淆规则
-keep class com.jd.ad.sdk.** { *; }
#baidu
-dontwarn com.baidu.mobads.sdk.api.**
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}
-keep class com.baidu.mobads.** { *; }
# Octopus混淆
-dontwarn com.octopus.ad.**
-keep class com.octopus.ad.** {*;}
# 使用Glide要添加的混淆
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keep class com.squareup.picasso.** { *; }
-ignorewarnings
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.baidu.mobads.** { *; }
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}
-keep class android.support.v7.widget.RecyclerView {*;}
-keepnames class android.support.v7.widget.RecyclerView$* {
public <fields>;
public <methods>;
}
-keep class android.support.v7.widget.LinearLayoutManager {*;}
-keep class android.support.v7.widget.PagerSnapHelper {*;}
-keep class android.support.v4.view.ViewCompat {*;}
-keep class android.support.v4.util.LongSparseArray {*;}
-keep class android.support.v4.util.ArraySet {*;}
-keep class android.support.v4.view.accessibility.AccessibilityNodeInfoCompat {*;}
-keep class com.tencent.mm.opensdk.** {
*;
}
-keep class com.tencent.wxop.** {
*;
}
-keep class com.tencent.mm.sdk.** {
*;
}
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keep class com.yxcorp.kuaishou.addfp.android.Orange {*;}
##########################以下是ks建议要求把他们aar里面的混淆全部添加###################################
-keep class com.kwai.**{ *; }
-keep class com.ksad.**{ *; }
-keep class com.kwad.** { *;}
-keep class com.kuaishou.aegon.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-dontwarn com.kuaishou.aegon.**
-dontwarn com.tachikoma.core.**
#ijkplayer
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keeppackagenames com.badlogic.gdx.math
-keeppackagenames com.google.vrtoolkit.cardboard.sensors
-dontwarn okio.**
-dontwarn okhttp3.**
# 混淆一级即可
-keep class okhttp3.* {*;}
-keep class com.google.gson.* {*;}
#保留注解,如果不添加改行会导致我们的@Keep注解失效
-keepattributes *Annotation*
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
# 安全sdk
-dontwarn com.kuaishou.android.security.**
-keep class com.kuaishou.android.security.**{*;}
-keep class com.yxcorp.kuaishou.addfp.** { *;}
#直播相关混淆
-dontwarn io.netty.**
-dontwarn com.kuaishou.livestream.message.**
-dontwarn com.kuaishou.protobuf.**
-keep class com.google.protobuf.nano.** {*;}
-keep class com.kuaishou.livestream.message.nano.** {*;}
-keep class com.kuaishou.protobuf.livestream.nano.** {*;}
-keep class com.kuaishou.merchant.message.nano.** {*;}
-keep class com.kuaishou.protobuf.merchant.message.nano.** {*;}
#直播广告
-keep class okio.** {*;}
-keep class io.** {*;}
-keep class com.yxcorp.** {*;}
-keep class com.kuaishou.** {*;}
-keep class org.reactivestreams.** {*;}
-keep class com.kuaishou.livestream.** {*;}
-keep class com.kuaishou.security.kste.** {*;}
-keep class com.seclib.kste.** {*;}
# 安全sdk
-dontwarn com.kuaishou.android.security.**
-keep class com.kuaishou.dfp.**{*;}
-keep class com.kuaishou.dfp.KWEGIDDFP {*;}
-keep class com.kuaishou.dfp.ResponseDfpCallback {*;}
-keep class com.kuaishou.dfp.env.jni.Watermelon {*;}
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**
-keep class com.google.protobuf.** {*;}
-keep class com.kuaishou.dfp.env.Proxy.** {*;}
#new added for android 10
-keep class com.bun.miitmdid.core.** {*;}
#TK框架
-keep class com.tachikoma.core.manager.IProviderCollector {*;}
-keep class * implements com.tachikoma.core.manager.IProviderCollector { *;}
-keep class com.tkruntime.v8.**{*;}
-keep class com.kwad.proguard.annotations.DoNotStrip
-keep @com.kwad.proguard.annotations.DoNotStrip class * { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
#风控sdk
-keep class com.kuaishou.weapon.**{ *; }
# oaid相关
-dontwarn com.kwad.sdk.oaid.OADIDSDKHelper**
-keep class * implements com.bun.miitmdid.interfaces.IIdentifierListener { *; }
-keep class com.bun.miitmdid.core.MdidSdkHelper{*;}
-keep public class com.kwad.sdk.crash.online.monitor.block.BlockEvent { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequence { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequenceDrawable { *; }
-keep class com.kwad.components.offline.api.** { *;}
-keep class * implements com.kwad.components.offline.api.IOfflineCompo { *; }
-keep class com.kwad.components.offline.api.core.annotation.DoNotStrip
-keep @com.kwad.components.offline.api.core.annotation.DoNotStrip class * { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequence { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequenceDrawable { *; }
-keep class com.kwad.components.offline.api.** { *;}
-keep class * implements com.kwad.components.offline.api.IOfflineCompo { *; }
-keep class com.kwad.components.offline.api.core.annotation.DoNotStrip
-keep @com.kwad.components.offline.api.core.annotation.DoNotStrip class * { *; }
##########################以上是ks建议要求把他们aar里面的混淆全部添加###################################
# 优化 不优化输入的类文件
-dontoptimize
# androidx
-keep class com.google.android.material.** {*;}
-keep class androidx.** {*;}
-keep public class * extends androidx.**
-keep interface androidx.** {*;}
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**
-dontwarn androidx.**
# android.support.v4
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
# WindAd
-keep class com.sigmob.sdk.**{ *;}
-keep interface com.sigmob.sdk.**{ *;}
-keep class com.sigmob.windad.**{ *;}
-keep interface com.sigmob.windad.**{ *;}
-keep class com.czhj.**{ *;}
-keep interface com.czhj.**{ *;}
-keep class com.tan.mark.**{*;}
# miitmdid
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
-keepclassmembers class * {
*** getContext(...);
*** getActivity(...);
*** getResources(...);
*** startActivity(...);
*** startActivityForResult(...);
*** registerReceiver(...);
*** unregisterReceiver(...);
*** query(...);
*** getType(...);
*** insert(...);
*** delete(...);
*** update(...);
*** call(...);
*** setResult(...);
*** startService(...);
*** stopService(...);
*** bindService(...);
*** unbindService(...);
*** requestPermissions(...);
*** getIdentifier(...);
}
-keep class com.bytedance.pangle.** {*;}
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep class ms.bd.c.Pgl.**{*;}
-keep class com.bytedance.mobsec.metasec.ml.**{*;}
-keep class com.bytedance.embedapplog.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bykv.vk.** {*;}
-keep class com.lynx.** { *; }
-keep class com.ss.android.**{*;}
-keep class android.support.v4.app.FragmentActivity{}
-keep class androidx.fragment.app.FragmentActivity{}
-keep class com.opos.** { *;}
-keep class com.heytap.msp.mobad.** { *;}
-keep class com.heytap.openid.** {*;}
-keep class okio.**{ *; }
-keeppackagenames com.heytap.nearx.tapplugin
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*;}
-keep class com.bumptech.glide.**{*;}
-keep class com.alimm.tanx.**{*;}
# 有进程间通信,保证service相关不被混淆
#-keep public class * extends android.app.Service
#-keep public class * extends android.content.BroadcastReceiver
# 自动曝光数据的防混淆
-keep class * implements java.io.Serializable{
<fields>;
<methods>;
}
# Analytics SDK
-keep class com.miui.analytics.** { *; }
-keep class com.xiaomi.analytics.* { public protected *; }
# Mediation SDK
-keep class com.xiaomi.ad.mediation.** { *; }
#Ad SDK
-keep class com.miui.zeus.mimo.sdk.** { *; }
-keep class com.google.gson.examples.android.model.** { <fields>; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keep class * extends android.os.IInterface{
*;
}
-keep class com.jd.ad.sdk.** { *; }
-keepattributes SourceFile,LineNumberTable
-dontwarn com.squareup.okhttp.**
-dontwarn okhttp3.**
-keep class com.vivo.*.** { *; }
-dontwarn com.bytedance.article.common.nativecrash.NativeCrashInit
-keep class com.bytedance.sdk.openadsdk.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class com.qq.e.** {
public protected *;
}
-keep class android.support.v4.**{
public *;
}
-keep class android.support.v7.widget.** {*;}
-dontwarn com.vivo.secboxsdk.**
-keep class com.vivo.secboxsdk.SecBoxCipherException { *; }
-keep class com.vivo.secboxsdk.jni.SecBoxNative { *; }
-keep class com.vivo.secboxsdk.BuildConfig { *; }
-keep class com.vivo.advv.**{*;}
-keep class com.kwad.sdk.** { *;}
-keep class com.ksad.download.** { *;}
-keep class com.kwai.filedownloader.** { *;}
# sdk
-keep class com.bun.miitmdid.** { *; }
-keep interface com.bun.supplier.** { *; }
# asus
-keep class com.asus.msa.SupplementaryDID.** { *; }
-keep class com.asus.msa.sdid.** { *; }
# freeme
-keep class com.android.creator.** { *; }
-keep class com.android.msasdk.** { *; }
# huawei
-keep class com.huawei.hms.ads.** { *; }
-keep interface com.huawei.hms.ads.** {*; }
# lenovo
-keep class com.zui.deviceidservice.** { *; }
-keep class com.zui.opendeviceidlibrary.** { *; }
# meizu
-keep class com.meizu.flyme.openidsdk.** { *; }
# nubia
-keep class com.bun.miitmdid.provider.nubia.NubiaIdentityImpl { *; }
# oppo
-keep class com.heytap.openid.** { *; }
# samsung
-keep class com.samsung.android.deviceidservice.** { *; }
# vivo
-keep class com.vivo.identifier.** { *; }
# xiaomi
-keep class com.bun.miitmdid.provider.xiaomi.IdentifierManager { *; }
# zte
-keep class com.bun.lib.** { *; }
# coolpad
-keep class com.coolpad.deviceidsupport.** { *; }
# ---------掌酷 SDK--------------
-keep class com.wrapper.ZkViewSDK {
public <fields>;
public <methods>;
}
-keep class com.wrapper.ZkViewSDK$ActionCallBack {
public <fields>;
public <methods>;
}
# 保留枚举类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.wrapper.ZkViewSDK$KEY {
public <fields>;
public <methods>;
}
-keep class com.wrapper.ZkViewSDK$Event {
public <fields>;
public <methods>;
}
-keeppackagenames com.zk.**
# ---------掌酷 SDK--------------
#huawei
-keep class com.huawei.openalliance.ad.** { *; }
-keep class com.huawei.hms.ads.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mbridge.** {*; }
-keep interface com.mbridge.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mbridge.**
-keep class **.R$* { public static final int mbridge*; }
-keep class com.qq.e.** {
public protected *;
}
-keep class android.support.v4.**{
public *;
}
-keep class android.support.v7.**{
public *;
}
-keep class MTT.ThirdAppInfoNew {
*;
}
-keep class com.tencent.** {
*;
}
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**
-dontwarn com.tapadn.**
-keep class com.tapadn.** { *;}
-dontshrink
-keep class com.aliyun.sls.android.producer.** { *; }
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class com.unad.** { *;}如果您的应⽤启⽤了资源混淆或资源缩减(shrinkResources),则需要在 res/raw 路径下加一个 keep.xml,内容可参考 demo 中 keep.xml 文件,如下:
xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/adgo_*,@drawable/unad_*,@anim/unad_*,@layout/unad_*,@string/anythink_*,@drawable/anythink_*,@layout/anythink_*,@id/anythink_*,@dimen/anythink_*,@style/anythink_*,@color/anythink_*,@string/ksad_*,@drawable/ksad_*,@layout/ksad_*,@id/ksad_*,@style/ksad_*,@color/ksad_*,@attr/ksad_*,@dimen/ksad_*,@anim/bullet_bottom_dialog_enter,@anim/bullet_bottom_dialog_exit,@anim/cj_pay_activity_add_in_animation,@anim/cj_pay_activity_fade_in_animation,@anim/cj_pay_activity_fade_out_animation,@anim/cj_pay_activity_remove_out_animation,@anim/cj_pay_expo_easeout_interpolator,@anim/cj_pay_fragment_down_out_animation,@anim/cj_pay_fragment_up_in_animation,@anim/cj_pay_quadratic_easein_interpolator,@anim/cj_pay_slide_in_from_bottom_with_bezier,@anim/cj_pay_slide_out_to_bottom_with_bezier,@anim/cj_pay_slide_right_in,@anim/ec_alpha_in,@anim/ec_alpha_out,@anim/ec_base_enter,@anim/ec_base_exit,@anim/ec_bottom_in,@anim/ec_bottom_out,@anim/ec_commerce_activity_in,@anim/ec_commerce_activity_out,@anim/ec_commerce_pre_out,@anim/ec_pop_bottom_in,@anim/ec_pop_bottom_out,@anim/ec_pop_slide_in,@anim/ec_pop_slide_out,@anim/ec_slide_in,@anim/ec_slide_out,@anim/ec_zoom_in,@anim/ec_zoom_out,@anim/shopping_popup_fade_in,@anim/shopping_popup_fade_out,@anim/ttlive_alpha_in,@anim/ttlive_alpha_out,@anim/ttlive_dialog_popup_enter,@anim/ttlive_dialog_popup_exit,@anim/ttlive_popup_enter,@anim/ttlive_popup_exit,@anim/ttlive_slide_in_bottom,@anim/ttlive_slide_in_bottom_fast,@anim/ttlive_slide_in_bottom_normal,@anim/ttlive_slide_in_left,@anim/ttlive_slide_in_right,@anim/ttlive_slide_in_top,@anim/ttlive_slide_out_bottom,@anim/ttlive_slide_out_bottom_fast,@anim/ttlive_slide_out_bottom_normal,@anim/ttlive_slide_out_left,@anim/ttlive_slide_out_right,@anim/ttlive_slide_out_top,@color/ec_store_window_background,@color/tt_appdownloader_notification_material_background_color,@color/tt_appdownloader_notification_title_color,@color/tt_appdownloader_s1,@color/tt_appdownloader_s13,@color/tt_appdownloader_s18,@color/tt_appdownloader_s4,@color/tt_appdownloader_s8,@color/ttdownloader_transparent,@drawable/tt_appdownloader_action_bg,@drawable/tt_appdownloader_action_new_bg,@drawable/tt_appdownloader_ad_detail_download_progress,@drawable/tt_appdownloader_detail_download_success_bg,@drawable/tt_appdownloader_download_progress_bar_horizontal,@drawable/tt_appdownloader_download_progress_bar_horizontal_new,@drawable/tt_appdownloader_download_progress_bar_horizontal_night,@drawable/ttdownloader_bg_appinfo_btn,@drawable/ttdownloader_bg_appinfo_dialog,@drawable/ttdownloader_bg_button_blue_corner,@drawable/ttdownloader_bg_kllk_btn1,@drawable/ttdownloader_bg_kllk_btn2,@drawable/ttdownloader_bg_transparent,@drawable/ttdownloader_bg_white_corner,@drawable/ttdownloader_dash_line,@drawable/ttdownloader_icon_back_arrow,@drawable/ttdownloader_icon_download,@drawable/ttdownloader_icon_yes,@id/auto,@id/cancel_tv,@id/confirm_tv,@id/dash_line,@id/delete_tv,@id/iv_app_icon,@id/iv_detail_back,@id/iv_privacy_back,@id/line,@id/ll_download,@id/message_tv,@id/permission_list,@id/privacy_webview,@id/title_bar,@id/tt_appdownloader_action,@id/tt_appdownloader_desc,@id/tt_appdownloader_download_progress,@id/tt_appdownloader_download_progress_new,@id/tt_appdownloader_download_size,@id/tt_appdownloader_download_status,@id/tt_appdownloader_download_success,@id/tt_appdownloader_download_success_size,@id/tt_appdownloader_download_success_status,@id/tt_appdownloader_download_text,@id/tt_appdownloader_icon,@id/tt_appdownloader_root,@id/tv_app_detail,@id/tv_app_developer,@id/tv_app_name,@id/tv_app_privacy,@id/tv_app_version,@id/tv_empty,@id/tv_give_up,@id/tv_permission_description,@id/tv_permission_title,@layout/tt_appdownloader_notification_layout,@layout/ttdownloader_activity_app_detail_info,@layout/ttdownloader_activity_app_privacy_policy,@layout/ttdownloader_dialog_appinfo,@layout/ttdownloader_dialog_select_operation,@layout/ttdownloader_item_permission,@string/tt_appdownloader_button_cancel_download,@string/tt_appdownloader_button_queue_for_wifi,@string/tt_appdownloader_button_start_now,@string/tt_appdownloader_download_percent,@string/tt_appdownloader_download_remaining,@string/tt_appdownloader_download_unknown_title,@string/tt_appdownloader_duration_hours,@string/tt_appdownloader_duration_minutes,@string/tt_appdownloader_duration_seconds,@string/tt_appdownloader_jump_unknown_source,@string/tt_appdownloader_label_cancel,@string/tt_appdownloader_label_cancel_directly,@string/tt_appdownloader_label_ok,@string/tt_appdownloader_label_reserve_wifi,@string/tt_appdownloader_notification_download,@string/tt_appdownloader_notification_download_complete_open,@string/tt_appdownloader_notification_download_complete_with_install,@string/tt_appdownloader_notification_download_complete_without_install,@string/tt_appdownloader_notification_download_continue,@string/tt_appdownloader_notification_download_delete,@string/tt_appdownloader_notification_download_failed,@string/tt_appdownloader_notification_download_install,@string/tt_appdownloader_notification_download_open,@string/tt_appdownloader_notification_download_pause,@string/tt_appdownloader_notification_download_restart,@string/tt_appdownloader_notification_download_resume,@string/tt_appdownloader_notification_download_space_failed,@string/tt_appdownloader_notification_download_waiting_net,@string/tt_appdownloader_notification_download_waiting_wifi,@string/tt_appdownloader_notification_downloading,@string/tt_appdownloader_notification_install_finished_open,@string/tt_appdownloader_notification_insufficient_space_error,@string/tt_appdownloader_notification_need_wifi_for_size,@string/tt_appdownloader_notification_no_internet_error,@string/tt_appdownloader_notification_no_wifi_and_in_net,@string/tt_appdownloader_notification_paused_in_background,@string/tt_appdownloader_notification_pausing,@string/tt_appdownloader_notification_prepare,@string/tt_appdownloader_notification_request_btn_no,@string/tt_appdownloader_notification_request_btn_yes,@string/tt_appdownloader_notification_request_message,@string/tt_appdownloader_notification_request_title,@string/tt_appdownloader_notification_waiting_download_complete_handler,@string/tt_appdownloader_resume_in_wifi,@string/tt_appdownloader_tip,@string/tt_appdownloader_wifi_recommended_body,@string/tt_appdownloader_wifi_recommended_title,@string/tt_appdownloader_wifi_required_body,@string/tt_appdownloader_wifi_required_title,@style/AlphaAnimation,@style/BottomAnimation,@style/Bullet.Bottom.Dialog.Animation,@style/Dialog.BottomSheet.Transparent,@style/ECBaseDialogFragmentAnimation,@style/ECBottomInWindowAnimation,@style/ECBottomOutWindowAnimation,@style/ECHalfScreenAnchorV4Anime,@style/ECSlideInWindowAnimation,@style/ECSlideOutWindowAnimation,@style/EC.Widget.Design.BottomSheet.Modal,@style/ExpandAnimation,@style/PopupWindowFadeAnimationStyle,@style/SKUPanelDialogAnimation,@style/SlideAnimation,@style/StoreAppBottomSheetStyle,@style/bottom_sheet_anime,@style/commerce_dialog_dim_non_enter_animation,@style/ec_plugin_progress_dialog,@style/ec_sku_prerender_dialog_anim,@style/tt_appdownloader_style_detail_download_progress_bar,@style/tt_appdownloader_style_notification_text,@style/tt_appdownloader_style_notification_title,@style/tt_appdownloader_style_progress_bar,@style/tt_appdownloader_style_progress_bar_new,@style/ttdownloader_translucent_dialog,@style/ttlive_PopupWindowAnimationStyle,@style/ttlive_bottom_dialog_anim,@style/ttlive_bottom_dialog_anim_fast,@style/ttlive_bottom_dialog_anim_normal,@style/ttlive_comb_dialog_anim,@style/ttlive_dialog_popup_animation,@style/ttlive_right_dialog_anim,@string/mbridge*,@layout/mbridge*,@drawable/mbridge*,@anim/mbridge*,@color/mbridge*,@style/mbridge*,@id/mbridge*"
tools:shrinkMode="safe" />注意:如果引入了部分第三方的资源优化框架,则需配置防混淆白名单,内存可参考 Demo 中 whitel.txt 文件,如下:
txt
R.anim.unad_*
R.layout.unad_*
R.drawable.unad_*
R.drawable.adgo_*
R.drawable.ad_*
R.string.anythink_*
R.drawable.anythink_*
R.layout.anythink_*
R.id.anythink_*
R.dimen.anythink_*
R.style.anythink_*
R.color.anythink_*
R.string.ksad_*
R.drawable.ksad_*
R.layout.ksad_*
R.id.ksad_*
R.style.ksad_*
R.color.ksad_*
R.attr.ksad_*
R.dimen.ksad_*
R.anim.bullet_bottom_dialog_enter
R.anim.bullet_bottom_dialog_exit
R.anim.cj_pay_activity_add_in_animation
R.anim.cj_pay_activity_fade_in_animation
R.anim.cj_pay_activity_fade_out_animation
R.anim.cj_pay_activity_remove_out_animation
R.anim.cj_pay_expo_easeout_interpolator
R.anim.cj_pay_fragment_down_out_animation
R.anim.cj_pay_fragment_up_in_animation
R.anim.cj_pay_quadratic_easein_interpolator
R.anim.cj_pay_slide_in_from_bottom_with_bezier
R.anim.cj_pay_slide_out_to_bottom_with_bezier
R.anim.cj_pay_slide_right_in
R.anim.ec_alpha_in
R.anim.ec_alpha_out
R.anim.ec_base_enter
R.anim.ec_base_exit
R.anim.ec_bottom_in
R.anim.ec_bottom_out
R.anim.ec_commerce_activity_in
R.anim.ec_commerce_activity_out
R.anim.ec_commerce_pre_out
R.anim.ec_pop_bottom_in
R.anim.ec_pop_bottom_out
R.anim.ec_pop_slide_in
R.anim.ec_pop_slide_out
R.anim.ec_slide_in
R.anim.ec_slide_out
R.anim.ec_zoom_in
R.anim.ec_zoom_out
R.anim.shopping_popup_fade_in
R.anim.shopping_popup_fade_out
R.anim.ttlive_alpha_in
R.anim.ttlive_alpha_out
R.anim.ttlive_dialog_popup_enter
R.anim.ttlive_dialog_popup_exit
R.anim.ttlive_popup_enter
R.anim.ttlive_popup_exit
R.anim.ttlive_slide_in_bottom
R.anim.ttlive_slide_in_bottom_fast
R.anim.ttlive_slide_in_bottom_normal
R.anim.ttlive_slide_in_left
R.anim.ttlive_slide_in_right
R.anim.ttlive_slide_in_top
R.anim.ttlive_slide_out_bottom
R.anim.ttlive_slide_out_bottom_fast
R.anim.ttlive_slide_out_bottom_normal
R.anim.ttlive_slide_out_left
R.anim.ttlive_slide_out_right
R.anim.ttlive_slide_out_top
R.color.ec_store_window_background
R.color.tt_appdownloader_notification_material_background_color
R.color.tt_appdownloader_notification_title_color
R.color.tt_appdownloader_s1
R.color.tt_appdownloader_s13
R.color.tt_appdownloader_s18
R.color.tt_appdownloader_s4
R.color.tt_appdownloader_s8
R.color.ttdownloader_transparent
R.drawable.tt_appdownloader_action_bg
R.drawable.tt_appdownloader_action_new_bg
R.drawable.tt_appdownloader_ad_detail_download_progress
R.drawable.tt_appdownloader_detail_download_success_bg
R.drawable.tt_appdownloader_download_progress_bar_horizontal
R.drawable.tt_appdownloader_download_progress_bar_horizontal_new
R.drawable.tt_appdownloader_download_progress_bar_horizontal_night
R.drawable.ttdownloader_bg_appinfo_btn
R.drawable.ttdownloader_bg_appinfo_dialog
R.drawable.ttdownloader_bg_button_blue_corner
R.drawable.ttdownloader_bg_kllk_btn1
R.drawable.ttdownloader_bg_kllk_btn2
R.drawable.ttdownloader_bg_transparent
R.drawable.ttdownloader_bg_white_corner
R.drawable.ttdownloader_dash_line
R.drawable.ttdownloader_icon_back_arrow
R.drawable.ttdownloader_icon_download
R.drawable.ttdownloader_icon_yes
R.id.auto
R.id.cancel_tv
R.id.confirm_tv
R.id.dash_line
R.id.delete_tv
R.id.iv_app_icon
R.id.iv_detail_back
R.id.iv_privacy_back
R.id.line
R.id.ll_download
R.id.message_tv
R.id.permission_list
R.id.privacy_webview
R.id.title_bar
R.id.tt_appdownloader_action
R.id.tt_appdownloader_desc
R.id.tt_appdownloader_download_progress
R.id.tt_appdownloader_download_progress_new
R.id.tt_appdownloader_download_size
R.id.tt_appdownloader_download_status
R.id.tt_appdownloader_download_success
R.id.tt_appdownloader_download_success_size
R.id.tt_appdownloader_download_success_status
R.id.tt_appdownloader_download_text
R.id.tt_appdownloader_icon
R.id.tt_appdownloader_root
R.id.tv_app_detail
R.id.tv_app_developer
R.id.tv_app_name
R.id.tv_app_privacy
R.id.tv_app_version
R.id.tv_empty
R.id.tv_give_up
R.id.tv_permission_description
R.id.tv_permission_title
R.layout.tt_appdownloader_notification_layout
R.layout.ttdownloader_activity_app_detail_info
R.layout.ttdownloader_activity_app_privacy_policy
R.layout.ttdownloader_dialog_appinfo
R.layout.ttdownloader_dialog_select_operation
R.layout.ttdownloader_item_permission
R.string.tt_appdownloader_button_cancel_download
R.string.tt_appdownloader_button_queue_for_wifi
R.string.tt_appdownloader_button_start_now
R.string.tt_appdownloader_download_percent
R.string.tt_appdownloader_download_remaining
R.string.tt_appdownloader_download_unknown_title
R.string.tt_appdownloader_duration_hours
R.string.tt_appdownloader_duration_minutes
R.string.tt_appdownloader_duration_seconds
R.string.tt_appdownloader_jump_unknown_source
R.string.tt_appdownloader_label_cancel
R.string.tt_appdownloader_label_cancel_directly
R.string.tt_appdownloader_label_ok
R.string.tt_appdownloader_label_reserve_wifi
R.string.tt_appdownloader_notification_download
R.string.tt_appdownloader_notification_download_complete_open
R.string.tt_appdownloader_notification_download_complete_with_install
R.string.tt_appdownloader_notification_download_complete_without_install
R.string.tt_appdownloader_notification_download_continue
R.string.tt_appdownloader_notification_download_delete
R.string.tt_appdownloader_notification_download_failed
R.string.tt_appdownloader_notification_download_install
R.string.tt_appdownloader_notification_download_open
R.string.tt_appdownloader_notification_download_pause
R.string.tt_appdownloader_notification_download_restart
R.string.tt_appdownloader_notification_download_resume
R.string.tt_appdownloader_notification_download_space_failed
R.string.tt_appdownloader_notification_download_waiting_net
R.string.tt_appdownloader_notification_download_waiting_wifi
R.string.tt_appdownloader_notification_downloading
R.string.tt_appdownloader_notification_install_finished_open
R.string.tt_appdownloader_notification_insufficient_space_error
R.string.tt_appdownloader_notification_need_wifi_for_size
R.string.tt_appdownloader_notification_no_internet_error
R.string.tt_appdownloader_notification_no_wifi_and_in_net
R.string.tt_appdownloader_notification_paused_in_background
R.string.tt_appdownloader_notification_pausing
R.string.tt_appdownloader_notification_prepare
R.string.tt_appdownloader_notification_request_btn_no
R.string.tt_appdownloader_notification_request_btn_yes
R.string.tt_appdownloader_notification_request_message
R.string.tt_appdownloader_notification_request_title
R.string.tt_appdownloader_notification_waiting_download_complete_handler
R.string.tt_appdownloader_resume_in_wifi
R.string.tt_appdownloader_tip
R.string.tt_appdownloader_wifi_recommended_body
R.string.tt_appdownloader_wifi_recommended_title
R.string.tt_appdownloader_wifi_required_body
R.string.tt_appdownloader_wifi_required_title
R.style.AlphaAnimation
R.style.BottomAnimation
R.style.Bullet.Bottom.Dialog.Animation
R.style.Dialog.BottomSheet.Transparent
R.style.ECBaseDialogFragmentAnimation
R.style.ECBottomInWindowAnimation
R.style.ECBottomOutWindowAnimation
R.style.ECHalfScreenAnchorV4Anime
R.style.ECSlideInWindowAnimation
R.style.ECSlideOutWindowAnimation
R.style.EC.Widget.Design.BottomSheet.Modal
R.style.ExpandAnimation
R.style.PopupWindowFadeAnimationStyle
R.style.SKUPanelDialogAnimation
R.style.SlideAnimation
R.style.StoreAppBottomSheetStyle
R.style.bottom_sheet_anime
R.style.commerce_dialog_dim_non_enter_animation
R.style.ec_plugin_progress_dialog
R.style.ec_sku_prerender_dialog_anim
R.style.tt_appdownloader_style_detail_download_progress_bar
R.style.tt_appdownloader_style_notification_text
R.style.tt_appdownloader_style_notification_title
R.style.tt_appdownloader_style_progress_bar
R.style.tt_appdownloader_style_progress_bar_new
R.style.ttdownloader_translucent_dialog
R.style.ttlive_PopupWindowAnimationStyle
R.style.ttlive_bottom_dialog_anim
R.style.ttlive_bottom_dialog_anim_fast
R.style.ttlive_bottom_dialog_anim_normal
R.style.ttlive_comb_dialog_anim
R.style.ttlive_dialog_popup_animation
R.style.ttlive_right_dialog_anim
R.string.mbridge*
R.layout.mbridge*
R.drawable.mbridge*
R.anim.mbridge*
R.color.mbridge*
R.style.mbridge*
R.id.mbridge*6. 选择支持的 NDK
ndk { // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
abiFilters ‘armeabi-v7a’, ‘arm64-v8a’
}注意:请开发者务必按照上面信息进行注册声明,详情见 Demo。