react-native-idosdk 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +56 -68
- package/android/build.gradle +11 -14
- package/android/src/main/AndroidManifest.xml +11 -3
- package/android/src/main/java/com/getui/{reactnativegetui → reactnativeido}/GetuiIdoModule.java +7 -3
- package/android/src/main/java/com/getui/{reactnativegetui → reactnativeido}/GetuiIdoPackage.java +1 -1
- package/android/src/main/java/com/getui/{reactnativegetui → reactnativeido}/GetuiLogger.java +1 -1
- package/docs/superpowers/plans/2026-07-13-android-getui-maven-dependencies.md +323 -0
- package/docs/superpowers/specs/2026-07-13-android-getui-maven-dependencies-design.md +96 -0
- package/document/android.md +48 -112
- package/document/iOS.md +31 -283
- package/package.json +4 -1
- package/react-native-harmony-ido/README.md +266 -0
- package/react-native-harmony-ido/gt-ido-ohos-plugin-1.0.1.tgz +0 -0
- package/react-native-harmony-ido/harmony/BuildProfile.ets +17 -0
- package/react-native-harmony-ido/harmony/IdoOhosSdk.har +0 -0
- package/react-native-harmony-ido/harmony/Index.ets +1 -0
- package/react-native-harmony-ido/harmony/build-profile.json5 +36 -0
- package/react-native-harmony-ido/harmony/consumer-rules.txt +0 -0
- package/react-native-harmony-ido/harmony/hvigorfile.ts +6 -0
- package/react-native-harmony-ido/harmony/libs/getui_ido_1.0.1.har +0 -0
- package/react-native-harmony-ido/harmony/obfuscation-rules.txt +23 -0
- package/react-native-harmony-ido/harmony/oh-package-lock.json5 +38 -0
- package/react-native-harmony-ido/harmony/oh-package.json5 +12 -0
- package/react-native-harmony-ido/harmony/src/main/cpp/CMakeLists.txt +7 -0
- package/react-native-harmony-ido/harmony/src/main/cpp/IdoModule.cpp +38 -0
- package/react-native-harmony-ido/harmony/src/main/cpp/IdoModule.h +21 -0
- package/react-native-harmony-ido/harmony/src/main/cpp/IdoPackage.h +76 -0
- package/react-native-harmony-ido/harmony/src/main/ets/IdoModule.ets +150 -0
- package/react-native-harmony-ido/harmony/src/main/ets/IdoPackage.ets +24 -0
- package/react-native-harmony-ido/harmony/src/main/module.json5 +9 -0
- package/react-native-harmony-ido/harmony/src/main/resources/base/element/float.json +8 -0
- package/react-native-harmony-ido/harmony/src/main/resources/base/element/string.json +8 -0
- package/react-native-harmony-ido/harmony/ts.ets +2 -0
- package/react-native-harmony-ido/index.ts +4 -0
- package/react-native-harmony-ido/package.json +35 -0
- package/react-native-harmony-ido/src/specs/v1/NativeIdo.ts +44 -0
- package/android/libs/gs-1.4.12.0.jar +0 -0
- package/android/libs/gtc-3.2.18.0.jar +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
本文档记录 `react-native-idosdk` 的版本变更。从 `1.0.6` 开始维护。
|
|
4
|
+
|
|
5
|
+
## [1.0.6] - 2026-07-13
|
|
6
|
+
|
|
7
|
+
### 变更
|
|
8
|
+
|
|
9
|
+
- Android 原生模块包名调整为 `com.getui.reactnativeido`。
|
|
10
|
+
- Android 依赖由随包 JAR 迁移至个推 Maven 仓库,使用 `gsido 1.4.14.0` 与 `gtc 3.3.3.0`。
|
|
11
|
+
- 调整 Android Manifest 合并规则,保留应用侧配置的 `GETUI_APPID`、`GT_INSTALL_CHANNEL` 和 `GTSDK_VERSION`。
|
|
12
|
+
- AndroidDemo 改为直接引用当前插件工程,并补充 `GT_INSTALL_CHANNEL` 配置,便于联调 `1.0.6`。
|
|
13
|
+
- 更新 React Native、Android、iOS 和 HarmonyOS 集成文档,移除旧推送插件的配置和 API 说明。
|
|
14
|
+
|
|
15
|
+
### 兼容性
|
|
16
|
+
|
|
17
|
+
- Android 最低 `minSdkVersion` 为 `23`。
|
|
18
|
+
- iOS 最低部署版本为 `12.0`。
|
package/README.md
CHANGED
|
@@ -1,104 +1,92 @@
|
|
|
1
|
-
|
|
2
1
|
# react-native-idosdk
|
|
3
|
-
* idosdk 是个推官方开发的 IDOSDK React Native 插件,使用该插件可以方便快速地集成推送功能。
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# 环境
|
|
7
|
-
|
|
8
|
-
1. React Native Version
|
|
9
|
-
"react": "18.3.1"
|
|
10
|
-
"react-native": "0.75.4"
|
|
11
|
-
2. 当前react-native-idosdk版本 1.0.4
|
|
12
2
|
|
|
3
|
+
个推 IDOSDK 的 React Native 插件,用于接入运营统计、事件采集和用户画像能力。
|
|
13
4
|
|
|
14
|
-
|
|
5
|
+
当前版本:`1.0.6`。
|
|
15
6
|
|
|
16
|
-
|
|
7
|
+
## 安装
|
|
17
8
|
|
|
18
|
-
|
|
9
|
+
在 React Native 项目根目录执行:
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
```sh
|
|
12
|
+
npm install react-native-idosdk@1.0.6 --save
|
|
13
|
+
```
|
|
23
14
|
|
|
15
|
+
React Native 0.60 及以上项目会自动链接原生模块。iOS 项目还需要安装 Pods:
|
|
24
16
|
|
|
25
|
-
|
|
17
|
+
```sh
|
|
26
18
|
npx pod-install
|
|
19
|
+
```
|
|
27
20
|
|
|
21
|
+
Android 示例工程使用 React `19.0.0` 和 React Native `0.79.1`。请按项目所用 React Native 版本完成原生环境配置。
|
|
28
22
|
|
|
29
|
-
|
|
30
|
-
react-native link
|
|
31
|
-
````
|
|
23
|
+
## 配置
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
*[AndroidDemo](example/AndroidDemo)
|
|
36
|
-
*[iOSDemo](example/iOSDemo)
|
|
25
|
+
应用 AppID 请在[个推开发者中心](https://dev.getui.com)创建应用后获取。
|
|
37
26
|
|
|
38
|
-
|
|
27
|
+
### Android
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
在 `android/app/src/main/AndroidManifest.xml` 的 `<application>` 节点内配置 AppID 和安装渠道:
|
|
41
30
|
|
|
31
|
+
```xml
|
|
32
|
+
<meta-data android:name="GETUI_APPID" android:value="你的 AppID" />
|
|
33
|
+
<meta-data android:name="GT_INSTALL_CHANNEL" android:value="" />
|
|
34
|
+
```
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
* AndroidManifest.xml中添加配置
|
|
45
|
-
````xml
|
|
46
|
-
<manifest>
|
|
47
|
-
<application>
|
|
48
|
-
<meta-data android:name="GETUI_APPID" android:value="你的appid"/>
|
|
49
|
-
<meta-data android:name="GT_INSTALL_CHANNEL" android:value=""/>
|
|
50
|
-
</application>
|
|
51
|
-
</manifest>
|
|
52
|
-
````
|
|
53
|
-
* 如果开启混淆
|
|
54
|
-
````proguard
|
|
55
|
-
-keep class com.getui.gs.** { *; }
|
|
56
|
-
-keep class com.getui.gtc.** {*;}
|
|
57
|
-
````
|
|
58
|
-
|
|
59
|
-
## 2.2 IOS
|
|
60
|
-
|
|
36
|
+
插件已声明 IDOSDK 所需的原生依赖、权限和组件。无需添加 `react-native-getui`、`PUSH_APPKEY` 或 `PUSH_APPSECRET` 等旧推送插件配置。详细说明见[Android 集成文档](document/android.md)。
|
|
61
37
|
|
|
62
|
-
###
|
|
38
|
+
### iOS
|
|
63
39
|
|
|
64
|
-
|
|
40
|
+
使用 Autolinking 时只需执行 `npx pod-install`。旧项目如未启用 Autolinking,可在目标 target 的 `Podfile` 中加入:
|
|
65
41
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
1. 在Podfile中添加如下代码(需要写在对应的 target 里):
|
|
69
|
-
|
|
70
|
-
````
|
|
42
|
+
```ruby
|
|
71
43
|
pod 'IdoSdkRN', :path => '../node_modules/react-native-idosdk'
|
|
44
|
+
```
|
|
72
45
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
2. 终端执行如下命令:
|
|
76
|
-
|
|
77
|
-
````
|
|
78
|
-
pod install
|
|
46
|
+
然后执行 `pod install`。IDOSDK 不需要在 `AppDelegate` 中注册推送、DeviceToken 或 VoIP;初始化请在 JavaScript 中调用 `startSdk`。详细说明见[iOS 集成文档](document/iOS.md)。
|
|
79
47
|
|
|
80
|
-
|
|
48
|
+
### HarmonyOS
|
|
81
49
|
|
|
82
|
-
|
|
50
|
+
HarmonyOS 当前需要手动 Link,完整流程见[鸿蒙文档](react-native-harmony-ido/README.md)。
|
|
83
51
|
|
|
84
|
-
|
|
52
|
+
## JavaScript 使用
|
|
85
53
|
|
|
86
|
-
|
|
54
|
+
在调用其他接口前先配置可选项并初始化 SDK。`gtcid` 在初始化完成前可能为空,可在业务侧稍后再次读取。
|
|
87
55
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
```
|
|
56
|
+
```ts
|
|
57
|
+
import GetuiIdo from 'react-native-idosdk';
|
|
91
58
|
|
|
59
|
+
const appId = '你的 AppID';
|
|
60
|
+
const channel = 'rn';
|
|
92
61
|
|
|
93
|
-
|
|
62
|
+
GetuiIdo.setDebugEnable(__DEV__);
|
|
63
|
+
GetuiIdo.setSessionTime(30_000);
|
|
64
|
+
GetuiIdo.setMinAppActiveDuration(60_000);
|
|
65
|
+
GetuiIdo.setMaxAppActiveDuration(3_600_000);
|
|
94
66
|
|
|
95
|
-
|
|
67
|
+
GetuiIdo.startSdk(appId, channel);
|
|
96
68
|
|
|
97
|
-
|
|
69
|
+
GetuiIdo.version((version) => {
|
|
70
|
+
console.log('IDOSDK version:', version);
|
|
71
|
+
});
|
|
98
72
|
|
|
73
|
+
GetuiIdo.gtcid((id) => {
|
|
74
|
+
console.log('gtcid:', id);
|
|
75
|
+
});
|
|
99
76
|
|
|
77
|
+
GetuiIdo.trackCountEvent('purchase', { sku: 'example', amount: 1 }, '');
|
|
78
|
+
GetuiIdo.setProfile({ memberLevel: 'gold' }, '');
|
|
79
|
+
```
|
|
100
80
|
|
|
81
|
+
时间类配置的单位均为毫秒。支持的接口包括:
|
|
101
82
|
|
|
102
|
-
|
|
83
|
+
- 初始化与查询:`startSdk`、`gtcid`、`version`、`setDebugEnable`
|
|
84
|
+
- 会话与上传:`setSessionTime`、`setMinAppActiveDuration`、`setMaxAppActiveDuration`、`setEventUploadInterval`、`setEventForceUploadSize`、`setProfileUploadInterval`、`setProfileForceUploadSize`
|
|
85
|
+
- 用户与事件:`setUserId`、`registerEventProperties`、`trackCustomKeyValueEventBegin`、`trackCustomKeyValueEventEnd`、`trackCountEvent`、`setProfile`
|
|
86
|
+
- 平台差异:`setApplicationGroupIdentifier` 仅 iOS 生效;`setSyncGenerateGtcid` 和 `registerEventProperties` 暂未在 HarmonyOS 插件中提供。
|
|
103
87
|
|
|
88
|
+
## 示例工程
|
|
104
89
|
|
|
90
|
+
- [AndroidDemo](example/AndroidDemo)
|
|
91
|
+
- [iOSDemo](example/iOSDemo)
|
|
92
|
+
- [OhosDemo](example/OhosDemo)
|
package/android/build.gradle
CHANGED
|
@@ -7,7 +7,7 @@ def safeExtGet(prop, fallback) {
|
|
|
7
7
|
android {
|
|
8
8
|
compileSdkVersion safeExtGet('compileSdkVersion', 34)
|
|
9
9
|
|
|
10
|
-
namespace 'com.getui.
|
|
10
|
+
namespace 'com.getui.reactnativeido'
|
|
11
11
|
|
|
12
12
|
defaultConfig {
|
|
13
13
|
minSdkVersion safeExtGet('minSdkVersion', 23)
|
|
@@ -17,10 +17,15 @@ android {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
rootProject.allprojects {
|
|
21
|
+
repositories {
|
|
22
|
+
maven {
|
|
23
|
+
url "https://mvn.getui.com/nexus/content/repositories/releases/"
|
|
24
|
+
}
|
|
23
25
|
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
repositories {
|
|
24
29
|
maven { url 'https://maven.aliyun.com/repository/google' }
|
|
25
30
|
maven { url 'https://maven.aliyun.com/repository/public' }
|
|
26
31
|
mavenLocal()
|
|
@@ -42,16 +47,8 @@ repositories {
|
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
dependencies {
|
|
45
|
-
implementation fileTree(dir: "libs", include: ["*.jar"])
|
|
46
50
|
implementation "com.facebook.react:react-native:+" // From node_modules
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// implementation 'com.getui.opt:hwp:3.1.2' // 华为
|
|
50
|
-
// implementation 'com.getui.opt:xmp:3.3.3' // 小米
|
|
51
|
-
// implementation 'com.assist-v3:oppo:3.5.0' // oppo
|
|
52
|
-
// implementation 'com.assist-v3:vivo:3.2.0' // vivo
|
|
53
|
-
// implementation 'com.getui.opt:mzp:3.2.4' // 魅族
|
|
54
|
-
// implementation 'com.getui.opt:ups:3.0.3' // ups,ups目前支持坚果,索尼,海信手机
|
|
55
|
-
// implementation 'com.getui.opt:honor:3.6.0' // 荣耀
|
|
51
|
+
implementation 'com.getui:gsido:1.4.14.0'
|
|
52
|
+
implementation 'com.getui:gtc:3.3.3.0'
|
|
56
53
|
|
|
57
54
|
}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
xmlns:tools="http://schemas.android.com/tools"
|
|
2
3
|
>
|
|
3
4
|
|
|
4
|
-
<uses-sdk
|
|
5
|
-
android:minSdkVersion="14"
|
|
6
|
-
android:targetSdkVersion="30" />
|
|
7
5
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
8
6
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
9
7
|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
|
10
8
|
|
|
11
9
|
<application>
|
|
10
|
+
<meta-data
|
|
11
|
+
android:name="GETUI_APPID"
|
|
12
|
+
tools:node="remove" />
|
|
13
|
+
<meta-data
|
|
14
|
+
android:name="GT_INSTALL_CHANNEL"
|
|
15
|
+
tools:node="remove" />
|
|
16
|
+
<meta-data
|
|
17
|
+
android:name="GTSDK_VERSION"
|
|
18
|
+
tools:node="remove" />
|
|
19
|
+
|
|
12
20
|
<service
|
|
13
21
|
android:name="com.getui.gtc.GtcService"
|
|
14
22
|
android:exported="false" >
|
package/android/src/main/java/com/getui/{reactnativegetui → reactnativeido}/GetuiIdoModule.java
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.getui.
|
|
1
|
+
package com.getui.reactnativeido;
|
|
2
2
|
|
|
3
3
|
import android.content.Context;
|
|
4
4
|
import com.facebook.react.bridge.Arguments;
|
|
@@ -43,9 +43,13 @@ public class GetuiIdoModule extends ReactContextBaseJavaModule {
|
|
|
43
43
|
@ReactMethod
|
|
44
44
|
public void startSdk(String appid, String channel) {
|
|
45
45
|
// 设置AppId
|
|
46
|
-
if (!TextUtils.isEmpty(appid)){
|
|
46
|
+
if (!TextUtils.isEmpty(appid)) {
|
|
47
47
|
GsConfig.setAppId(appid);
|
|
48
48
|
}
|
|
49
|
+
// 设置安装渠道
|
|
50
|
+
if (!TextUtils.isEmpty(channel)) {
|
|
51
|
+
GsConfig.setInstallChannel(channel);
|
|
52
|
+
}
|
|
49
53
|
// 预初始化
|
|
50
54
|
GsManager.getInstance().preInit(mContext);
|
|
51
55
|
// 初始化并注册gtcid
|
|
@@ -234,4 +238,4 @@ public class GetuiIdoModule extends ReactContextBaseJavaModule {
|
|
|
234
238
|
.emit(eventName, params);
|
|
235
239
|
}
|
|
236
240
|
|
|
237
|
-
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
# Android 个推 Maven 依赖迁移实施计划
|
|
2
|
+
|
|
3
|
+
> **面向执行代理:** 必须使用 `superpowers:subagent-driven-development`(推荐)或 `superpowers:executing-plans`,逐项执行本计划。所有步骤使用复选框跟踪状态。
|
|
4
|
+
|
|
5
|
+
**目标:** 将 RN Android 插件的个推本地 JAR 替换为 `gsido:1.4.14.0` 和 `gtc:3.3.3.0` Maven 依赖,并保留通过 `startSdk(appid, channel)` 运行时配置 SDK 的能力。
|
|
6
|
+
|
|
7
|
+
**架构:** Maven AAR 负责提供用户运营 SDK、GTC 核心类和默认 Manifest 权限及组件;RN Bridge 继续负责在初始化前写入 App ID 与渠道。插件将个推仓库加入根项目的所有项目,并在 Manifest 合并时移除 AAR 的静态 App ID 与渠道元数据,使宿主应用无需为了运行时初始化而额外声明占位符。
|
|
8
|
+
|
|
9
|
+
**技术栈:** Gradle 8.13、Android Gradle Plugin、React Native 0.79.1、Java、个推 `gsido:1.4.14.0`、个推 `gtc:3.3.3.0`
|
|
10
|
+
|
|
11
|
+
## 全局约束
|
|
12
|
+
|
|
13
|
+
- 只修改 Android RN 插件,不改 iOS 和 HarmonyOS 依赖。
|
|
14
|
+
- 必须删除 `android/libs/gs-1.4.12.0.jar` 和 `android/libs/gtc-3.2.18.0.jar`,避免重复类。
|
|
15
|
+
- 必须保留 `gsido` AAR 默认声明的全部权限和 `android:usesCleartextTraffic="true"`。
|
|
16
|
+
- JavaScript API 和 `startSdk(String appid, String channel)` 签名保持不变。
|
|
17
|
+
- 不覆盖或提交仓库中现有的包名迁移、示例应用及其他无关改动。
|
|
18
|
+
- `android/build.gradle` 和新的 `GetuiIdoModule.java` 已包含用户改动,实施阶段
|
|
19
|
+
不自动提交生产文件,避免把不同工作混入同一提交。
|
|
20
|
+
|
|
21
|
+
## 文件结构
|
|
22
|
+
|
|
23
|
+
- 修改 `android/build.gradle`:向根项目注入个推仓库、声明 Maven 依赖并移除本地 JAR `fileTree`。
|
|
24
|
+
- 删除 `android/libs/gs-1.4.12.0.jar`:移除旧用户运营 SDK。
|
|
25
|
+
- 删除 `android/libs/gtc-3.2.18.0.jar`:移除旧 GTC 核心 SDK。
|
|
26
|
+
- 修改 `android/src/main/AndroidManifest.xml`:移除 AAR 的静态 App ID 和渠道元数据。
|
|
27
|
+
- 修改 `android/src/main/java/com/getui/reactnativeido/GetuiIdoModule.java`:在 SDK 预初始化前应用非空渠道参数。
|
|
28
|
+
- 不新增业务源文件或测试框架。
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### 任务 1:迁移 Gradle 依赖并配置宿主仓库
|
|
33
|
+
|
|
34
|
+
**文件:**
|
|
35
|
+
|
|
36
|
+
- 修改:`android/build.gradle:12-17`
|
|
37
|
+
- 修改:`android/build.gradle:44-47`
|
|
38
|
+
- 修改:`android/src/main/AndroidManifest.xml`
|
|
39
|
+
- 删除:`android/libs/gs-1.4.12.0.jar`
|
|
40
|
+
- 删除:`android/libs/gtc-3.2.18.0.jar`
|
|
41
|
+
|
|
42
|
+
**接口:**
|
|
43
|
+
|
|
44
|
+
- 输入:个推 Releases Maven 仓库 `https://mvn.getui.com/nexus/content/repositories/releases/`
|
|
45
|
+
- 输出:插件 `debugCompileClasspath` 和 `debugRuntimeClasspath` 中的 `com.getui:gsido:1.4.14.0`、`com.getui:gtc:3.3.3.0`
|
|
46
|
+
|
|
47
|
+
- [ ] **步骤 1:运行迁移前依赖断言,确认测试失败**
|
|
48
|
+
|
|
49
|
+
运行:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
cd /Users/yangsihao/Downloads/AndroidStudioProjects/plugins/rn/ido/react-native-idosdk
|
|
53
|
+
test ! -f android/libs/gs-1.4.12.0.jar \
|
|
54
|
+
&& test ! -f android/libs/gtc-3.2.18.0.jar \
|
|
55
|
+
&& ! rg -n 'implementation fileTree' android/build.gradle \
|
|
56
|
+
&& rg -n "implementation 'com.getui:gsido:1.4.14.0'" android/build.gradle \
|
|
57
|
+
&& rg -n "implementation 'com.getui:gtc:3.3.3.0'" android/build.gradle
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
预期:命令返回非零状态,因为旧 JAR 和 `fileTree` 仍存在,两个 Maven 依赖尚未声明。
|
|
61
|
+
|
|
62
|
+
- [ ] **步骤 2:将个推仓库添加到根项目**
|
|
63
|
+
|
|
64
|
+
在 `android/build.gradle` 中添加:
|
|
65
|
+
|
|
66
|
+
```gradle
|
|
67
|
+
rootProject.allprojects {
|
|
68
|
+
repositories {
|
|
69
|
+
maven {
|
|
70
|
+
url "https://mvn.getui.com/nexus/content/repositories/releases/"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- [ ] **步骤 3:移除 AAR 的静态配置元数据**
|
|
77
|
+
|
|
78
|
+
在插件 Manifest 中声明 `tools` 命名空间,并在 `<application>` 内添加:
|
|
79
|
+
|
|
80
|
+
```xml
|
|
81
|
+
<meta-data
|
|
82
|
+
android:name="GETUI_APPID"
|
|
83
|
+
tools:node="remove" />
|
|
84
|
+
<meta-data
|
|
85
|
+
android:name="GT_INSTALL_CHANNEL"
|
|
86
|
+
tools:node="remove" />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- [ ] **步骤 4:替换本地 JAR 依赖**
|
|
90
|
+
|
|
91
|
+
将 `android/build.gradle` 的依赖块开头修改为:
|
|
92
|
+
|
|
93
|
+
```gradle
|
|
94
|
+
dependencies {
|
|
95
|
+
implementation "com.facebook.react:react-native:+" // From node_modules
|
|
96
|
+
implementation 'com.getui:gsido:1.4.14.0'
|
|
97
|
+
implementation 'com.getui:gtc:3.3.3.0'
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
删除以下声明:
|
|
101
|
+
|
|
102
|
+
```gradle
|
|
103
|
+
implementation fileTree(dir: "libs", include: ["*.jar"])
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- [ ] **步骤 5:删除旧 JAR 文件**
|
|
107
|
+
|
|
108
|
+
运行:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
rm android/libs/gs-1.4.12.0.jar android/libs/gtc-3.2.18.0.jar
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
预期:`android/libs` 中不再存在 `.jar` 文件。
|
|
115
|
+
|
|
116
|
+
- [ ] **步骤 6:重新运行依赖断言,确认测试通过**
|
|
117
|
+
|
|
118
|
+
运行:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
test ! -f android/libs/gs-1.4.12.0.jar \
|
|
122
|
+
&& test ! -f android/libs/gtc-3.2.18.0.jar \
|
|
123
|
+
&& ! rg -n 'implementation fileTree' android/build.gradle \
|
|
124
|
+
&& rg -n "implementation 'com.getui:gsido:1.4.14.0'" android/build.gradle \
|
|
125
|
+
&& rg -n "implementation 'com.getui:gtc:3.3.3.0'" android/build.gradle \
|
|
126
|
+
&& rg -n 'rootProject\.allprojects' android/build.gradle \
|
|
127
|
+
&& rg -n 'tools:node="remove"' android/src/main/AndroidManifest.xml
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
预期:命令返回零状态,并打印两个 Maven 坐标、根项目仓库声明和元数据移除规则。
|
|
131
|
+
|
|
132
|
+
- [ ] **步骤 7:验证插件依赖解析**
|
|
133
|
+
|
|
134
|
+
运行:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
cd example/AndroidDemo/android
|
|
138
|
+
./gradlew :react-native-idosdk:dependencies --configuration debugRuntimeClasspath
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
预期:`BUILD SUCCESSFUL`,依赖树包含:
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
com.getui:gsido:1.4.14.0
|
|
145
|
+
com.getui:gtc:3.3.3.0
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- [ ] **步骤 8:检查任务 1 的限定差异**
|
|
149
|
+
|
|
150
|
+
运行:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
git diff --check -- android/build.gradle \
|
|
154
|
+
android/libs/gs-1.4.12.0.jar \
|
|
155
|
+
android/libs/gtc-3.2.18.0.jar
|
|
156
|
+
git diff -- android/build.gradle
|
|
157
|
+
git diff --stat -- android/libs/gs-1.4.12.0.jar \
|
|
158
|
+
android/libs/gtc-3.2.18.0.jar
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
预期:差异检查无空白错误;Gradle 差异包含已有 namespace 调整以及本任务的
|
|
162
|
+
占位符和依赖修改;两个 JAR 显示为删除。本步骤不创建提交。
|
|
163
|
+
|
|
164
|
+
### 任务 2:在运行时初始化中应用安装渠道
|
|
165
|
+
|
|
166
|
+
**文件:**
|
|
167
|
+
|
|
168
|
+
- 修改:`android/src/main/java/com/getui/reactnativeido/GetuiIdoModule.java:44-54`
|
|
169
|
+
|
|
170
|
+
**接口:**
|
|
171
|
+
|
|
172
|
+
- 输入:`startSdk(String appid, String channel)` 的 `channel` 参数
|
|
173
|
+
- 输出:在 `GsManager.preInit(Context)` 之前调用 `GsConfig.setInstallChannel(String)`
|
|
174
|
+
|
|
175
|
+
- [ ] **步骤 1:运行渠道配置断言,确认测试失败**
|
|
176
|
+
|
|
177
|
+
运行:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
cd /Users/yangsihao/Downloads/AndroidStudioProjects/plugins/rn/ido/react-native-idosdk
|
|
181
|
+
rg -n 'GsConfig\.setInstallChannel\(channel\)' \
|
|
182
|
+
android/src/main/java/com/getui/reactnativeido/GetuiIdoModule.java
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
预期:命令返回非零状态,因为当前实现没有应用 `channel`。
|
|
186
|
+
|
|
187
|
+
- [ ] **步骤 2:实现非空渠道配置**
|
|
188
|
+
|
|
189
|
+
将 `startSdk` 修改为:
|
|
190
|
+
|
|
191
|
+
```java
|
|
192
|
+
@ReactMethod
|
|
193
|
+
public void startSdk(String appid, String channel) {
|
|
194
|
+
// 设置AppId
|
|
195
|
+
if (!TextUtils.isEmpty(appid)) {
|
|
196
|
+
GsConfig.setAppId(appid);
|
|
197
|
+
}
|
|
198
|
+
// 设置安装渠道
|
|
199
|
+
if (!TextUtils.isEmpty(channel)) {
|
|
200
|
+
GsConfig.setInstallChannel(channel);
|
|
201
|
+
}
|
|
202
|
+
// 预初始化
|
|
203
|
+
GsManager.getInstance().preInit(mContext);
|
|
204
|
+
// 初始化并注册gtcid
|
|
205
|
+
GsManager.getInstance().init(mContext);
|
|
206
|
+
Toast.makeText(mContext, "GsManager init ", Toast.LENGTH_SHORT).show();
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
- [ ] **步骤 3:重新运行渠道配置断言,确认测试通过**
|
|
211
|
+
|
|
212
|
+
运行:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
rg -n 'GsConfig\.setInstallChannel\(channel\)' \
|
|
216
|
+
android/src/main/java/com/getui/reactnativeido/GetuiIdoModule.java
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
预期:命令返回零状态,只匹配 `startSdk` 中的渠道设置调用。
|
|
220
|
+
|
|
221
|
+
- [ ] **步骤 4:编译 RN Android 插件**
|
|
222
|
+
|
|
223
|
+
运行:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
cd example/AndroidDemo/android
|
|
227
|
+
./gradlew :react-native-idosdk:compileDebugJavaWithJavac
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
预期:`BUILD SUCCESSFUL`,不存在 `GsManager`、`GsConfig` 或
|
|
231
|
+
`IGtcIdCallback` 的缺失类或缺失方法错误。
|
|
232
|
+
|
|
233
|
+
- [ ] **步骤 5:检查任务 2 的限定差异**
|
|
234
|
+
|
|
235
|
+
运行:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
git diff --check -- \
|
|
239
|
+
android/src/main/java/com/getui/reactnativeido/GetuiIdoModule.java
|
|
240
|
+
git diff -- \
|
|
241
|
+
android/src/main/java/com/getui/reactnativeido/GetuiIdoModule.java
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
预期:未暂存差异只包含 `startSdk` 的渠道配置修改。本步骤不创建提交,也不改变
|
|
245
|
+
该新文件原有的暂存状态。
|
|
246
|
+
|
|
247
|
+
### 任务 3:验证 Manifest、依赖图和示例应用构建
|
|
248
|
+
|
|
249
|
+
**文件:**
|
|
250
|
+
|
|
251
|
+
- 验证:`example/AndroidDemo/android/app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml`
|
|
252
|
+
- 不修改生产文件;如果构建发现与本次迁移直接相关的问题,回到任务 1 或任务 2 修正并重新执行验证。
|
|
253
|
+
|
|
254
|
+
**接口:**
|
|
255
|
+
|
|
256
|
+
- 输入:任务 1 的 Maven 依赖与占位符、任务 2 的运行时配置
|
|
257
|
+
- 输出:可编译的 RN Android 插件和可构建的 Android Demo Debug APK
|
|
258
|
+
|
|
259
|
+
- [ ] **步骤 1:验证 Manifest 合并**
|
|
260
|
+
|
|
261
|
+
运行:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
cd /Users/yangsihao/Downloads/AndroidStudioProjects/plugins/rn/ido/react-native-idosdk/example/AndroidDemo/android
|
|
265
|
+
./gradlew :app:processDebugMainManifest
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
预期:`BUILD SUCCESSFUL`,宿主 App 能从个推仓库解析两个 AAR,且不存在
|
|
269
|
+
`GETUI_APPID` 或 `GT_INSTALL_CHANNEL` 的元数据值冲突。
|
|
270
|
+
|
|
271
|
+
- [ ] **步骤 2:检查合并后的 SDK 权限与组件**
|
|
272
|
+
|
|
273
|
+
运行:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
MERGED_MANIFEST=$(find app/build/intermediates -path '*debug*' \
|
|
277
|
+
-name AndroidManifest.xml -print | head -n 1)
|
|
278
|
+
rg -n 'READ_PHONE_STATE|ACCESS_FINE_LOCATION|BLUETOOTH|GtcService|GtcProvider|usesCleartextTraffic' \
|
|
279
|
+
"$MERGED_MANIFEST"
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
预期:输出包含 `gsido` 默认敏感权限、`GtcService`、`GtcProvider` 和
|
|
283
|
+
`android:usesCleartextTraffic="true"`。
|
|
284
|
+
|
|
285
|
+
- [ ] **步骤 3:确认最终运行时依赖版本**
|
|
286
|
+
|
|
287
|
+
运行:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
./gradlew :app:dependencyInsight \
|
|
291
|
+
--configuration debugRuntimeClasspath \
|
|
292
|
+
--dependency com.getui:gsido
|
|
293
|
+
./gradlew :app:dependencyInsight \
|
|
294
|
+
--configuration debugRuntimeClasspath \
|
|
295
|
+
--dependency com.getui:gtc
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
预期:两个命令均为 `BUILD SUCCESSFUL`,最终选择版本分别为
|
|
299
|
+
`1.4.14.0` 和 `3.3.3.0`,没有其他版本替换记录。
|
|
300
|
+
|
|
301
|
+
- [ ] **步骤 4:构建 Android Demo Debug APK**
|
|
302
|
+
|
|
303
|
+
运行:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
./gradlew :app:assembleDebug
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
预期:`BUILD SUCCESSFUL`,生成
|
|
310
|
+
`example/AndroidDemo/android/app/build/outputs/apk/debug/app-debug.apk`。
|
|
311
|
+
|
|
312
|
+
- [ ] **步骤 5:检查最终差异**
|
|
313
|
+
|
|
314
|
+
运行:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
cd /Users/yangsihao/Downloads/AndroidStudioProjects/plugins/rn/ido/react-native-idosdk
|
|
318
|
+
git diff --check
|
|
319
|
+
git status --short
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
预期:`git diff --check` 无输出;`git status --short` 同时显示任务开始前已有的
|
|
323
|
+
用户改动和本次 Maven 迁移改动。生产文件保持未提交,供用户与现有工作一起复核。
|