一、安卓项目准备

官方文档

1.SDK引入

官方SDK下载地址

备注:目前官方文档有BUG,点击无法下载,需要右键,跳转链接

2.安卓准备

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

新建安卓项目后,将官方SDK解压得到

|-- uniMPSDK/SDK    //uni小程序SDK
    |-- assets        // assets资源文件
    |-- Libs        //依赖库
    |-- res            // 资源文件
    |-- src            //微信分享支付需要的activity
    |-- AndroidManifest.xml //模块配置信息
    |-- proguard.cfg  //混淆配置
/-- uniMPSDK/DEMO    //uni小程序SDK示例DEMO
/-- uniMPSDK\Features // 框架已有的原生功能依赖库
    |-- Features 依赖库说明.xls
    |-- libs //原生功能依赖库

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

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

 uniMPSDK-release.aar  //必须集成
 uniapp-release.aar //必须集成
 sqlite-release.aar
 msa_mdid_1.0.13.aar //必须集成 注意(2.8.0版本的SDK及以下版本请集成miit_mdid_1.0.10.aar)
 messaging-release.aar
 iBeacon-release.aar
 fingerprint-release.aar
 contacts-release.aar
 Bluetooth-release.aar
 android-gif-drawable-release@1.2.17.aar //必须集成
dependencies {
    implementation 'com.android.support:recyclerview-v7:28.0.0' //必须集成
    implementation 'com.android.support:support-v4:28.0.0' //必须集成
    implementation 'com.android.support:appcompat-v7:28.0.0' //必须集成
    implementation 'com.alibaba:fastjson:1.1.46.android' //必须集成
    implementation 'com.facebook.fresco:fresco:1.13.0'//必须集成
    implementation 'com.facebook.fresco:animated-gif:1.13.0'//必须集成
    implementation 'com.github.bumptech.glide:glide:4.9.0'//必须集成
}

必须集成的依赖库一定要集成。版本号尽量一致。如果依赖库不一致或未集成可能会出现页面显示异常等现象

将SDK资源复制到安卓目录内

在这里插入图片描述

gradle配置

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

//必须配置
def mfph = [
    //宿主包名
    "apk.applicationId" : "xxx.xxx.xxxxx",
]
android {
    defaultConfig {
        targetSdkVersion 26 //最优26 2.8.11开始支持29~30
        ndk {
            abiFilters 'x86','armeabi-v7a',"arm64-v8a" //不支持armeabi
        }
        manifestPlaceholders = mfph
    }
    //此处配置必须添加 否则无法正确运行
    aaptOptions {
        additionalParameters '--auto-add-overlay'
        //noCompress 'foo', 'bar'
        ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
    }
}
//导入aar需要的配置
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    //导入SDK相关依赖jar、aar
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation fileTree(include: ['*.aar'], dir: 'libs')
    //必须添加的依赖
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.alibaba:fastjson:1.1.46.android'
    implementation 'com.facebook.fresco:fresco:1.13.0'
    implementation 'com.facebook.fresco:animated-gif:1.13.0'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
}

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

3.uniApp准备

将uniapp打包为wgt文件或本地打包

备注:wgt解压后与本地打包一致
在这里插入图片描述

将小程序导入到安卓项目内

内置uni小程序集成方式

在这里插入图片描述

是在 src/main/assets/apps 内创建 __UNI__XXX/www 文件夹
并将wgt文件解压到www文件夹内
__UNI__XXX为uniapp的AppID

非内置uni小程序集成方式

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

本此使用的为内置uniapp方法,非内置uni小程序集成方式不做重点说明

二、安卓运行uniapp重新并通讯

Android uni小程序API参考手册

初始化uniMPSDK

import io.dcloud.feature.sdk.DCSDKInitConfig;
import io.dcloud.feature.sdk.DCUniMPSDK;
import io.dcloud.feature.sdk.DCUniMPJSCallback;
import io.dcloud.feature.sdk.MenuActionSheetItem;
MenuActionSheetItem item = new MenuActionSheetItem("关于", "gy");
List<MenuActionSheetItem> sheetItems = new ArrayList<>();
sheetItems.add(item);
DCSDKInitConfig config = new DCSDKInitConfig.Builder()
                .setCapsule(true)//设置是否使用胶囊按钮
                .setMenuDefFontSize("16px")//设置菜单默认按钮字体大小
                .setMenuDefFontColor("#ff00ff")//设置菜单默认按钮文字有颜色
                .setMenuDefFontWeight("normal")//设置菜单默认按钮上文字的粗细
                .setMenuActionSheetItems(sheetItems)//设置默认菜单按钮items
                .setEnableBackground(false)//设置小程序退出时是否进入后台
                .build();
DCuniMPSDK.getInstance().initialize(this, config);

启动uni小程序

确保已初始化完毕再调用!可通过DCUniMPSDK.getInstance().isInitialize()判断。

 try {
	DCUniMPSDK.getInstance().startApp(/**上下文(this) */,/**uniApp的AppId(__UNI__XXX)*/,/**跳转的页面路径*/)
 } catch (Exception e) {
	e.printStackTrace();
 }

安卓原生与uniApp间的通讯

安卓发送消息给uniApp

安卓发送消息
 try {
    JSONObject dataOfToUnaipp=new JSONObject();
    dataOfToUnaipp.put("Key","Value");
    DCUniMPSDK.getInstance().sendUniMPEvent("appData", dataOfToUnaipp);
} catch (Exception e) {
    e.printStackTrace();
}
小程序监听安卓所发送数据
uni.onNativeEventReceive(function(event, data){
    that.appData=`event:${event},data${data}`
});

监听为小程序已准备接收安卓发送的数据

uniApp发送消息给安卓

uniapp发送数据并接收回调
			uni.sendNativeEvent("aa",this.uniData, function(e){
			    this.uniData=e;
			});
安卓接收数据并发送回调
DCUniMPSDK.getInstance().setOnUniMPEventCallBack(new DCUniMPSDK.IOnUniMPEventCallBack() {
          @Override
          public void onUniMPEventReceive(String event, Object data, DCUniMPJSCallback callback) {
              callback.invoke( "测试数据");
     }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