Flutter集成UniMPSDK(Uni小程序SDK)

这篇具有很好参考价值的文章主要介绍了Flutter集成UniMPSDK(Uni小程序SDK)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android 集成 UniMPSDK

1.下载并解压uni小程序 SDK。

SDK文件结构如下:

|--	SDK-Android@3.98-20231127
	|--	DEMO	//uni小程序SDK示例DEMO
	|--	SDK		//uni小程序SDK
		|--	assets	// assets资源文件
		|--	libs	//依赖库
		|--	res		// 资源文件
		|--	src		//微信分享支付需要的activity
		|-- proguard.cfg	//混淆配置

小程序打包基座:
提示:尽量与 UniMPSDK 版本一致

HBuilderX: 3.9.8
vue-cli @dcloudio/uvm版本: 3.0.0-3090820231124001

2.复制SDK资源到android项目相应的目录中。

libs依赖库配置

查看Flutter项目中android/app目录中是否存在libs文件夹,没有就创建。
SDK-Android@3.98-20231127/SDK/libs 中相应的依赖复制到 项目 android/app/libs/

libs 文件夹依赖库可根据功能需要进行增加或删除,除视频、地图、分享、支付、登录、直播pusher 等 SDK,只集成以下基础模块就可使用:

uniMPSDK-V2-release.aar  //必须集成,uni小程序sdk引擎需要
uniapp-v8-release.aar //必须集成,uni-app引擎需要
breakpad-build-release.aar //必须集成,breakpad用于采集系统崩溃日志
sqlite-release.aar
base_oaid_sdk.aar 必须集成 注意(3.3.8版本的SDK及以下版本请集成oaid_sdk_1.0.25.aar)
messaging-release.aar
iBeacon-release.aar
fingerprint-release.aar
contacts-release.aar
Bluetooth-release.aar
android-gif-drawable-release@1.2.23.aar //必须集成

assets 基础资源配置

1,将SDK-Android@3.98-20231127/SDK/assets/ 目录下的所有文件复制到 Flutter项目中android/app/src/main/assets/。(main目录下没有assets文件夹则自行创建)
2, Flutter项目中android/app/src/main/assets 目录中创建 apps 文件夹,用于放置 uni小程序打包发行的程序。
在小程序项目的 manifest.json 内获取并使用 uni-app 应用标识(AppID),也是我们之后指定操作小程序的标识。
vue-cli命令行打包:npm run build:app 生成本地包。
HBuilderX可视化界面打包:使用 【发行 => 原生App-本地打包 => 生成本地打包App资源】 生成本地包。
将打包好的uniapp小程序复制到apps文件下,apps文件夹结构必须如下:

├── apps
│   ├── __UNI__xxxxxxx  # 小程序1
│   │   └── www
│   │   │   └── ...     #小程序编码
│   ├── __UNI__xxxxxxx  # 小程序2
│   │   └── www
│   │   │   └── ...     #小程序编码 

proguard 混淆配置

SDK-Android@3.98-20231127/SDK/proguard.cfg 复制到Flutter项目中android/app/ 中。

3.修改android配置

修改MainActivity.kt配置文件

MainActivity.kt文件路径:Flutter项目/android/app/src/main/kotlin/com/example/xxxx/MainActivity.kt

package com.example.xxxx	//改成你自己的包名

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterFragmentActivity;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.Log
 
import io.dcloud.feature.sdk.DCUniMPSDK;
import io.dcloud.feature.sdk.Interface.IUniMP
import io.dcloud.feature.sdk.DCSDKInitConfig
import io.dcloud.feature.sdk.MenuActionSheetItem
import io.dcloud.common.adapter.util.Logger

