uni小程序SDK原生开发者交流QQ群: 892918401

开发环境

集成方法

打开Android Studio加载已有android项目或新建android项目。然后按照以下步骤配置您的项目。

添加基础依赖库及资源文件

解压uni小程序SDK包。得到uniMPSDK文件夹。 uniMPSDK文件夹目录结构说明:

  1. |-- uniMPSDK/SDK //uni小程序SDK
  2. |-- assets // assets资源文件
  3. |-- Libs //依赖库
  4. |-- res // 资源文件
  5. |-- src //微信分享支付需要的activity
  6. |-- AndroidManifest.xml //模块配置信息
  7. |-- proguard.cfg //混淆配置
  8. |-- Feature-Android //libs 依赖库的说明及权限配置信息
  9. /-- uniMPSDK/DEMO //uni小程序SDK示例DEMO
  10. /-- uniMPSDK\Features // 框架已有的原生功能依赖库
  11. |-- Features 依赖库说明.xls
  12. |-- libs //原生功能依赖库

uniMPSDK/SDK/Libs 依赖库说明

Libs文件夹中的依赖库是不用全部都集成到宿主项目中。可根据功能增删修改。具体可阅读Features 依赖库说明.xls参考修改添加等操作。

除视频、地图、分享、支付、登录、直播pusher等SDK,只集成基础模块如下:

  1. uniMPSDK-release.aar //必须集成
  2. uniapp-release.aar //必须集成
  3. sqlite-release.aar
  4. miit_mdid_1.0.10.aar //必须集成
  5. messaging-release.aar
  6. iBeacon-release.aar
  7. fingerprint-release.aar
  8. contacts-release.aar
  9. Bluetooth-release.aar
  10. android-gif-drawable-release@1.2.17.aar //必须集成

标注必须集成的依赖库一定要集成。否则会导致小程序无法正常运行

注意

不要只拷贝依赖库(aar资源)。SDK根目录下的其他资源(非Libs)必须要拷贝到项目中的。

复制SDK资源到android项目目录

将SDK目录下的资源拷贝到工程项目相对路径中.具体可参考uniMPSDK示例DEMO

Android 集成教程 - 图1

注意

SDK资源必须都要拷贝到项目中。缺少则无法正常运行。如:assets中的资源不拷贝。会报错未添加ui模块的弹窗

gradle配置

以下为基础配置。具体可参考uniMPSDK示例DEMO中app/build.gradle文件

  1. //必须配置
  2. def mfph = [
  3. //宿主包名
  4. "apk.applicationId" : "xxx.xxx.xxxxx",
  5. ]
  6. android {
  7. defaultConfig {
  8. targetSdkVersion 26 //最高28最优26 设置值域超过28可能在android10以上手机出现白屏问题。
  9. ndk {
  10. abiFilters 'x86','armeabi-v7a',"arm64-v8a" //不支持armeabi
  11. }
  12. manifestPlaceholders = mfph
  13. }
  14. //此处配置必须添加 否则无法正确运行
  15. aaptOptions {
  16. additionalParameters '--auto-add-overlay'
  17. //noCompress 'foo', 'bar'
  18. ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
  19. }
  20. }
  21. //导入aar需要的配置
  22. repositories {
  23. flatDir {
  24. dirs 'libs'
  25. }
  26. }
  27. dependencies {
  28. //导入SDK相关依赖jar、aar
  29. implementation fileTree(include: ['*.jar'], dir: 'libs')
  30. implementation fileTree(include: ['*.aar'], dir: 'libs')
  31. //必须添加的依赖
  32. implementation 'com.android.support:recyclerview-v7:27.1.0'
  33. implementation 'com.android.support:support-v4:27.1.0'
  34. implementation 'com.android.support:appcompat-v7:27.1.0'
  35. implementation 'com.alibaba:fastjson:1.1.46.android'
  36. implementation 'com.facebook.fresco:fresco:1.13.0'
  37. implementation 'com.facebook.fresco:animated-gif:1.13.0'
  38. implementation 'com.github.bumptech.glide:glide:4.9.0'
  39. }

