SDK 下载和配置

SDK 下载

基本功能 SDK,包含登录支付等基础服务

稳定版(V5.2.4)

更新说明

  1. 修复若干 bug
  2. 接入风控 sdk
  3. 大数据 sdk 更新到 V125

灰度版

【如需使用灰度版请和技术对接人员确认】
* Android SDK 下载:【目前暂无灰度版本】

注意事项

  1. SDK 的onCreate接口要先于init接口调用
  2. SDK 的 init 接口必须在游戏检测更新前调用
  3. SDK 初始化成功前请勿调用 SDK 其它接口(onCreate 除外)
  4. 游戏包名以".ewan"结尾
  5. 请从引擎版工程中导出 Android Studio 工程后对接 SDK
  6. 工程是否使用 AndroidX 的判断:项目根目录/gradle.properties 文件中, 是否配置了 android.useAndroidX=true

环境要求

所需组件或内容版本备注
Android Studio3.3+
Gradle 版本4.10+
Gradle 插件版本3.3+
Android Support 库版本28.0.0+
SDK 最高支持 target 版本30

SDK 包内容

// 以下内容为SuperSDK_V5xx的内容,后续版本里的内容和结构可能会有更新,以版本更新说明的内容为准。
SuperSDK_V5xx.zip : SuperSDK基于Android Studio的版本库及对应Demo
├── libs : 基于Android Studio工程的SDK库文件
│    ├── SuperSDK_V5xx_lib_enc.aar : SDK主库文件
│    ├── SuperSDK_V5xx_lib_AndroidX_enc.aar : SDK主库文件(AndroidX版)
│    ├── SuperSDK_V5xx_lib_cp_module.aar : SDK模拟接入功能组件
│    ├── EEvent_125.aar : SDK数据埋点功能组件
│    ├── SuperAdSDK_V241_lib.aar : SDK广告相关功能组件(非必须)
│    └── SuperAdSDK_V241_lib_cp_module.aar : SDK模拟广告相关功能组件(非必须)
│    └── dx-captcha-without-risk-v5.4.3r.a33fe7f5.aar : 风控sdK
│    └── dx-risk-v7_3_14r_df6398ec-with-armeabi.aar : 风控sdK
│    └── EwRiskSDK_V100_lib_core.aar : 风控sdK
├── SuperSDK_V5xx_Demo : SDK基于Android Studio的接入示例工程
└── SuperSDK_V5xx_Demo.apk : SDK可运行Demo包

SDK 导入

修改 lib 级 build.gradle 文件

  • SuperSDK_V5xx_lib_AndroidX.aar(如工程的配置非 AndroidX, 则使用SuperSDK_V5xx_lib.aar)、SuperSDK_V5xx_lib_cp_module.aar文件拷贝至 libs 目录下, XXX 的具体版本请按实际文件替换

...

//TODO 添加以下内容以便引入aar依赖
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    api fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'

    //TODO 以api的形式添加以下内容,以供其它module使用
    api "com.android.support:support-v4:${rootProject.ext.supportLibVer}"

    api(name: 'dx-captcha-without-risk-v5.4.3r.a33fe7f5', ext: 'aar')
    api(name: 'dx-risk-v7_3_14r_df6398ec-with-armeabi', ext: 'aar')
    api(name: 'EwRiskSDK_V100_lib_core', ext: 'aar')

    api(name: 'EEvent_125', ext: 'aar')
    api(name: 'SuperSDK_V5xx_lib_cp_module', ext: 'aar')

    //api(name: 'SuperSDK_V5xx_lib_enc', ext: 'aar')               // 非AndroidX工程使用此库
    api(name: 'SuperSDK_V5xx_lib_AndroidX_enc', ext: 'aar')   // AndroidX工程使用此库

    // 广告功能(激励视频), 可选, 需要使用该功能时添加以下依赖
    //api(name: 'SuperAdSDK_V241_lib', ext: 'aar')
    //api(name: 'SuperAdSDK_V241_lib_cp_module', ext: 'aar')
}

...

修改 App Module 级 build.gradle 文件

apply plugin: 'com.android.application'// 包含application plugin的即为app module