class MainActivity: FlutterFragmentActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
        val messenger = flutterEngine.dartExecutor.binaryMessenger
        // Channel 对象
        val channel = MethodChannel(messenger, "UniMP_mini_apps")
        // Channel 设置回调
        channel.setMethodCallHandler { call, res ->
            // 根据方法名,分发不同的处理
            when(call.method) {
                // 打开指定的 UniMP 小程序
                "open" -> {
                    try {
                        // 接收 Flutter 传入的参数
                        val argumentAppID = call.argument<String>("AppID")
                        // 设置右上角胶囊操作菜单
                        val item = MenuActionSheetItem("关于", "about")
                        val sheetItems: MutableList<MenuActionSheetItem> = ArrayList()
                        sheetItems.add(item)
                        // 初始化uniMPSDK
                        val config = DCSDKInitConfig.Builder()
                                .setCapsule(true)
                                .setMenuDefFontSize("16px")
                                .setMenuDefFontColor("#2D2D2D")
                                .setMenuDefFontWeight("normal")
                                .setMenuActionSheetItems(sheetItems)
                                .build()
                        DCUniMPSDK.getInstance().initialize(this, config)
 
                        // 打开小程序
                        val unimp: IUniMP = DCUniMPSDK.getInstance().openUniMP(this, argumentAppID)
                        // 监听胶囊菜单点击事件
                        DCUniMPSDK.getInstance().setDefMenuButtonClickCallBack { argumentAppID, id ->
                            when (id) {
                                "about" -> {
                                    Logger.e(argumentAppID + "点击了关于")
                                }
                            }
                        }
                        // 监听小程序关闭
                        DCUniMPSDK.getInstance().setUniMPOnCloseCallBack { argumentAppID -> Log.e("unimp", argumentAppID + "被关闭了") }
                    } catch (e: Exception) {
                        e.printStackTrace()
                    }
                }
 
                else -> {
                    // 如果有未识别的方法名,通知执行失败
                    res.error("error_code", "error_message", null)
                }
            }
        }
    }
} 

修改build.gradle配置文件

plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

android {
    namespace "com.example.life_app"
    compileSdkVersion flutter.compileSdkVersion
    ndkVersion flutter.ndkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.life_app"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        //uni小程序sdk配置
        ndk {
            abiFilters 'x86','x86_64','armeabi-v7a','arm64-v8a' // 不支持armeabi
        }
    }

    buildTypes {
        release {   //发布
            // 注意点:minifyEnabled 混淆和shrinkResources移除无用资源需同时为true或false,否则可能导致编译失败!
            minifyEnabled true  //是否进行混淆
            shrinkResources true  //删除无用资源
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'proguard.cfg' //指定混淆规则文件
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug //设置签名信息
        }
    }
    //uni小程序sdk配置(此处配置必须添加 否则无法正确运行)
    aaptOptions {
        additionalParameters '--auto-add-overlay'
        //noCompress 'foo', 'bar'
        ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
    }
}

flutter {
    source '../..'
}

// uni小程序sdk配置(导入aar需要的配置)
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    //uni小程序sdk配置(导入SDK相关依赖jar、aar)
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation fileTree(include: ['*.aar'], dir: 'libs')
    //uni小程序sdk配置(必须添加的依赖)
    implementation 'androidx.recyclerview:recyclerview:1.0.0' //必须集成,android 自带recyclerview支持
    implementation 'androidx.legacy:legacy-support-v4:1.0.0' //必须集成,androidx support支持
    implementation 'androidx.appcompat:appcompat:1.0.0' //必须集成,androidx appcompat支持
    implementation 'com.alibaba:fastjson:1.2.83' //必须集成,fastjson功能需要
    implementation 'com.facebook.fresco:fresco:2.5.0'//必须集成,图片加载需要
    implementation 'com.facebook.fresco:animated-gif:2.5.0'//必须集成,图片加载需要
    implementation 'com.github.bumptech.glide:glide:4.9.0'//必须集成,图片加载需要
    implementation 'androidx.webkit:webkit:1.3.0' //3.6.15版本之后 必须集成,用来支持暗黑模式
}


4.Flutter项目中调用


  Widget build(BuildContext context) {
    const channel = MethodChannel('UniMP_mini_apps');

    Future callNativeMethod(String appID) async {
      try {
        // 通过通道,调用原生代码代码的方法
        final future = await channel.invokeMethod("open", {"AppID": appID});
        // 打印执行的结果
        print(future.toString());
      } on PlatformException catch (e) {
        print(e.toString());
      }
    }

    return Scaffold(
        body: Center(
      child: GestureDetector(
        onTap: () async {
          await callNativeMethod("__UNI__359FE36");
        },
        child: const Text('打开uni小程序'),
      ),
    ));
  }

本文参考以下链接:
https://amoshk.top/2022050801/文章来源地址https://www.toymoban.com/news/detail-853584.html

