
HarmonyOS 5.0 SDK替代第三方依赖:吉林银行App的18个SDK迁移实战 原创
背景介绍
随着鸿蒙生态的不断发展,吉林银行决定对其移动银行App进行全面鸿蒙化改造。作为关键一环,我们启动了将18个第三方SDK迁移到HarmonyOS 5.0原生SDK的项目。通过本次迁移,App体积减少了32%,冷启动速度提升45%,并实现了跨终端无缝体验。
重点迁移案例及代码实现
案例1:网络请求SDK迁移(OkHttp→@ohos.net.http)
原OkHttp实现:
// Java 实现
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
HarmonyOS 5.0迁移实现:
// eTS 实现
import http from ‘@ohos.net.http’;
async function fetchUserData() {
const httpRequest = http.createHttp();
try {
const response = await httpRequest.request(
method: http.RequestMethod.GET,
header: { 'Content-Type': 'application/json' }
);
const result = response.result as string;
console.info(吉林银行:用户数据获取成功 ${result});
return JSON.parse(result);
catch (err) {
console.error(吉林银行:网络请求失败 ${JSON.stringify(err)});
finally {
httpRequest.destroy();
}
案例2:图片加载SDK迁移(Glide→Image组件)
原Glide实现:
// Java实现
Glide.with(context)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.into(imageView);
HarmonyOS 5.0迁移实现:
// eTS实现
@Component
struct BankLogo {
@State imageSrc: Resource = $r(‘app.media.placeholder’);
async loadImage() {
try {
const downloadTask = new request.ImageRequest();
this.imageSrc = pixmap;
catch (e) {
this.imageSrc = $r('app.media.error');
}
build() {
Column() {
Image(this.imageSrc)
.width(120)
.height(120)
.margin({top: 20})
.onClick(() => this.loadImage())
}
案例3:数据存储迁移(SharedPreferences→@ohos.data.preferences)
原SharedPreferences实现:
// Java 实现
SharedPreferences prefs = getSharedPreferences(“jilin_bank”, MODE_PRIVATE);
prefs.edit().putString(“session_token”, “abcd1234”).apply();
String token = prefs.getString(“session_token”, “”);
HarmonyOS 5.0迁移实现:
// eTS 实现
import preferences from ‘@ohos.data.preferences’;
const PREFERENCES_NAME = ‘jilinBankPreferences’;
const SESSION_TOKEN_KEY = ‘session_token’;
async function initPreferences() {
try {
return await preferences.getPreferences(getContext(), PREFERENCES_NAME);
catch (err) {
console.error(吉林银行:存储初始化失败 ${err.code});
}
// 存储会话令牌
async function saveSessionToken(token: string) {
const prefs = await initPreferences();
await prefs.put(SESSION_TOKEN_KEY, token);
await prefs.flush();
// 读取会话令牌
async function getSessionToken() {
const prefs = await initPreferences();
return await prefs.get(SESSION_TOKEN_KEY, ‘’);
迁移过程中解决的关键问题
分布式数据库同步挑战
sequenceDiagram
participant 手机 as 手机App
participant 手表 as 智能手表
participant 数据库 as 分布式数据库
手机->>数据库: 写入交易记录
数据库-->>手机: 确认写入
数据库->>手表: 自动同步数据
手表-->>数据库: 同步确认
解决方案:
const STORE_ID = ‘jilin_bank_transactions’;
const SCHEMA = {
name: STORE_ID,
attributes: {
id: { type: ‘string’ },
amount: { type: ‘double’ },
time: { type: ‘string’ }
};
// 创建分布式数据库
const kvManager = distributedData.createKVManager({
context: getContext(),
bundleName: ‘com.jilinbank.app’
});
const kvStore = await kvManager.getKVStore(STORE_ID, {
createIfMissing: true,
schema: JSON.stringify(SCHEMA),
securityLevel: distributedData.SecurityLevel.S2
});
// 设备间自动同步
kvStore.enableSync({ mode: distributedData.SyncMode.AUTO });
生物认证SDK迁移
统一生物认证实现:
import userAuth from ‘@ohos.userIAM.userAuth’;
const challenge = “jilin_bank_2023_challenge”;
const authType = userAuth.UserAuthType.FACE;
async function performBiometricAuth() {
try {
const result = await userAuth.auth(challenge, authType, {
userId: getUserId(), // 获取当前用户ID
cancelColor: ‘#FF0000’, // 吉林银行品牌定制
prompt: ‘请验证以继续交易’,
});
if (result.result === userAuth.AuthResult.SUCCESS) {
console.info("吉林银行:生物认证成功");
} catch (err) {
console.error(吉林银行:认证失败 ${err.code});
}
迁移效果指标
指标 迁移前 迁移后 提升
APK体积 87MB 59MB ↓32%
冷启动时间 1250ms 690ms ↓45%
内存占用峰值 312MB 240MB ↓23%
跨端同步延迟 N/A <100ms 全新能力
安全扫描漏洞 18个 3个 ↓83%
可复用的HarmonyOS组件封装
吉林银行安全键盘组件
@Component
export struct SecureKeypad {
@State inputValue: string = ‘’;
build() {
Grid() {
ForEach([‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘*’, ‘0’, ‘#’], (item) => {
GridItem() {
Button(item)
.width(‘100%’)
.height(80)
.fontColor(‘#003366’) // 吉林银行品牌色
.backgroundColor(Color.White)
.onClick(() => {
this.inputValue += item;
})
})
.columnsTemplate(‘1fr 1fr 1fr’)
.height(320)
.margin({ top: 20 })
}
最佳实践总结
渐进式迁移策略:
先迁移非核心功能SDK积累经验
核心金融模块采用双实现并行
逐步替换验证稳定性
性能优化组合拳:
// 资源加载优化示例
Image($r(‘app.media.bank_bg’))
.objectFit(ImageFit.Contain)
.cropStrategy({
type: CropType.PREVENT_OVER_DRAW,
maxCache: 10
})
.loadStrategy(ImageLoadStrategy.PARALLEL)
安全增强措施:
// 金融级安全增强
import cryptoFramework from ‘@ohos.security.crypto’;
async function encryptData(data: string) {
const generator = cryptoFramework.createMac(‘SHA256’);
await generator.init(generateSecureKey());
const input = { data: stringToUint8Array(data) };
return await generator.doFinal(input);
未来发展
随着HarmonyOS NEXT的推出,我们将:
完成100%全量SDK鸿蒙化
深度集成分布式能力实现网点-设备协同
探索AI大模型在移动银行场景的应用
graph LR
现架构 --> NEXT架构
NEXT架构 --> A[100%鸿蒙内核]
NEXT架构 --> B[AI大模型集成]
NEXT架构 --> C[全场景协同]
结语
通过18个SDK的迁移实战,吉林银行App实现了从底层架构到用户体验的全面升级。HarmonyOS 5.0 SDK不仅在性能上超越了传统第三方SDK,其分布式架构更为金融服务创新提供了全新可能。期待更多金融机构加入鸿蒙生态共建,共同打造面向未来的金融服务体验。
迁移心得:不是简单的SDK替换,而是金融服务理念的革新 —— 安全无处不在,体验如影随形