注意!!!! targetSdkVersion 取值范围最高28 最优26 设置值域超过28可能在android10以上手机出现白屏问题。

uni小程序集成的第三方依赖库与宿主发生冲突

  • 遇到此问题。请先检查宿主使用的先关三方依赖库的版本与uni小程序SDK集成的三方依赖库的版本是否一致。
  • 如果版本号一致!删除uni小程序SDK三方依赖库的文件或gradle配置即可。
  • 如果版本号不一致!则需要宿主主动修改相关集成三方依赖库的java代码。来适配uni小程序中的三方依赖库的版本逻辑。

生成小程序应用资源

注意!!!! uni小程序仅支持v3模式编译的uni应用!!! 确保你的uniapp在HX基座可以正常运行

首先在 HBuilderX 中选择您的 uni-app 项目,如果没有请新建一个 uni-app 项目,如下图,创建 uni-app 项目

Android 集成教程 - 图2

项目的编译模式必须选择 v3 编译器(新建uni-app项目默认是v3编译模式),点击页面中的“详情”可了解更多关于 v3 模式的注意事项,如果你的项目已勾选纯nvue项目请去掉该项勾选改为非纯nvue项目!!如下图,查看编译模式
Android 集成教程 - 图3

然后选中您的项目,右键->发行->原生App-制作应用wgt包

注:HBuilderX 2.6.2 以下版本选项是 “原生App-制作移动App资源升级包” ,2.6.2 版本近期会发布,只是修改了描述功能是一样的.

Android 集成教程 - 图4

项目编译完成后会在控制台,输出wgt包的路径,点击路径可以直接打开wgt所在目录

Android 集成教程 - 图5

Android 集成教程 - 图6

如图,__UNI__04E3A11.wgt就是应用资源包,(__UNI__04E3A11 为小程序的 appid)

导入小程序应用资源

内置uni小程序集成方式

打开android原生项目。在主Module模块的assets路径下创建apps/(内置uni小程序的appid)/www 路径。例如:apps/__UNI__04E3A11/www。将之前导出的应用资源包解压释放到apps/__UNI__04E3A11/www路径下。可参考DEMO示例工程。如下图:

注意:不少开发者对示例图片有些误解 是创建apps/__UNI__04E3A11/www目录,不是创建apps.__UNI__04E3A11.www文件夹。请注意是apps/__UNI__04E3A11/www目录。并将wgt资源包解压释放到www文件夹中!!!

Android 集成教程 - 图7

非内置uni小程序集成方式

应用资源包(.wgt)可以选择从云端获取或共享文件等方式。存放到手机SD卡中。宿主通过uni小程序SDK的API调用releaseWgtToRunPathFromePath实现释放资源包集成uni小程序。

代码实现

阅读uni小程序SDK API参考手册

初始化uniMPSDK

调用uni小程序SDK的DCuniMPSDK.getInstance().initialize 进行初始化。

示例:

  1. MenuActionSheetItem item = new MenuActionSheetItem("关于", "gy");
  2. List<MenuActionSheetItem> sheetItems = new ArrayList<>();
  3. sheetItems.add(item);
  4. DCSDKInitConfig config = new DCSDKInitConfig.Builder()
  5. .setCapsule(true)
  6. .setMenuDefFontSize("16px")
  7. .setMenuDefFontColor("#ff00ff")
  8. .setMenuDefFontWeight("normal")
  9. .setMenuActionSheetItems(sheetItems)
  10. .build();
  11. DCuniMPSDK.getInstance().initialize(this, config);

设置DefaultMenuButton监听事件

设置setDefMenuButtonClickCallBack监听默认菜单按钮点击事件。如示例中”关于”的设置,当关于被点击后会触发IMenuButtonClickCallBack