到了这里,关于Flutter集成UniMPSDK(Uni小程序SDK)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Flutter]导入singular_flutter_sdk后运行到Android报错

    接入归因之前,flutter项目一起正常。接入归因之后,iOS正常Android有问题。 针对 Flutter 的 Singular SDK 集成指南 https://support.singular.net/hc/zh-cn/articles/4408894547227-%E9%92%88%E5%AF%B9-Flutter-%E7%9A%84-Singular-SDK-%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97 android/app/build.gradle android/build.gradle settings.gradle gradle

    2024年04月14日
    浏览(80)
  • mac 修改flutter sdk配置

    问题描述:我mac电脑上有高低2个版本的flutter sdk,我需要低版本sdk的项目在setting里设置了sdk版本,可是命令行还是提示我版本过高。 直接上解决办法: 打开mac终端,输入open -e .bash_profile,然后修改下方圈起来的flutter版本ok。

    2024年01月25日
    浏览(59)
  • Flutter配置Android SDK路径

    在使用VSCode作为开发Flutter的工具时,当选择调试设备时,通常看不到android的模拟器,只能看到Chrome之类的。 原因就是Flutter找不到Android的SDK路径,所以无法识别模拟器,我们用flutter doctor命令检查环境时,就好看到提示。 我们只需要为Flutter指定正确的SDK路径即可,命令如下

    2024年02月07日
    浏览(43)
  • Flutter项目的sdk版本管理工具

    flutter項目的sdk版本使用是一個很尴尬的问题,一个项目一个SDK,电脑系统还只能装一个SDK,这就使我们开发当中很尴尬,好几个项目分别使用不同的SDK就很难办了,不可能来回升级降级SDK,现在市面有SDK版本管理工具,虽然不是很友好,但是也算一个解决办法,下面说一下解

    2024年04月14日
    浏览(52)
  • Flutter iOS 集成使用 flutter boost

    在 Flutter项目中集成完 flutter boost,并且已经使用了 flutter boost进行了路由管理,这时如果需要和iOS混合开发,这时就要到 原生端进行集成。 注意:之前建的项目必须是 Flutter module 项目,并且原生项目和flutter module项目在同一个文件夹下面 下面是原生端集成 flutter boost的步骤

    2024年02月13日
    浏览(33)
  • Flutter:Android/iOS集成Flutter模块

    一、Android工程集成Flutter模块工程: 1.使用命令创建Flutter模块工程lib_flutter(与Android工程属于同级目录): 2.更新Android工程配置: (1)将Android工程Support V4/V7包替换为AndroidX包,右键点击工程,在弹出菜单中选择 Refactor   Migrate to AndroidX...,然后在左下角弹出的框中,点击Do Refac

    2024年02月06日
    浏览(41)
  • Flutter 版本更新 和 dart SDK版本跟新

    报错啦怎么办? 找到了我的电脑里面dart SDK的位置, D:Flutterflutterbincachedart-sdk 我认为是dart的版本不够的时候,我就去下载新的dart SDK(下载地址:Archive | Dart ),然后去替换我之前的dart-sdk,然后就出现问题了,官方的flutter sdk中已经自带了匹配版本的dart sdk。所以不要自

    2024年02月14日
    浏览(43)
  • flutter TARGET_SDK_VERSION和android 13

    config.gradle app/build.gradle里面的 有时候谷歌会让你发的app版本起码为android 13,那就要改上面的TARGET_SDK_VERSION

    2024年02月11日
    浏览(44)
  • Flutter集成Unity

    最近做项目时需要用到Flutter来做跨平台开发,但是项目中又用到了虚拟场景,这样一来就涉及到了Unity,那么总结下来便是用AndroidStudio来创建Flutter项目,将Unity项目嵌入到Flutter项目中,本篇文章就给大家分享一下Flutter集成Unity的详细过程,下一篇再给大家分享 Flutter与Unity之

    2023年04月09日
    浏览(62)
  • Flutter 与第三方 Native-SDK 的交互代理方案

    场景 在使用 Flutter 进行功能模块或者整体项目的开发时,如果需要(阶段性)频繁地和某个第三方 Native-SDK 进行交互,而该 Native-SDK 没有实现 Flutter 插件版本的情况下,如果直接把这部分交互 API 加入到原有的 channel 类里面,会使得该 channel 类变得臃肿,造成代码维护及迭代

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包