集成 ShiplyPro Android SDK
Shiply Android SDK支持配置开关/资源制品/热修复/升级等功能,ShiplyProSDK(shiplyintegration)提供了统一初始化入口。
一、隐私安全说明
Shiply专业版SDK
版本:1.0.0
更新时间:2025年4月23日
SDK介绍:为移动开发者提供动态下发配置开关、动态下发资源文件、应用内升级和在线热修复能力
服务提供方:深圳市腾讯计算机系统有限公司
接入指引:集成 ShiplyPro Android SDK
隐私保护规则:《Shiply专业版SDK个人信息保护规则》
二、 接入指引
2.1 配置 Maven 仓库
在项目根目录下的 build.gradle
中配置仓库地址:
allprojects {
repositories {
maven { url "https://tencent-tds-maven.pkg.coding.net/repository/shiply/repo" }
}
}
2.2 添加运行时 SDK
在主 module 的 build.gradle
中添加运行时 SDK 的依赖:
dependencies {
// ShiplyPro SDK,统一接入时必须依赖
implementation "com.tencent.shiply:shiplyintegration:$shiply_integration_version"
// Shiply 配置开关 SDK,使用配置开关时必须依赖
implementation "com.tencent.shiply:rdelivery:$rdelivery_version"
// Shiply 资源制品 SDK,使用资源制品时必须依赖
implementation "com.tencent.shiply:reshub-sdk:$reshub_version"
implementation "com.tencent.shiply:reshub-net:$reshub_version"
implementation "com.tencent.shiply:reshub-report:$reshub_version"
implementation "com.tencent.shiply:reshub-patch-sdk:$reshub_version"
// Shiply 应用内升级 SDK,使用应用内升级时必须依赖
implementation("com.tencent.shiply:upgrade:$upgrade_version")
implementation("com.tencent.shiply:upgrade-ui:$upgrade_version")
implementation("com.tencent.shiply:upgrade-diff-pkg-patch:$upgrade_version")
}
gradle.properties 中配置版本号
shiply_integration_version=1.0.0
rdelivery_version=1.3.38-RC01
reshub_version=1.8.22-RC01
upgrade_version=2.2.1
2.3. 初始化 SDK
建议在 Application.onCreate
方法中初始化 SDK:
public class InitUtil {
private static final String TAG = "InitUtil";
public static void initShiplySDK(Application application, RFixApplicationLike rFixApplicationLike) {
String appId = "22d6b1c95b"; // 在shiply前端页面申请的项目Android产品的appid
String appKey = "594725a2-6e41-4862-a085-a2a6f69dab64"; // 在shiply前端页面申请的项目Android产品的appkey
String bundleID = BuildConfig.APPLICATION_ID; // 宿主的 app 包名
boolean isDebugPackage = BuildConfig.DEBUG; // 宿主是否是debug包
ShiplyParams shiplyParams = new ShiplyParams.Builder()
.appId(appId)
.appKey(appKey)
.userId("123321")
.deviceId("deviceXXX")
.hostAppVersion(BuildConfig.VERSION_NAME) // 宿主的 app 版本
.isDebugPackage(isDebugPackage)
.devModel(Build.MODEL)
.devManufacturer(Build.MANUFACTURER)
.androidSystemVersion(String.valueOf(Build.VERSION.SDK_INT))
.logImpl(new CustomLogger()) // 自定义日志实现,建议对接到业务方自己的日志接口
.build();
// 初始化ShiplyPro SDK,统一接入时必须调用
ShiplyIntegrationHelper.INSTANCE.initialize(application, shiplyParams);
// 初始化配置开关SDK,使用配置开关时必须调用
ShiplyIntegrationHelper.INSTANCE.getRdeliveryInstance();
// 初始化资源制品SDK,使用资源制品时必须调用
ShiplyIntegrationHelper.INSTANCE.getReshubInstance();
// 初始化应用内升级SDK,使用应用内升级时必须调用
ShiplyIntegrationHelper.INSTANCE.initUpgrade(ShiplyIntegrationHelper.UpgradeDiffType.OriginPackage);
ShiplyIntegrationHelper.INSTANCE.getUpgradeInstance();
// 初始化热修复SDK,使用热修复时必须调用
if (rFixApplicationLike != null) {
ShiplyIntegrationHelper.INSTANCE.initRFix(rFixApplicationLike, new RFixListener() {
@Override
public void onConfig(boolean b, int i, PatchConfig patchConfig) {
Log.d(TAG, "onConfig : " + b + ", " + i);
}
@Override
public void onDownload(boolean b, int i, PatchConfig patchConfig, String s) {
Log.d(TAG, "onDownload : " + b + ", " + i + ", " + s);
}
@Override
public void onInstall(boolean b, int i, RFixPatchResult rFixPatchResult) {
Log.d(TAG, "onInstall : " + b + ", " + i);
}
});
ShiplyIntegrationHelper.INSTANCE.getRFixInstance();
}
}
// 自定义日志实现,建议对接到业务方自己的日志接口
public static class CustomLogger extends AbsLog {
@Override
public void log(String tag, Level logLevel, String msg) {
String newTag = "ShiplyDemo_" + tag;
if (logLevel == Level.VERBOSE) {
Log.v(newTag, msg != null ? msg : "");
} else if (logLevel == Level.DEBUG) {
Log.d(newTag, msg != null ? msg : "");
} else if (logLevel == Level.INFO) {
Log.i(newTag, msg != null ? msg : "");
} else if (logLevel == Level.WARN) {
Log.w(newTag, msg != null ? msg : "");
} else if (logLevel == Level.ERROR) {
Log.e(newTag, msg != null ? msg : "");
}
}
@Override
public void log(String tag, Level logLevel, String msg, Throwable throwable) {
String newTag = "ShiplyDemo_" + tag;
if (logLevel == Level.VERBOSE) {
Log.v(newTag, msg, throwable);
} else if (logLevel == Level.DEBUG) {
Log.d(newTag, msg, throwable);
} else if (logLevel == Level.INFO) {
Log.i(newTag, msg, throwable);
} else if (logLevel == Level.WARN) {
Log.w(newTag, msg, throwable);
} else if (logLevel == Level.ERROR) {
Log.e(newTag, msg, throwable);
}
}
}
}
三、使用配置发布
3.1 获取SDK实例
RDelivery rDelivery = ShiplyIntegrationHelper.INSTANCE.getRdeliveryInstance();
3.2 获取配置值
当远端不存在这个配置开关key,或未拉到该配置,或web上未设置该key的配置值时,会返回 defaultValue。
String configSwitchName = "testName";
String defaultValue = "";
String configValue = rDelivery.getStringByKey(configSwitchName, defaultValue, true);
3.3 获取开关值
当远端不存在这个配置开关key,或未拉到该配置,或者web上该key的开关值为「未设置」时,会返回 defaultValue。
String configSwitchName = "testName";
boolean defaultValue = false;
boolean switchValue = rDelivery.isOnByKey(configSwitchName, defaultValue, true);
3.4 获取配置对象(RDeliveryData)
RDeliveryData defaultConfigSwitchData = null;
RDeliveryData configSwitchData = rDelivery.getRDeliveryDataByKey(configSwitchName, defaultConfigSwitchData, true);
3.5 更多用法
参考:使用配置和开关
四、使用资源发布
4.1 获取SDK实例
IResHub reshub = ShiplyIntegrationHelper.INSTANCE.getReshubInstance();
4.2 下载指定资源
reshub.loadLatest(resId, new IResCallback() {
@Override
public void onComplete(boolean isSuccess, IRes result, IResLoadError error) {
if (isSuccess) {
Log.d("ResHubLoad", "资源拉取成功");
} else {
Log.e("ResHubLoad", "异步最新资源拉取失败");
}
}
});
4.3 读取下载到本地的资源
IRes res = reshub.getLatest(resId);
4.4 更多用法
参考:使用资源发布 SDK
五、使用应用内升级
5.1 获取SDK实例
UpgradeManager upgradeManager = ShiplyIntegrationHelper.INSTANCE.getUpgradeInstance();
5.2 检查更新
upgradeManager.checkUpgrade(false, null, new DefaultUpgradeStrategyRequestCallback());
5.3 更多用法
参考:使用应用内升级 SDK
六、使用热修复
热修SDK接入比较复杂,具体可以参考:使用热修复 SDK,使用ShiplyPro集成时,不用再创建RFixParams
,
需要将热修接入说明2.3中的RFixInitializer.initialize
替换为
ShiplyIntegrationHelper.INSTANCE.initRFix(rFixApplicationLike, new RFixListener() {
@Override
public void onConfig(boolean b, int i, PatchConfig patchConfig) {
Log.d(TAG, "onConfig : " + b + ", " + i);
}
@Override
public void onDownload(boolean b, int i, PatchConfig patchConfig, String s) {
Log.d(TAG, "onDownload : " + b + ", " + i + ", " + s);
}
@Override
public void onInstall(boolean b, int i, RFixPatchResult rFixPatchResult) {
Log.d(TAG, "onInstall : " + b + ", " + i);
}
});
ShiplyIntegrationHelper.INSTANCE.getRFixInstance();
七、ShiplyPro示例应用
ShiplyPro示例应用提供了使用ShiplyPro SDK的示例代码,您可以通过示例代码了解如何使用ShiplyPro SDK。