# JSView 小程序本地化
JSViewApp 版本1.3.413.20230831
开始支持小程序本地化运行的功能。
如果想无网络时也能运行小程序代码,可以将小程序本地化。
具体步骤如下:
# 本地打包一份小程序代码到 APK 中
- 在项目根目录的
build.gradle
文件中添加插件依赖。
buildscript {
...
dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
// 本地化打包插件依赖
classpath 'com.qcode.jslocalizationplugin:JSLocalizationPlugin:1.0.4'
}
}
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 在 module 的
build.gradle
中添加 plugin,比如./MyJsViewProject/app/build.gradle
中
plugins {
id 'com.android.application'
// 新增的 plugin
id 'com.qcode.jslocalizationplugin'
}
...
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 运行命令生成代码包
# JS_URL是小程序 js 的地址
sh ./gradlew :app:jsLocalization -PJS_URL=http://localhost:8077/js/main.jsv.5209aedd.mjs -PAPP_NAME=shijiuTv.com/TestDemoCompile
1
2
2
运行后会在./MyJsViewProject/app/build
下生成一个文件夹./MyJsViewProject/app/build/localizationJsAsset/localizationJs
,将文件夹localizationJs
复制到./MyJsViewProject/app/src/main/asset/
下面即可。
- 打包 Apk 时记得把 core 也打包进去
具体版本号查看
http://localhost:8077/js-info.json
(要换成自己实际的地址)
aar 文件找相关人员获取。
// 打包一份版本为 xxxxx 的 core
implementation(name: "jsview.core-embedded-xxxxx.full", ext: "aar")
1
2
2
完成以上配置后打包出来的 apk 就自带了一个小程序的代码包。
# Apk运行时获取本地化启动参数
需要 jsview 版本不低于1.3.413.20230831
:
implementation("com.tvcode.js_view_app:JSViewApp:1.4.448.20231102")
1
获取本地化参数:
/**
* 获取本地化启动参数。
* 如果本地没有缓存就会到 asset中去解压。
*/
SyncJSLocalizationUtil.INSTANCE.getParamsFromCache(getApplicationContext(), "shijiuTv.com/TestDemoCompile", new ILocalizationCallback.Stub() {
/**
* 成功获取到启动参数
* @param miniAppParams 启动参数
*/
@Override
public void onResult(MiniAppParams miniAppParams) throws RemoteException {
// 使用loadParams加载小程序
mMainPageProxy.loadParams(miniAppParams);
}
@Override
public void onJSDownloaded(MiniAppParams miniAppParams) throws RemoteException {
// 不会回调
}
@Override
public void onJSNothingToUpdate() throws RemoteException {
// 不会回调
}
/**
* 当出现异常时的回调
* @param errorCode 错误码:
* {@link com.tvcode.js_view_app.localization.JSLocalizationUtil#ERROR_CODE_CACHE_EMPTY} :本地没有缓存,apk 中也没有 zip 包。
* {@link com.tvcode.js_view_app.localization.JSLocalizationUtil#ERROR_CODE_UNKNOWN} :未知
* @param msg 异常信息
*/
@Override
public void onException(int errorCode, String msg) throws RemoteException {
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
getParamsFromCache
接口逻辑流程图:
graph TD;
A[获取本地缓存]--AppName-->B{本地有缓存?};
B -- Yes -->C[获取本地最高版本];
C --> END
B -- No -->C1{Asset有压缩包};
C1 -- Yes --> C11[解压到本地];
C1 -- No --> Excep[异常];
C11 --> C;
Excep --> END;
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 更新本地化小程序
可以在空闲时去更新下本地的 js 版本。
private void doCheckUpdate(){
MiniAppParams miniAppParams = new MiniAppParams();
// 小程序的js地址
miniAppParams.setUrl("http://192.168.0.27:8077/js/main.jsv.5209aedd.mjs");
// appName可以不设置
// miniAppParams.setAppName("shijiuTv.com/TestDemoCompile");
/**
* 检查并更新。
* 当提供的 js 版本比本地缓存的版本要高时会去下载更新本地缓存。
*/
SyncJSLocalizationUtil.INSTANCE.checkAndUpdateMiniApp(getApplicationContext(), miniAppParams, new ILocalizationCallback.Stub() {
@Override
public void onResult(MiniAppParams miniAppParams) throws RemoteException {
// 不会回调
}
/**
* 本地化更新完成。
* @param miniAppParams 本地化的启动参数
*/
@Override
public void onJSDownloaded(MiniAppParams miniAppParams) throws RemoteException {
}
/**
* 本地缓存的版本比提供的 js 版本要高无需更新
*/
@Override
public void onJSNothingToUpdate() throws RemoteException {
}
/**
* 当出现异常时的回调
* @param errorCode 错误码:
* {@link com.tvcode.js_view_app.localization.JSLocalizationUtil#ERROR_CODE_FAIL_APP_NAME} : MiniAppParams 中设置的 appName 与实际的 js 不相符。
* {@link com.tvcode.js_view_app.localization.JSLocalizationUtil#ERROR_CODE_NETWORK_DISCONNECT} : 无网络连接。
* {@link com.tvcode.js_view_app.localization.JSLocalizationUtil#ERROR_CODE_UNKNOWN} :未知
* @param msg 异常信息
*/
@Override
public void onException(int errorCode, String msg) throws RemoteException {
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
checkAndUpdateMiniApp
接口逻辑流程图:
graph TD;
START[检查更新本地缓存];
START --参数:url/appName--> A{有网络?};
A --No --> Excep[异常];
A --Yes--> C[读取jsv-info.json,获取版本];
C --> D{与本地版本对比};
C --appName不一致--> Excep;
D --需要更新--> DD[生成cfg文件</br>主要用于记录core版本与主js路径] -->DF[下载engineJs] -->DFF[下载Core] --> F[下载dist.dat解压] --> FF[生成endFlag文件];
FF --> G[删除dist.dat与本地js版本</br>只保留最新的两个js版本]
G --> H[获取本地最新的版本]
D --不需要更新--> END;
H --> END;
Excep --> END;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
← SDK java 文档 独立进程页面支持 →