本文将为您介绍,通过扩展库的方式集成组件,支持的组件可参见下文。
X5内核扩展 SDK
如果开发者原来的工程中已集成了腾讯X5内核,小程序 SDK 支持多种版本X5内核,客户需根据自身工程实际情况进行选择。
注意:集成小程序 SDK 后开发者切记不要自己调用X5的初始化,因为小程序 SDK 会进行初始化,如果开发者自己调用初始化可能导致X5初始化失败,进而影响小程序同层渲染能力。
公网版本 X5 内核
公网版本 X5 内核为腾讯 X5对外提供使用的内核,它属于共享内核(共享微信、QQ 等内核),且会访问腾讯相关后台服务。
静态内核
静态 x5 内核将整个内核打包的 aar 中,同时支持 armeabi、arm64-v7a、arm64-v8a 多种架构,但 aar 包体积比较大;并支持小程序同层渲染。
//在工程中引入依赖//工程的application中开启extractNativeLibs配置,必须设置为true,否则内核初始化失败<applicationandroid:extractNativeLibs="true"></application>
开发者选择过滤打包后的 apk 支持的架构,来减小 apk 的大小。
ndk { abiFilters "armeabi" "armeabi-v7a" "arm64-v8a" }
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {/*** 创建初始化配置信息* @return*/@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();MiniInitConfig config = builder.x5LicenseKey("")//设置LicenseKey.build();}}
动态版 X5 内核
动态内核集成到 app 的 sdk 体积小,内核从服务端下载。
implementation 'com.tencent.tmf.android:dynamicx5:${version}'
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {/*** 创建初始化配置信息* @return*/@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();MiniInitConfig config = builder.x5LicenseKey("")//设置LicenseKey.coreUrl32("")//32位内核下载地址 .coreUrl64("")//64位内核下载地址.build();}}
部署内核文件到服务器,并按照规则生成对应的 URL 地址。
内核文件 URL 地址的生成规则如下:
(http 或 https)://domain/path/{versionCode}/{tbscore.tbs}
{versionCode}:为获取内核时提供的内核版本号 。
{tbscore.tbs}:为内核文件。
需要保证 URL 以" / "截取时,内核文件为最后一位,versionCode 为倒数第二位。
示例如下:
本例当中,内核版本号为 46471,内核文件为 tbs_core_release.tbs。
X5 内核事件回调
@ProxyService(proxy = IX5EventProxy.class) public class X5EventProxyImpl implements IX5EventProxy { /** * 动态内核下载进度 * @param progress */ @Override public void onDownloadProgress(int progress) { Log.d(ModuleApplet.TAG, "X5EventProxyImpl onDownloadProgress=" + progress); } /** * 动态内核下载失败 * @param code * @param msg */ @Override public void onDownloadFailed(int code, String msg) { Log.d(ModuleApplet.TAG, "X5EventProxyImpl onDownloadFailed=" + code + " " + msg); } /** * 动态内核下载完成 */ @Override public void onDownloadFinish() { Log.d(ModuleApplet.TAG, "X5EventProxyImpl onDownloadFinish"); } /** * 内核初始化回调 * @param isX5 true:x5初始化成功;false:x5初始化失败 */ @Override public void init(boolean isX5) { Log.d(ModuleApplet.TAG, "X5EventProxyImpl isX5=" + isX5); } }
扫码扩展 SDK
组件说明:开发者小程序如果使用了小程序扫码能力,则需要添加如下 SDK 支持扫码功能;如未使用,建议暂不添加,这样可以减小 App 包大小。
集成方法:按照如下的方式添加扫码扩展库依赖:
//扫码扩展组件
添加扫码扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
wx.scanCode | 调起客户端扫码界面进行扫码 |
涉及权限:
权限 | 描述 |
相机权限 | 需要申请相机权限用于扫码 |
文件读写权限 | 需要申请文件读写权限用于识别本地图片中的二维码 |
腾讯定位地图扩展 SDK
组件说明:针对中国大陆地区 App 开发,开发者小程序如果使用了小程序地图能力,则需要添加如下 SDK 支持腾讯地图功能;如未使用,建议暂不添加,这样可以减小 App 包大小。
集成方法:按照如下的方式添加地图扩展库依赖:
完成上述操作后,您需要在 Android 工程中配置您的 API 密钥。在 AndroidManifest.xml 文件中添加以下 meta-data,并将您的 API 密钥填入 (YOUR_API_KEY) 位置:
<application...<meta-dataandroid:name="TencentMapSDK"android:value="(YOUR_API_KEY)" />...</application>
添加腾讯地图扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
地图 | 支持地图相关接口,包括地图展示,使用地图选择位置以及查询 POI 等 |
涉及权限:
权限 | 描述 |
定位权限 | 需要使用定位权限用于显示地图定位 |
Google 及华为定位地图扩展 SDK
组件说明:针对境外 App 开发,开发者小程序如果使用了小程序地图能力,需要添加如下 SDK 支持 Google Map 功能;如未使用,建议暂不添加,这样可以减小 App 包大小。
集成方法:按照如下的方式添加地图扩展库依赖:
implementation 'com.google.maps.android:android-maps-utils:2.3.0'
由于部分华为设备不支持内嵌 Google Map,可能导致地图无法显示。您可以额外接入 Petal Map 作为补充方案,小程序框架将在华为设备上优先使用 Petal Map。
repositories {maven {url 'https://developer.huawei.com/repo/'}}implementation 'com.huawei.hms:maps-basic:6.9.0.300'implementation 'com.huawei.hms:site:6.5.1.300'
使用 Google Map 的情形,您需要在您的 Google Cloud Console 配置 Google Cloud 项目,并获取访问 Google 地图服务所需要的 API 密钥,具体操作步骤请参考在 Google Cloud Console 中进行设置以及使用 API 密钥。
完成上述操作后,您需要在 Android 工程中配置您的 API 密钥。在 AndroidManifest.xml 文件中添加以下 meta-data,并将您的 API 密钥填入 (YOUR_API_KEY) 位置:
<application...<meta-dataandroid:name="com.google.android.geo.API_KEY"android:value="(YOUR_API_KEY)" />...</application>
使用 Petal Map 的情形,您需要在您的华为管理控制台建立项目、开通地图以及位置服务并获取位置服务所使用的 API 密钥,具体操作步骤,请参考 配置 AppGallery Connect。然后按照 集成 HMS Core SDK 的引导下载“agconnect-services.json”文件至您的项目中并配置华为 AGC 插件。
您需要在 AndroidManifest.xml 文件中添加以下 meta-data,并将您的 API 密钥填入 (YOUR_API_KEY) 位置以正常使用华为的位置服务:
<application...<meta-dataandroid:name="HuaweiApiKey"android:value="(YOUR_API_KEY)" />...</application>
注意:
出于安全考虑,建议您为位置服务单独申请 API 密钥。
添加 Google、华为地图扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
地图 | 支持地图相关接口以及组件,包括地图展示,使用地图选择位置以及查询 POI 等 |
涉及权限:
权限 | 描述 |
定位权限 | 需要使用定位权限用于显示地图定位 |
直播组件扩展SDK
组件说明:如果您需要使用直播组件(live-player 和 live-pusher)进行直播推、拉流相关场景的开发,需要添加如下 SDK 以支持直播组件相关的功能的实现。
集成方法:添加直播组件依赖:
除了完成以上依赖的添加,您还需要重写实现 BaseMiniAppProxyImpl 的如下方法,提供直播组件需要的 LicenseUrl 和 LicenseKey,以完成直播组件的初始化信息配置;如果您未配置正确的 LicenseUrl 和 LicenseKey,会导致直播组件功能不可用。
说明:
@ProxyService(proxy = MiniAppProxy.class)public class MiniAppProxyImpl extends BaseMiniAppProxyImpl {@Overridepublic MiniConfigData configData(Context context, int configType, JSONObject params) {if(configType == MiniConfigData.TYPE_LIVE) {//Live直播配置MiniConfigData.LiveConfig liveConfig = new MiniConfigData.LiveConfig();//下面的key和url仅可用于demoliveConfig.licenseKey = "";liveConfig.licenseUrl = "";return new MiniConfigData.Builder().liveConfig(liveConfig).build();}return null;}}
添加直播扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
wx.createLivePusherContext | 创建直播推流端 context |
LivePusherContext | 支持 LivePusherContext 相关接口 |
wx.createLivePlayerContext | 创建直播拉流端 context |
LivePlayerContext | 支持 LivePlayerContext 相关接口 |
组件 | - |
live-pusher | 推流标签 |
live-player | 播放标签 |
涉及权限如下:
权限名称 | 描述 |
相机权限 | - |
录音权限 | - |
LBS 扩展 SDK
组件说明:LBS 组件提供位置信息、罗盘、加速计、定位、设备方向的相关的能力。
集成方法:按照如下的方式添加 LBS 扩展库依赖:
添加 LBS 扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
位置信息 | 支持位置信息相关接口 |
罗盘 | 支持罗盘相关接口 |
加速计 | 支持加速计相关接口 |
设备方向 | 支持设备方向相关接口 |
陀螺仪 | 支持陀螺仪相关接口 |
LBS 扩展 SDK 涉及权限如下:
权限 | 说明 |
定位 | 获取定位依赖定位权限 |
蓝牙扩展 SDK
组件说明:添加蓝牙扩展库之后,即可使用蓝牙相关的 API。
集成方法:按照如下的方式添加蓝牙扩展库依赖:
添加 LBS 扩展 SDK 后,增加支持的小程序 API 列表如下:
API | 说明 |
蓝牙-通用 | 蓝牙通用接口 |
蓝牙-低功耗外围设备 | 外围设备相关接口 |
蓝牙-低功耗中心设备 | 中心设备相关接口 |
蓝牙-信标 | 蓝牙信标相关接口 |
蓝牙扩展 SDK 涉及权限如下:
权限 | 说明 |
蓝牙 | 操作蓝牙需要申请蓝牙权限 |
定位 | 蓝牙设备搜索依赖定位权限 |
NFC 扩展 SDK
组件说明:添加 NFC 扩展 SDK,能够实现 NFC 读写相关的能力。
集成方法:按照如下的方式添加 NFC 扩展 SDK 依赖:
添加 NFC 扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
wx.getNFCAdapter | 获取 NFC 操作管理实例对象 |
NFCAdapter | 支持 NFCAdapter 相关接口 |
NFC 实例(NfcA、NfcB、NfcV、NfcF、Ndef、IsoDep、MifareUltralight、MifareClassic) | 支持 NFC 标签实例相关接口 |
所涉及权限:
权限名称 | 描述 |
NFC 权限 | 需要获取 NFC 权限 |
日历扩展 SDK
组件说明:日历扩展 SDK 提供日程创建相关的功能
集成方法:按照如下的方式添加日历扩展扩展库依赖:
添加日历扩展 SDK 后,增加支持的小程序 API 列表如下:
API名称 | 说明 |
wx.addPhoneCalendar | 添加日程 |
wx.addPhoneRepeatCalendar | 添加重复日程 |
涉及权限:
权限 | 描述 |
日历权限 | 需要授予日历读写权限 |
生物认证扩展 SDK
组件说明:生物认证扩展 SDK 提供设备指纹、人脸识别相关的能力。
集成方法:按照如下的方式添加生物认证扩展库依赖:
添加生物认证扩展 SDK 后,增加支持的小程序 API 列表如下:
API名称 | 说明 |
wx.startSoterAuthentication | - |
wx.checkIsSupportSoterAuthentication | - |
wx.checkIsSoterEnrolledInDevice | - |
涉及权限:
权限 | 描述 |
指纹访问 | 需要申请指纹访问权限 |
剪切板扩展 SDK
组件说明:提供剪切板访问的能力
集成方法:按照如下的方式添加扩展库依赖:
添加 LBS 扩展 SDK 后,增加支持的小程序 API 列表如下:
API名称 | 说明 |
wx.getClipboardData | - |
wx.setClipboardData | - |
涉及权限:
权限 | 描述 |
剪贴板权限 | 需要申请剪切板访问权限 |
通讯录扩展 SDK
组件说明:提供联系人访问相关能力。
集成方法:按照如下的方式添加扩展库依赖:
添加通讯录扩展 SDK 后,增加支持的小程序 API 列表如下:
API 名称 | 说明 |
wx.addPhoneContact | 添加联系人 |
wx.chooseContact | 选择联系人 |
涉及权限:
权限 | 描述 |
联系人读写权限 | 需要申请联系人访问、写入权限 |
文档引擎扩展 SDK
组件说明:提供文档(pdf、word、excel、ppt等)打开能力。
集成方法:按照如下的方式添加扩展库依赖:
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {/*** 创建初始化配置信息* @return*/@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();MiniInitConfig config = builder.docLicenseKey("")//设置LicenseKey.build();}}
媒体扩展 SDK
组件说明:提供 chooseMedia、previewMedia 的默认实现。
集成方法:按照如下的方式添加扩展库依赖:
实现 MediaImageLoaderProxy 代理,使用自定义的图片加载实现,用于 mini_extra_media_support 库的图片加载。
说明:
可以通过实现 MediaChooseJsProxy 代理,实现自定义的 chooseMedia 逻辑。
@ProxyService(proxy = MediaImageLoaderProxy.class) public class CustomMediaImageLoaderProxy implements MediaImageLoaderProxy { private GlideImageEngine glideImageEngine = new GlideImageEngine(); @Override public ImageEngine getCustomImageEngine() { return glideImageEngine; } static class GlideImageEngine implements ImageEngine { @Override public void loadPhoto(@NonNull Context context, @NonNull Uri uri, @NonNull ImageView imageView) { Glide.with(context).load(uri).transition(withCrossFade()).into(imageView); } @Override public void loadGifAsBitmap(@NonNull Context context, @NonNull Uri gifUri, @NonNull ImageView imageView) { Glide.with(context).asBitmap().load(gifUri).into(imageView); } @Override public void loadGif(@NonNull Context context, @NonNull Uri gifUri, @NonNull ImageView imageView) { Glide.with(context).asGif().load(gifUri).transition(withCrossFade()).into(imageView); } @Override public Bitmap getCacheBitmap(@NonNull Context context, @NonNull Uri uri, int width, int height) throws Exception { return Glide.with(context).asBitmap().load(uri).submit(width, height).get(); } } }