android {
...

    defaultConfig {
        // TODO 设置应用包名
        applicationId "cn.ewan.supersdk.demo"
        ...

        ndk {
            // TODO 根据app实际需求指定要ndk需要兼容的架构: "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
        }

        // TODO 为SDK添加AndroidManifest的横竖屏设置及包名占位值, 横竖屏及包名根据实际应用配置
        manifestPlaceholders = [screen_orientation: "portrait", package_name: applicationId]

        ...
    }

    // TODO 避免混淆so文件
    packagingOptions{
        doNotStrip "*/armeabi/*.so"
        doNotStrip "*/armeabi-v7a/*.so"
        doNotStrip "*/arm64-v8a/*.so"
        doNotStrip "*/x86/*.so"
        doNotStrip "*/x86_64/*.so"
    }

// TODO 如果SDK的aar是在lib module引入的, 而不是在当前app module引入的, 则当前app module的gradle中, 还需要添加以下内容, dirs的值指向引入SDK的aar文件的lib module下的libs目录
//repositories {
//    flatDir {
//        dirs '../sdk_lib/libs'
//    }
//}

...

}

修改 App Module 级 AndroidManifest.xml 文件

screenshot-20221222-151308.png

 ...
<!-- TODO networkSecurityConfig:添加网络安全配置, 以在Android9.0上访问http资源 -->
<!-- TODO requestLegacyExternalStorage:添加传统储存模式配置,以在Android 10上访问公共储存空间 -->
<!-- TODO preserveLegacyExternalStorage:添加传统储存模式配置,以在Android 11以上暂时关闭分区存储模式 -->
<application
     ...
     android:networkSecurityConfig="@xml/super_network_security_config"
     android:requestLegacyExternalStorage="true"
     android:preserveLegacyExternalStorage="true" >
     ...
</application>

混淆

  • 如需混淆, 请在app 级的 proguard-rules.pro 文件中添加以下规则, 建议不混淆(minifyEnabled 设为 false), SDK 本身已混淆处理:

-dontwarn android.support.**
-keep class android.support.** { *; }
-keep class com.android.** { *; }
-keep public class * extends android.support.** #如果有引用v4或者v7包,需添加
-keep public class * extends android.app.Dialog
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-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.support.multidex.MultiDexApplication
-keep public class * extends android.os.IInterface
-keep public class com.android.vending.licensing.ILicensingService
#-keep public class * extends android.view.View

# 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.**

# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
    void set*(***);
    *** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
    native methods;
}
#不混淆Serializable
-keepnames class * implements java.io.Serializable
# 保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
    public static fields;
}
-keep public class * extends android.webkit.WebViewClient {
    public methods;
}
-keep public class * extends android.webkit.WebChromeClient {
    public methods;
}
-keepclassmembers class ** {
 @android.webkit.JavascriptInterface public *;
}

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepclasseswithmembers class * {      # 保持自定义控件类不被混淆
    public init(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {      # 保持自定义控件类不被混淆
    public init(android.content.Context, android.util.AttributeSet, int);
}
# 保留google下的所有类及其内部类
-keep class com.google.** {*;}
-dontwarn com.google.**

#============================================ 标准规则 end ============================================

-keeppackagenames com.ew.bdb.open*
-keeppackagenames cn.ewan.supersdk*
-keeppackagenames com.superad*
-keeppackagenames com.bangcle*
-keeppackagenames ijiami_*
-keep class com.bangcle.** {*;}
-keep class ijiami_** {*;}
-keep class cn.ewan.supersdk.** {*;}
-keep class com.superad.** {*;}
-keep class com.ew.bdb.** {*;}

#MiitSDK start
-keep class com.a.** {*;}
-keep class com.asus.** {*;}
-keep class com.b.** {*;}
-keep class com.bun.** {*;}
-keep class com.huawei.** {*;}
-keep class com.zui.** {*;}
-keep class com.heytap.** {*;}
-keep class com.meizu.** {*;}
-keep class com.samsung.** {*;}
#MiitSDK end

转换资源文件为 AndroidX

项目使用 AndroidX SDK 时,需要配置,否则无需配置
项目根目录下 gradle.properties 添加

android.useAndroidX=true
android.enableJetifier=true

image.png

同步 gradle 配置

  • 修改完成后, 同步 gradle 配置