SDK引入 - sunitsdk/SUnitDemo GitHub Wiki
• minSdkVersion 16 or later
• compileSdkVersion 26 or later
需要升级到androidx, 参考官方升级文档
1. 添加第三方依赖
SDK中的第三方依赖库的配置已整理在shareit_sdk.gradle中
下载shareit_sdk.gradle文件,放到主module的根目录下,并在build.gradle中引入依赖,具体如下:
// must be applied after your artifact generating plugin (eg. java / com.android.library/ com.android.application)
apply from: "shareit_sdk.gradle"
2. 添加默认广告配置文件(有利于提高收入)
将接入准备中获取的default_layer文件拷贝到目标工程assets对应的目录下
将申请的“广告AppId”替换如下示例中 "YOUR_APP_ID"
<manifest>
<application>
<meta-data android:name="com.ushareit.ads.KEY_APP_ID"
android:value="YOUR_APP_ID"/>
</application>
</manifest>
YOUR_APP_ID 是必要参数,如未配置,测试模式下, 将抛出 Crash 提示;将初始化失败,无法获取广告
以下为初始化配置, 请不要直接复制以下内容,对应的value值需要替换成您应用的值
<!-- 广告渠道,默认SAHREit就可以 -->
<meta-data
android:name="com.sunit.channel"
android:value="SHAREit" />
<!-- 如果只有一个Activity的应用无需声明此项,如果有多个activity,value为游戏场景所在的主Activity路径 -->
<meta-data
android:name="com.sunit.mainActivity"
android:value="com.xxx.MainActivity(替换成你们的主 Activity 的完整包名路径)" />
<!-- 如果只有一个进程的应用无需声明此项,删除此项即可,会默认使用包名进程。如果多个进程的应用, 需要声明支持广告的进程的名称 -->
<meta-data
android:name="com.sunit.adProcess"
android:value="processName" />
<!-- 声明为'debug'则会使用测试模式(仅测试使用) -->
<meta-data
android:name="com.sunit.mode"
android:value="debug" />
聚合SDK提供中已经包含了混淆配置, 不需要修改混淆文件.
如果是在Library Module引入聚合SDK,请避免该module对SDK进行二次混淆.
- 广告Admob集成
如需集成Admob广告源, 需在AndroidManifest.xml文件中配置如下内容:
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ADMOB_APP_ID" />
ADMOB_APP_ID 由 SHAREit 服务对接人提供
- Flurry数据上报集成 集成 Flurry,需在AndroidManifest.xml文件中配置如下内容:
<meta-data
android:name="flurry.sdk.API_KEY"
android:value="FLURRY_API_KEY" />
FLURRY_API_KEY 由 SHAREit 服务对接人提供
- 我们强烈建议对接App需要WRITE_EXTERNAL_STORAGE权限,并且须按如下样例复写,此权限有利于提升广告收入
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:remove="android:maxSdkVersion" />
- 在打开app时主动调用申请SD卡权限逻辑,代码实例如下(方法内含有Id初始化相关策略,即使接入方自己申请了权限也需要调用此方法)
SHAREitAggregation.requestStoragePermissions();
如果接入SDK版本小于1.5.1.0版本可以使用如下方法
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
0);
}
如果您的应用以 Android 10 或更高版本为目标平台,即 android:targetSdkVersion="29",请在应用的清单文件中将 requestLegacyExternalStorage 的值设为 true:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
需要如此配置以使 sdk 在用户授权读写存储权限后能正常访问手机上的文件,否则会导致接入升级 sdk 功能时不能正常下载升级安装包。
在build.gradle中applicationId下方增加account_type、content_authority
defaultConfig {
applicationId “com.xx.xx”
//after define applicationId
resValue "string", "account_type", "${applicationId}.type"
resValue "string", "content_authority", "${applicationId}.provider"
}
解决bug: java.lang.NoClassDefFoundError com.ushareit.aggregationsdk.InitializeProvider
a. 在 app 层级创建一个名为 multidex-config.pro 的文件, 文件内容如下
-keep public class * extends android.content.ContentProvider
b. 在 app 层级的build.gradle文件中如下声明, 参考
android {
buildTypes {
release {
multiDexKeepProguard file('multidex-config.pro')
...
}
}
}