示例:

  1. DCuniMPSDK.getInstance().setDefMenuButtonClickCallBack(new DCuniMPSDK.IMenuButtonClickCallBack() {
  2. @Override
  3. public void onClick(String id) {
  4. switch (id) {
  5. case "gy":{
  6. Logger.e("用户点击了关于");
  7. }
  8. }
  9. }
  10. });

Tips

uni小程序运行在独立进程中。所以小程序中的内存与宿主是不会共享的。在点击事件处理上请注意!!!

启动内置uni小程序

通过DCuniMPSDK.getInstance().startApp启动小程序

示例:

  1. try {
  2. DCuniMPSDK.getInstance().startApp(context,"__UNI__04E3A11", MySplashView.class);
  3. } catch (Exception e) {
  4. e.printStackTrace();
  5. }

启动非内置uni小程序

  • 通过调用DCUniMPSDK.getInstance().releaseWgtToRunPathFromePath释放wgt资源包到运行时目录下。
  • 调用DCuniMPSDK.getInstance().startApp启动小程序

示例:

  1. String wgtPath = context.getExternalCacheDir().getPath()+"/__UNI__04E3A11.wgt";
  2. DCUniMPSDK.getInstance().releaseWgtToRunPathFromePath(wgtPath, new ICallBack() {
  3. @Override
  4. public Object onCallBack(int code, Object pArgs) {
  5. if(code ==1) {//释放wgt完成
  6. try {
  7. DCUniMPSDK.getInstance().startApp(context, "__UNI__04E3A11");
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }
  11. } else{//释放wgt失败
  12. Toast.makeText(context, "资源释放失败", Toast.LENGTH_SHORT).show();
  13. }
  14. return null;
  15. }
  16. });

启动uni小程序携带启动参数

调用DCUniMPSDK.getInstance().startApp启动uni小程序时。设置相应arguments(启动参数)参数即可。具体说明请阅读uni小程序SDK API参考手册中startApp方法相关说明。

示例

  1. try {
  2. JSONObject arguments = new JSONObject();
  3. arguments.put("a","1");
  4. DCUniMPSDK.getInstance().startApp(context, "__UNI__04E3A11", arguments);
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. }

启动uni小程序直达二级页面

调用DCUniMPSDK.getInstance().startApp启动uni小程序时。设置相应path(直达页面地址)参数即可。具体说明请阅读uni小程序SDK API参考手册中startApp方法相关说明。

示例

  1. try {
  2. DCUniMPSDK.getInstance().startApp(context,"__UNI__04E3A11", "pages/component/scroll-view/scroll-view");
  3. } catch (Exception e) {
  4. e.printStackTrace();
  5. }

Tips

  • 以上示例代码可参考uniMPSDK中DEMO示例。
  • 由于uni小程序是多进程架构,在跨进程启动 Activity 的时候,activty 不可以是 singleTask 方式,否则会有页面栈问题(从小程序进入一个 activity,返回之后发现回到主进程了)。

小程序应用管理

uni小程序的应用资源集成方式

  • 放在项目assets目录下 属于内置应用。无需开发者拷贝应用资源,直接通过appid 调用SDK的startApp启动即可。
  • 开发者自行下载或其他方式获取到.wgt文件(uni小程序应用资源包)后。可通过SDK的getAppBasePath获取运行时路径。自行解压释放.wgt文件到运行时路径。.wgt文件生成请参考第二步,生成小程序应用资源。也可通过SDK的releaseWgtToRunPathFromePath方法释放wgt资源包。释放完毕后通过startApp启动uni小程序。

uni小程序应用资源升级

  • 可通过SDK的getAppBasePath获取运行时路径。自行拷贝应用资源到运行时路径。也可通过SDK的releaseWgtToRunPathFromePath方法释放升级后的wgt资源包。直接替换原有应用资源。

uni小程序应用删除

  • 可通过SDK的getAppBasePath获取运行时路径。遍历查找出要删除的appid应用资源路径。执行file删除操作即可。
  • assets目录下属于内置应用。不支持删除操作。

发现错误?想参与编辑?在 GitHub 上编辑此页面!