Skip to main content

集成 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。

ShiplyPro示例应用