提交 235410a9 编写于 作者: H HRK

Merge branch 'master' of https://gitcode.net/dcloud/unidocs-zh

...@@ -87,27 +87,6 @@ ...@@ -87,27 +87,6 @@
|流量(GB)|0.18 | |流量(GB)|0.18 |
|售价(元/月)#{colspan=2} |5 | |售价(元/月)#{colspan=2} |5 |
``` ```
14. 表格支持行展开
md 书写格式
```md
| |原生语言插件 |uts插件|
|:------ |:------- |:--------|
|开发语言 |java/oc |uts|
|开发环境 |Android Studio/XCode |[HBuilderX](https://www.baidu.com)|
->|第一列|第二列 |第三列 |
->|:------ |:-------: |-------: |
->|左对齐 |[居中](https://www.baidu.com)|右对齐|
|打包方式 |外挂aar 等产出物 |编译时生成原生代码|
|js层调用方式 |uni.requireNativePlugin() |普通的js函数/对象,可以直接 import,支持摇树优化|
->|第一列|第二列 |
->|:------ |:------- |
->|第一列内容 |[HBuilderX](https://www.baidu.com)|
|支持项目类型 |uni-app |uni-app和uni-app x|
```
表现为:
![](https://qiniudcdn.qnqcdn.net/web-ext-storage.dcloud.net.cn/doc/subtable.png)
## 文档 Algolia 使用限额 ## 文档 Algolia 使用限额
Included Quota: Included Quota:
- Records: 1,000,000 - Records: 1,000,000
......
...@@ -109,9 +109,6 @@ const config = { ...@@ -109,9 +109,6 @@ const config = {
.end() .end()
.plugin('markdown-it-raw-table') .plugin('markdown-it-raw-table')
.use(require('markdown-it-raw-table')) .use(require('markdown-it-raw-table'))
.end()
.plugin('subtable')
.use(require('./markdown/markdown-it-subtable').markdownIt, [{ flags: ['->'] }])
} }
}, },
chainWebpack (config, isServer) { chainWebpack (config, isServer) {
......
...@@ -198,6 +198,13 @@ export default { ...@@ -198,6 +198,13 @@ export default {
state: 1, state: 1,
prefix: '群27', prefix: '群27',
}, },
{
number: '166188776',
state: 1,
prefix: '群28',
joinQQGroupHref:
'https://qm.qq.com/cgi-bin/qm/qr?k=jSmA3SLhDdILrUw3EMpN4iWSKgEuSLVW&jump_from=webapi&authKey=iVG0LhlB2TNKwrAf6CChQKeRddFhjjgbXqBgswaLK0UorBqZNKvu4q5XGwXThpsn',
},
{ {
number: '202965481', number: '202965481',
state: 1, state: 1,
...@@ -232,13 +239,6 @@ export default { ...@@ -232,13 +239,6 @@ export default {
number: '713420817', number: '713420817',
state: 1, state: 1,
prefix: '群35', prefix: '群35',
}, }
{
number: '166188776',
state: 0,
prefix: '群28',
joinQQGroupHref:
'https://qm.qq.com/cgi-bin/qm/qr?k=jSmA3SLhDdILrUw3EMpN4iWSKgEuSLVW&jump_from=webapi&authKey=iVG0LhlB2TNKwrAf6CChQKeRddFhjjgbXqBgswaLK0UorBqZNKvu4q5XGwXThpsn',
},
], ],
}; };
function normalizeMD (md) {
if (typeof md === 'string') {
return md
.replace(/(?<!\\)</g, '\\<')
.replace(/]([^(])|(?<!\\)]$/g, '\\]$1')
.replace(/(?<!\\)\|/g, '\\|')
}
return md
}
function resolveSubtable(md, tokens = [], tokenIndexes = [], flags) {
if (tokens.length && tokenIndexes.length) {
tokenIndexes.forEach(tokenIndex => {
if (Array.isArray(tokenIndex) && tokenIndex.length > 2) {
const tableOpenIndex = tokenIndex.shift();
const tableCloseIndex = tokenIndex.pop();
let deleteOffset = 0;
tokenIndex.forEach(subtableIndexes => {
const subtableOpenIndex = subtableIndexes.shift() + deleteOffset;
const subtableColumnCount = (subtableIndexes[0] + deleteOffset - subtableOpenIndex - 2) / 3 - 1;
const subtableCloseIndex = subtableIndexes.pop() + deleteOffset + subtableColumnCount * 3;
const subtableTokens = tokens.slice(subtableOpenIndex - 1, subtableCloseIndex + 1);
// 2 table token 新行开始时固定的 tr_open td_open 数量
// 3 每个 inline 都会伴随一个 td_close、td_open(行最后一列 inline 会伴随 td_close tr_close)
// 1 为 flag ->(标识符) 的列,需要去掉
let tableColumnCount = 0;
for (let i = 0; i < tableCloseIndex; i++) {
const token = tokens[i];
if (i < subtableOpenIndex) {
if (token.type === 'th_open') {
tableColumnCount++;
} else if (token.type === 'thead_close') {
break;
}
}
}
let subtableMD = subtableTokens
.map(token => {
if (token.type === 'inline' && !flags.includes(token.content)) {
return normalizeMD(token.content);
} else if (token.type === 'tr_close') {
return '\n';
}
})
.filter(Boolean);
const subtableLevel = subtableTokens[0].level;
const newTokens = md.parse(`|${subtableMD.join('|')}|`);
newTokens.forEach(token => {
token.content = ''; // 和 children 内容重复
token.level = token.level + subtableLevel;
});
newTokens[0].attrJoin('style', 'overflow-x: visible;margin: auto;');
const childrenTableTokenIndex = subtableOpenIndex - 2;
const subtablePrevTrOpenIndex = childrenTableTokenIndex - tableColumnCount * 3 - 2;
tokens[tableOpenIndex].attrJoin('class', 'have-children-table'); // table
tokens[subtablePrevTrOpenIndex].attrJoin('class', 'have-children-tr'); // table tr_open
// table td_open
const haveChildrenTrTdToken = tokens[subtablePrevTrOpenIndex + 1];
haveChildrenTrTdToken.attrJoin('class', 'have-children-tr-td');
haveChildrenTrTdToken.attrJoin('style', ';text-wrap: nowrap');
tokens[childrenTableTokenIndex].attrJoin('class', 'children-table'); // subtable tr_open
tokens[childrenTableTokenIndex].attrJoin('hidden', ''); // subtable tr_open
tokens[subtableOpenIndex - 1].attrJoin('colspan', tableColumnCount); // subtable td_open
const deleteCount = subtableCloseIndex - subtableOpenIndex + 1;
tokens.splice(subtableOpenIndex, deleteCount, ...newTokens);
deleteOffset = deleteOffset + newTokens.length - deleteCount;
});
}
});
}
}
function process(md, tokens, flags = ['->']) {
const subtableMinTokenCount = 3;
if (
Array.isArray(tokens) &&
tokens.length &&
tokens.some(token => token.content.includes('->') && token.type === 'inline')
) {
const tableOpenTokenIndex = tokens.findIndex(token => token.type === 'table_open');
if (tableOpenTokenIndex > -1) {
/**
* [
* table_open index,
* [] // subtable indexes,
* table_close index
* ]
*/
let tableTokensIndexes = [[]];
let tableIndex = 0;
let subtableIndex = 1;
tokens.forEach((token, index) => {
if (token.type === 'table_open' && tableTokensIndexes[tableIndex].length === 0) {
tableTokensIndexes[tableIndex].push(index);
}
if (tableTokensIndexes[tableIndex] && typeof tableTokensIndexes[tableIndex][0] !== 'undefined') {
if (token.type === 'inline') {
if (flags.find(flag => new RegExp(`^\\s*${flag}\\s*$`).test(token.content))) {
(
tableTokensIndexes[tableIndex][subtableIndex] || (tableTokensIndexes[tableIndex][subtableIndex] = [])
).push(index);
} else if (tokens[index - 2].type === 'tr_open') {
tableTokensIndexes[tableIndex][++subtableIndex] = [];
}
}
}
if (token.type === 'table_close') {
subtableIndex = 1;
tableTokensIndexes[tableIndex].push(index);
tableTokensIndexes[++tableIndex] = [];
}
});
tableTokensIndexes.forEach((subtableTokensIndex, index) => {
tableTokensIndexes[index] = subtableTokensIndex.filter(
i => typeof i === 'number' || (Array.isArray(i) && i.length >= subtableMinTokenCount)
);
});
tableTokensIndexes = tableTokensIndexes.filter(i => i.length);
if (tableTokensIndexes.length) {
resolveSubtable(md, tokens, tableTokensIndexes, flags);
}
}
}
}
module.exports = {
process,
markdownIt: function subTablePlugin(md, { flags = ['->'] } = {}) {
md.core.ruler.after(
'inline',
'subtable',
(state, startLine, endLine, silent) => {
process(md, state.tokens, flags);
},
{
alt: ['paragraph', 'reference'],
}
);
},
};
### voice ### voice
voice 包括语言识别和语音朗读两部分。 voice 包括语言识别和语音朗读两部分。
仅百度小程序平台、App平台支持,各平台开发方式暂未统一,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。 仅百度小程序平台、App平台支持,各平台开发方式暂未统一,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。
百度小程序平台支持语音识别,参考:[规范详情](https://smartprogram.baidu.com/docs/develop/api/ai_voice/) 百度小程序平台支持语音识别,参考:[规范详情](https://smartprogram.baidu.com/docs/develop/api/ai_voice/)
App 平台实现参考: App 平台实现参考:
- 语音识别:支持科大讯飞语音识别和百度语音识别,云打包的话需要在manifest中勾选模块和App SDK配置,开发规范见:[https://www.html5plus.org/doc/zh_cn/speech.html](https://www.html5plus.org/doc/zh_cn/speech.html),配置文档及讯飞百度的差别见:[https://ask.dcloud.net.cn/article/35059](https://ask.dcloud.net.cn/article/35059) - 语音识别:支持百度语音识别,云打包的话需要在manifest中勾选模块和App SDK配置,开发规范见:[https://www.html5plus.org/doc/zh_cn/speech.html](https://www.html5plus.org/doc/zh_cn/speech.html),配置文档及讯飞百度的差别见:[https://ask.dcloud.net.cn/article/35059](https://ask.dcloud.net.cn/article/35059)
- 语音朗读:调用科大讯飞进行语音合成、tts朗读,参考[https://ask.dcloud.net.cn/article/1081](https://ask.dcloud.net.cn/article/1081) - 语音朗读:调用科大讯飞进行语音合成、tts朗读,参考[https://ask.dcloud.net.cn/article/1081](https://ask.dcloud.net.cn/article/1081)
...@@ -101,4 +101,4 @@ HBuilderX (4.0+) android 平台支持 ...@@ -101,4 +101,4 @@ HBuilderX (4.0+) android 平台支持
- 如果权限已经申请并且允许之后,`onConfirm`不会触发。 - 如果权限已经申请并且允许之后,`onConfirm`不会触发。
- 如果同时申请多个权限时,`onComplete`可能会触发多次。 - 如果同时申请多个权限时,`onComplete`可能会触发多次。
- 权限列表参考:[https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions) - 权限列表参考:[https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions)
- 本API仅提供了权限申请监听,未提供全局弹窗 - 全局监听权限申请可参考插件[uni-registerRequestPermissionTips](https://ext.dcloud.net.cn/plugin?name=uni-registerRequestPermissionTips)
#### 4.02.2024030621-alpha
* 【uni-app 插件】
+ App平台 修复 Vue2 Cli 项目 nvue 页面编译报错的Bug [详情](https://ask.dcloud.net.cn/question/186784)
+ App-Android平台 新增 API uni.getChannelManager,获取通知渠道管理器 [详情](https://uniapp.dcloud.net.cn/api/plugins/push.html#getChannelManager)
+ App-Android平台 修复 首次安装调用 uni.scanCode 可能会出现黑屏的Bug [详情](https://ask.dcloud.net.cn/question/185913)
+ Web平台 修复 Vue3 项目自动化测试 element.input 方法报错的Bug [详情](https://ask.dcloud.net.cn/question/184815)
+ 抖音小程序平台 新增 组件支持 virtualHost 配置 [详情](https://uniapp.dcloud.net.cn/tutorial/vue3-api.html#其他配置)
+ 抖音小程序平台 修复 Vue3 项目使用插件时属性丢失的Bug [详情](https://ask.dcloud.net.cn/question/185513)
+ 抖音小程序平台 修复 Vue2 项目使用国际化报错的Bug [详情](https://ask.dcloud.net.cn/question/161008)
* 【uni-app x 插件】
+ 新增 API uni.rpx2px [详情](https://doc.dcloud.net.cn/uni-app-x/api/rpx2px.html)
+ 调整 pages.json 中配置的页面路径大小写敏感
+ 修复 UniElement tagName、nodeName获取内置组件的标签与组件名不一致的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=766)
+ 修复 vue $parent未跳过内置组件的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=773)
+ Web平台 新增 组件 list-view、list-item组件 [详情](https://doc.dcloud.net.cn/uni-app-x/component/list-view.html)
+ Web平台 新增 组件 sticky-section、sticky-header组件 [详情](https://doc.dcloud.net.cn/uni-app-x/component/sticky.html)
+ Web平台 修复 部分场景下类型推断时未将对象字面量作为UTSJSONObject使用的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=819)
+ Web平台 修复 类型字面量内带有any[]时无法正确创建实例的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=767)
+ Web平台 修复 非全局声明的type在变量声明为此类型时不会自动创建实例的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=782)
+ Web平台 修复 vue $forceUpdate未能更新内置组件插槽内容的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=776)
+ Web平台 修复 使用热更新uts文件内新导出的type时报找不到导出的type的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=823)
+ Web平台 修复 API request、uploadFile、downloadFile接口timeout参数传null时会直接超时的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=805)
+ App-Android平台 新增 API uni.requestPayment,支持支付宝支付 [详情](https://doc.dcloud.net.cn/uni-app-x/api/request-payment.html)
+ App-Android平台 修复 组件 button 渲染宽高与Web端不一致的问题 [详情](https://doc.dcloud.net.cn/uni-app-x/component/button.html)
+ App-Android平台 修复 组件 text 无文本内容时组件宽度不正确的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=777)
+ App-Android平台 修复 组件 text 子组件设置 background-color 样式无效的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=276)
+ App-Android平台 修复 组件 text 子组件无法修改文本内容的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=562)
+ App-Android平台 修复 组件 image 请求网络图片无法共享cookie的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=820)
+ App-Android平台 修复 组件 list-item 动态调整宽高不生效的Bug [详情](https://ask.dcloud.net.cn/question/185517)
+ App-Android平台 修复 组件 list-view 部分场景修改refresher-triggered属性值域可能不生效的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=796)
+ App-Android平台 修复 组件 list-view 部分场景删除插槽子元素报错Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=769)
+ App-Android平台 修复 CSS 4.0版本引出的 position 属性设置为 fixed 后 z-index 属性无效的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=726)
+ App-Android平台 修复 tabBar 配置 pagePath 有误时点击 tab 切换崩溃的Bug[详情](https://issues.dcloud.net.cn/pages/issues/detail?id=779)
+ App-Android平台 修复 使用 UTSAndroid.getJavaClass 获取导入的类时可能编译报错的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=809)
+ App-Android平台 优化 type类型响应式对象的构造方式,避免使用反射,优化性能
+ App-Android平台 修复 关联其他项目的服务空间并使用其中的云对象时报错的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=817)
+ App-Android平台 修复 unicloud-db组件,使用 setup 语法,作用域插槽中无法使用data的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=761)
+ App-Android平台 修复 云对象返回数字错误码时报错的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=840)
+ App-Android平台 更新 云端打包环境 compileSdkVersion 为 34
* 【uts插件】
+ Android平台 新增 `typeof` 操作符支持平台专有字符类型 `Char` [详情](https://doc.dcloud.net.cn/uni-app-x/uts/operator.html#typeof)
+ App-Android平台 修复 局部定义 class 时,构造函数使用 super 报错的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=802)
+ App-Android平台 新增 interface.uts 文件支持 export declare 语法 [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=744)
+ App-Android平台 修复 import * as Types from 'xxx' 导入 type 类型编译报错的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=696)
+ App-iOS平台 新增 @UTSiOS.keyword('fileprivate') 注解,用于解决自定义swift类,属性的访问控制
* 【App插件(含5+App和uni-app的App端)】
+ Android平台 更新 uni-AD 快手广告SDK为 3.3.61 版;Sigmob广告联盟SDK为 4.15.1 版;百度百青藤广告SDK为 9.34 版
+ Android平台 更新 UniPush 谷歌渠道 使用的个推 SDK 为 4.4.3.8 版,解决可能无法通过 GooglePlay 审核的问题 [详情](https://ask.dcloud.net.cn/question/186384)
+ Android平台 更新 支付模块 Paypal SDK 为 1.2.1 版,解决谷歌商店审核失败的问题
+ iOS平台 修复 应用沙盒 tmp 缓存目录没有及时清理的Bug [详情](https://ask.dcloud.net.cn/question/186250)
+ iOS平台 修复 应用内存占用过高时系统终止 WKWebview 进程导致页面白屏无法恢复的Bug [详情](https://ask.dcloud.net.cn/question/186341)
+ iOS平台 更新 云端打包环境 XCode 为 15.2 版、iOS SDK 为 17.2 版
* 【uniCloud】
+ 新增 `uniCloud.httpProxyForEip.get` API支持 headers 字段
+ 修复 上传云函数时安装依赖失败后仍然会上传云函数的Bug
+ 修复 上传公共模块时不会剔除 node_modules 目录的Bug
+ 修复 本地运行时无法使用地理位置查询/索引API的Bug
+ 修复 同时存在支付宝小程序云、阿里云、腾讯云空间时,虚拟目录无法正确显示的Bug
+ 修复 修复项目关闭后,再次打开云空间未显示关联服务空间的Bug [详情](https://ask.dcloud.net.cn/question/186741)
+ 修复 关联其他项目运行时unicloud目录识别错误的Bug
+ 修复 未登录状态下点击关联服务空间无响应的Bug
+ 调整 阿里云 url化请求体大小限制由1MB调整为2MB,响应体大小限制由1MB调整为2MB
#### 4.01.2024020211-alpha #### 4.01.2024020211-alpha
* 【uni-app 插件】 * 【uni-app 插件】
+ Web平台 修复 Vue3 项目 ssr 运行报错的Bug [详情](https://ask.dcloud.net.cn/question/185205) + Web平台 修复 Vue3 项目 ssr 运行报错的Bug [详情](https://ask.dcloud.net.cn/question/185205)
......
...@@ -73,18 +73,10 @@ ...@@ -73,18 +73,10 @@
点击“Project settings”,进入项目设置页面 点击“Project settings”,进入项目设置页面
![](https://img.cdn.aliyun.dcloud.net.cn/client/ask/unipush/fcm/settings.png) ![](https://img.cdn.aliyun.dcloud.net.cn/client/ask/unipush/fcm/settings.png)
切换到“Cloud Messaging”项,获取“Server key”,**保存Server key后面需要使用** 切换到`服务账号`项,点击`生成新的私钥`**保存私钥json文件到本地,后面需要使用**
由于新版`Firebase Cloud Messaging API (V1)`不提供`Server key`, 所以需要手动开启旧版 `Cloud Messaging API` ![](https://web-ext-storage.dcloud.net.cn/native/unipush/img_vendor_fcm0.jpg)
![](https://native-res.dcloud.net.cn/images/uniapp/push/firebase/firebase_android_setup_get_server_key.png)
跳转到Api管理页面启动`Cloud Messaging API`
![](https://native-res.dcloud.net.cn/images/uniapp/push/firebase/firebase_android_open_old_api.png)
启动`Cloud Messaging API`后即可得到`Server key`
![](https://native-res.dcloud.net.cn/images/uniapp/push/firebase/firebase_android_server_key.png)
##### UniPush后台配置FCM参数 ##### UniPush后台配置FCM参数
配置FCM需先开通UniPush,如应用未开通UniPush请先开通。 配置FCM需先开通UniPush,如应用未开通UniPush请先开通。
...@@ -92,8 +84,8 @@ ...@@ -92,8 +84,8 @@
![](https://img.cdn.aliyun.dcloud.net.cn/client/ask/unipush/fcm/hx_unipush.png) ![](https://img.cdn.aliyun.dcloud.net.cn/client/ask/unipush/fcm/hx_unipush.png)
打开DCloud的开发者中心后台进入应用列表,点击应用名称进入详情,点击上方“uniPush”选项卡,点击“厂商推送设置”按钮进入配置UniPush的FCM参数 打开DCloud的开发者中心后台进入应用列表,点击应用名称进入详情,点击上方“uniPush”选项卡,点击“厂商推送设置”按钮进入配置UniPush的FCM参数
[attach]94813[/attach]
![](https://web-ext-storage.dcloud.net.cn/native/unipush/img_vendor_fcm1.jpg)
保存成功后在HBuilderX中重新提交云端打包,并在“App-云打包”界面选择google play 渠道包: 保存成功后在HBuilderX中重新提交云端打包,并在“App-云打包”界面选择google play 渠道包:
......
...@@ -37,18 +37,14 @@ ...@@ -37,18 +37,14 @@
**参考资料:** **参考资料:**
- [微信小程序备案操作指引](https://developers.weixin.qq.com/miniprogram/product/record/record_guidelines.html) - [微信小程序备案操作指引](https://developers.weixin.qq.com/miniprogram/product/record/record_guidelines.html)
- [支付宝小程序备案操作指引](https://opendocs.alipay.com/mini/0adg3d) - [支付宝小程序备案操作指引](https://opendocs.alipay.com/mini/0apy22?pathHash=2cd5467d)
- [抖音小程序ICP备案指引](https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/operation/settle/ICPFiling/ICPintroduce) - [抖音小程序ICP备案指引](https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/operation/settle/ICPFiling/ICPintroduce)
- [百度小程序备案指引](https://smartprogram.baidu.com/docs/introduction/register_filings/) - [百度小程序备案指引](https://smartprogram.baidu.com/docs/introduction/register_filings/)
- [京东小程序备案流程](https://mp-docs.jd.com/doc/operation/beian/2300) - [京东小程序备案流程](https://mp-docs.jd.com/doc/operation/beian/2300)
- [快手小程序备案流程](https://mp.kuaishou.com/docs/operate/specification/icp/guide.html)
## FAQ
- Q:APP备案如何获取公钥、签名MD5等特征信息?
- A:参考[App特征信息的获取方法](https://help.aliyun.com/zh/icp-filing/fill-in-app-feature-information)或使用[App解析包工具](https://www.yimenapp.com/developer/cert_analyse_upload.cshtml)
\ No newline at end of file
# Android UTS扩展开发 # Android UTS 扩展开发
> 版本要求: HBuilderX 3.6.9+ > 版本要求: HBuilderX 3.6.9+
HBuilderX 3.6.9+, 新增 uts插件 Android平台 真机运行支持三方 Gradle 仓储。 HBuilderX 3.6.9+, 新增 uts 插件 Android 平台 真机运行支持三方 Gradle 仓储。
运行带有uts插件的项目到Android设备,如果您遇到以下提示,请配置[运行环境](#环境配置) 运行带有 uts 插件的项目到 Android 设备,如果您遇到以下提示,请配置[运行环境](#环境配置)
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/20221111173829.jpg" style="zoom: 50%;" /> <img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/20221111173829.jpg" style="zoom: 50%;" />
## uts扩展插件 ## uts 扩展插件
当您运行带有uts插件的项目到Android设备时,会自动安装【uts开发扩展 - Android】插件,请务必安装。具体如下: 当您运行带有 uts 插件的项目到 Android 设备时,会自动安装【uts 开发扩展 - Android】插件,请务必安装。具体如下:
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/20221111171012.jpg" style="zoom: 50%" /> <img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/20221111171012.jpg" style="zoom: 50%" />
## 环境配置 ## 环境配置
> 下载插件后打开 HBuilderX到 【设置 - 插件配置】:如图
![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/%E9%85%8D%E7%BD%AE.png) > 下载插件后打开 HBuilderX 到 【设置 - 插件配置】:如图
![image](https://web-ext-storage.dcloud.net.cn/hx/uts-android-2.png)
#### 上面的截图展示了以下配置: #### 上面的截图展示了以下配置:
##### 配置Gradle ##### 配置 Gradle
1. 点击图标 1 的下载地址进入下载页面。如图所示,点击红圈部分下载工具包。
![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/gradle.png)
2. 将步骤 1 下载的内容解压后,找到 bin 目录下的执行脚本,填入图标 2 处。
**注意** mac 为`%解压路径%/bin/gradle`;window 为`%解压路径%\bin\gradle.bat`
##### 配置 Gradle JDK
- 不同版本 Gradle 依赖不同版本的 JDK 。HbuilderX 内置的 JDK 为 11,仅支持 Gradle8.0 以下。如配置 Gradle 为 8.0 及以上版本需要手动下载并配置 JDK 路径。配置方式如下
1. 点击图标 3 的下载地址进入下载页面,选择所需要的版本。(如本地已安装 JDK 可跳过此步骤)
1. 点击图标1的下载地址进入下载页面。如图所示,点击红圈部分下载工具包 2. 将步骤 1 下载的内容解压后,找到 Home 目录,填入图标 4 处
![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/gradle.png) **注意**
2. 将步骤1下载的内容解压后,找到bin目录下的执行脚本,填入图标3处。 - HBuilderX 4.02+支持此配置项
- Gradle8.0 最低要求 JDK 版本为 17。更多版本要求[参考文档](https://developer.android.google.cn/build/releases/past-releases?hl=zh-cn)
**注意** mac为`%解压路径%/bin/gradle`;window为`%解压路径%\bin\gradle.bat` ##### 配置 SDK
##### 配置SDK 点击图标 5 的下载地址进入安卓官网,提供如下两种形式。
点击图标2的下载地址进入安卓官网,提供如下两种形式。 ###### ◇ 下载 Android Studio
###### ◇ 下载Android Studio 1. 如图所示,根据平台下载 Android Studio
1. 如图所示,根据平台下载Android Studio
![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/sdk-2.png) ![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/sdk-2.png)
2. 安装后获取Android Studio中sdk的路径地址填入到图标4处。 2. 安装后获取 Android Studio 中 sdk 的路径地址填入图标 6 处。
**注意**
- 默认路径 mac 为`/Users/用户名/Library/Android/sdk`;window 为`C:\Users\用户名\AppData\Local\Android\Sdk`
**注意** 默认路径 mac为`/Users/用户名/Library/Android/sdk`;window为`C:\Users\用户名\AppData\Local\Android\Sdk` ###### ◇ 如不需要安装 Android Studio 可通过下载 Command line tools only
###### ◇ 如不需要安装Android Studio可通过下载Command line tools only 1. 如图所示,根据平台下载 Command line tools only。
1. 如图所示,根据平台下载Command line tools only。
![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/sdk.png) ![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/sdk.png)
2. 下载解压后通过`%解压目录%/bin/sdkmanager脚本安装build-tools和platforms 2. 下载解压后通过`%解压目录%/bin/sdkmanager 脚本安装 build-tools 和 platforms
``` ```
sdkmanager --sdk_root=%sdk路径% --install "build-tools;30.0.0" sdkmanager --sdk_root=%sdk路径% --install "build-tools;30.0.0"
sdkmanager --sdk_root=%sdk路径% --install "platforms;android-30" sdkmanager --sdk_root=%sdk路径% --install "platforms;android-30"
``` ```
4. 将`%sdk路径%`配置到图标4处。 4. 将`%sdk路径%`填入图标 6 处。
5. [sdkmanager 使用文档](https://developer.android.google.cn/studio/command-line/sdkmanager)
5. [sdkmanager使用文档](https://developer.android.google.cn/studio/command-line/sdkmanager) **注意**
**注意** 下载Android Studio和下载Command line tools only选择一种形式下载sdk即可。 - 下载 Android Studio 和下载 Command line tools only 选择一种形式下载 sdk 即可。
##### 配置示例 ##### 配置示例
配置后如下图(根据本地目录结构有所不同) 配置后如下图(根据本地目录结构有所不同)
![image](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/%E9%85%8D%E7%BD%AE%E5%AE%8C%E6%88%90.png) ![image](https://web-ext-storage.dcloud.net.cn/hx/uts-android-1.png)
**注意** **注意**
- 如果环境已存在可以直接设置本地的工具包路径 - 如果环境已存在可以直接设置本地的工具包路径
- 此插件依赖sdk目录下build-tools版本不低于30.0.0 - 此插件依赖 sdk 目录下 build-tools 版本不低于 30.0.0
- 此插件依赖sdk目录下platforms版本不低于android-30 - 此插件依赖 sdk 目录下 platforms 版本不低于 android-30
...@@ -587,7 +587,7 @@ export default { ...@@ -587,7 +587,7 @@ export default {
sign = sha256(secret:transid) sign = sha256(secret:transid)
``` ```
提示:`Security key`[uni-ad 广告联盟](https://uniad.dcloud.net.cn) 对应的广告位,配置激励视频服务器回调后看到 提示:`Security key`[uni-ad 广告联盟](https://uniad.dcloud.net.cn) 对应的广告位,配置激励视频服务器回调后,点击广告位左侧下拉后可以看到
#### 签名验证方式 #### 签名验证方式
......
...@@ -418,8 +418,6 @@ exports.main = async (event, context) => { ...@@ -418,8 +418,6 @@ exports.main = async (event, context) => {
const res = await uniCloud.getPhoneNumber({ const res = await uniCloud.getPhoneNumber({
appid: '_UNI_ABCDEFG', // 替换成自己开通一键登录的应用的DCloud appid appid: '_UNI_ABCDEFG', // 替换成自己开通一键登录的应用的DCloud appid
provider: 'univerify', provider: 'univerify',
apiKey: 'xxx', // HBuilderX 3.94及以上版本可以不传此参数,部分模板/插件的旧版本仍会检查配置
apiSecret: 'xxx', // HBuilderX 3.94及以上版本可以不传此参数,部分模板/插件的旧版本仍会检查配置
access_token: event.access_token, access_token: event.access_token,
openid: event.openid openid: event.openid
}) })
...@@ -483,8 +481,6 @@ exports.main = async(event) => { ...@@ -483,8 +481,6 @@ exports.main = async(event) => {
const res = await uniCloud.getPhoneNumber({ const res = await uniCloud.getPhoneNumber({
provider: 'univerify', provider: 'univerify',
appid: 'xxx', // DCloud appid,不同于callFunction方式调用,使用云函数Url化需要传递DCloud appid参数!!! appid: 'xxx', // DCloud appid,不同于callFunction方式调用,使用云函数Url化需要传递DCloud appid参数!!!
apiKey: 'xxx', // HBuilderX 3.94及以上版本可以不传此参数,部分模板/插件的旧版本仍会检查配置
apiSecret: 'xxx', // HBuilderX 3.94及以上版本可以不传此参数,部分模板/插件的旧版本仍会检查配置
access_token: access_token, access_token: access_token,
openid: openid openid: openid
}) })
...@@ -559,8 +555,6 @@ exports.main = async(event) => { ...@@ -559,8 +555,6 @@ exports.main = async(event) => {
const res = await uniCloud.getPhoneNumber({ const res = await uniCloud.getPhoneNumber({
provider: 'univerify', provider: 'univerify',
appid: 'xxx', // DCloud appid,不同于callFunction方式调用,使用云函数Url化需要传递DCloud appid参数 appid: 'xxx', // DCloud appid,不同于callFunction方式调用,使用云函数Url化需要传递DCloud appid参数
apiKey: 'xxx', // HBuilderX 3.94及以上版本可以不传此参数,部分模板/插件的旧版本仍会检查配置
apiSecret: 'xxx', // HBuilderX 3.94及以上版本可以不传此参数,部分模板/插件的旧版本仍会检查配置
access_token: access_token, access_token: access_token,
openid: openid openid: openid
}) })
......
...@@ -9255,6 +9255,11 @@ vuepress-plugin-container@^2.0.2: ...@@ -9255,6 +9255,11 @@ vuepress-plugin-container@^2.0.2:
"@vuepress/shared-utils" "^1.2.0" "@vuepress/shared-utils" "^1.2.0"
markdown-it-container "^2.0.0" markdown-it-container "^2.0.0"
vuepress-plugin-expandable-row@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/vuepress-plugin-expandable-row/-/vuepress-plugin-expandable-row-1.0.0.tgz#9197ebb63c0277ae546c18d83dd7734de2438a7f"
integrity sha512-255rVtGGeRlTYXxjL4RLbsHfF9Q9fIZH5tIx4BPjYjk5AkULQKE16IekJ+A4mlsH7T944k/2jvxaE1zRy/w5SA==
vuepress-plugin-juejin-style-copy@^1.0.4: vuepress-plugin-juejin-style-copy@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/vuepress-plugin-juejin-style-copy/-/vuepress-plugin-juejin-style-copy-1.0.4.tgz#b58d10bdae9673875a33660f8a406f31161284bf" resolved "https://registry.yarnpkg.com/vuepress-plugin-juejin-style-copy/-/vuepress-plugin-juejin-style-copy-1.0.4.tgz#b58d10bdae9673875a33660f8a406f31161284bf"
...@@ -9288,16 +9293,17 @@ vuepress-plugin-zooming@^1.1.8: ...@@ -9288,16 +9293,17 @@ vuepress-plugin-zooming@^1.1.8:
dependencies: dependencies:
zooming "^2.1.1" zooming "^2.1.1"
vuepress-theme-uni-app-test@^1.4.7: vuepress-theme-uni-app-test@^1.4.8:
version "1.4.7" version "1.4.8"
resolved "https://registry.npmmirror.com/vuepress-theme-uni-app-test/-/vuepress-theme-uni-app-test-1.4.7.tgz#566be747f080f551a0f65ac306ccc09dab2ab623" resolved "https://registry.npmmirror.com/vuepress-theme-uni-app-test/-/vuepress-theme-uni-app-test-1.4.8.tgz#d4abf41d92dbe1be3b606fef5d1bef88c7282c29"
integrity sha512-O+4FGNetUqEHBpz/EE7KJlwNP3LrU2iz7W1WEq2vHnowPyOxwB2DiSA1aHaHhX1zDAG4n/HILQXhjH48r4uGhw== integrity sha512-hrUFRw+wkFfhu3/RZefkVBWYi24TVYLxOHrIhzYQzeoTA3L2GOHcT+hSmMC4lto67jOYU3crHHjcdZ4ZrCkrcA==
dependencies: dependencies:
"@vuepress/plugin-back-to-top" "^1.9.5" "@vuepress/plugin-back-to-top" "^1.9.5"
"@vuepress/theme-default" "^1.8.2" "@vuepress/theme-default" "^1.8.2"
algoliasearch "^4.13.1" algoliasearch "^4.13.1"
clipboard "^2.0.11" clipboard "^2.0.11"
vuepress-plugin-check-md2 "^1.0.4" vuepress-plugin-check-md2 "^1.0.4"
vuepress-plugin-expandable-row "^1.0.0"
vuepress-plugin-juejin-style-copy "^1.0.4" vuepress-plugin-juejin-style-copy "^1.0.4"
vuepress-plugin-mermaidjs "1.9.1" vuepress-plugin-mermaidjs "1.9.1"
vuepress-plugin-named-chunks "^1.1.4" vuepress-plugin-named-chunks "^1.1.4"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册