开发APP中我们经常进行原生结合H5进行混合开发,下面将进行详细讲解Android原生集成MUI框架进行混合开发(项目Demo如下,有需要的可以下载查看),下一篇讲述,Android原生和MUI(也适合H5与原生交互)交互的实现。

1:mui官方框架介绍及开发要点:(https://dev.dcloud.net.cn/mui/)如下为官方页面:

今天我们就要把这个号称最接近原生开发的框架集成到我们Android原生本地中。

2:首先作为例子我们下载下来mui的官方框架Hellomui,以hellomui这个框架集成到我们的Android原生本地中去。

下载完成后使用H5开发工具HBuild X打开hellomui项目如下(正常在手机上运行):

3:在该项目中有个manifest.json的文件,打开该文件其中有个基础配置打开配置应用标识(AppID)点击从云端获取后生成如下(真正的项目中配置各种你开发项目中需要的配置信息,如权限,启动页,SDK配置,源码视图等配置):

这个AppID是集成打原生中需要配置的。然后点击运行—>原生App-本地打包—>生成本地App资源如下图,等待一会打包成功后底部会有生成本地资源包的路径至此H5端准备完毕:

4:在AndroidStudio中新建一个项目这里我新建一个项目叫AndroidMUI项目,一直点击下一步完成项目的构建(就是一个简单的HelloWorld的界面显示),然后下载Android集成需要的SDK(https://ask.dcloud.net.cn/article/103)找到最新的下载就可以了,下载后目录如下(这里有集成所需的全部配置和文件信息):

5:在AndroidStudio中打开AndroidMUI项目切换到project视图—>app下的libs中添加如下文件(这里只是简单的选取几个,文件是上图中SDK目录下的文件,这些文件很多可以适配所有开发者需要的类似于aar的SDK工具包,我们直接复制我们开发需要的并粘贴到app下的libs包中即可)如下所示:

6:在app—>src—>main文件夹下新建assets文件夹—>在改文件夹下新建两个文件夹apps和data文件夹,然后把我们HBuildX中打包的文件复制到apps文件夹下,在data中复制对应的文件(上述第四步中下载的目录中有个UniPlugin-Hello_AS文件夹,找到后打开是一个AndroidDemo项目,找到app—>src—>main文件夹下assets文件夹中的data文件夹下复制过来)配置后如下:

7:大开app下的build.gradle文件配置如下:

apply plugin: 'com.android.application'android {compileSdkVersion 26defaultConfig {applicationId "com.example.andyyuan.androidmui"minSdkVersion 19targetSdkVersion 26versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}aaptOptions {additionalParameters '--auto-add-overlay'//noCompress 'foo', 'bar'ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"}
}
repositories {flatDir {dirs 'libs'}
}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation fileTree(include: ['*.aar'], dir: 'libs')implementation 'com.android.support:appcompat-v7:26.1.0'implementation 'com.android.support.constraint:constraint-layout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

8:在AndroidManifest.xml文件中添加如下权限配置:

<!--hellomui中需要的权限-->
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="RECEIVE_USER_PRESENT"/>

在application节点下配置如下:

<applicationandroid:name=".MyApplication"android:allowClearUserData="true"android:hardwareAccelerated="false"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:largeHeap="true"android:persistent="true"tools:replace="android:name"><activityandroid:name="io.dcloud.PandoraEntry"android:configChanges="orientation|keyboardHidden|keyboard|navigation"android:hardwareAccelerated="true"android:label="@string/app_name"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@style/TranslucentTheme"android:windowSoftInputMode="adjustResize"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".MainActivity"><!--<intent-filter>--><!--<action android:name="android.intent.action.MAIN" />--><!--<category android:name="android.intent.category.LAUNCHER" />--><!--</intent-filter>--></activity>
</application>

9:在assets下的data中dcloud_properties.xml文件中添加如下插件配置:

<feature name="PGPlugintest" value="com.example.andyyuan.androidmui.PGPlugintest"/>

10:新增PGPlugintest.java文件如下:

/*** 5+ SDK 扩展插件示例* 5+ 扩扎插件在使用时需要以下两个地方进行配置* 1  WebApp的mainfest.json文件的permissions节点下添加JS标识* 2  assets/data/properties.xml文件添加JS标识和原生类的对应关系* 本插件对应的JS文件在 assets/apps/H5Plugin/js/test.js* 本插件对应的使用的HTML assest/apps/H5plugin/index.html* <p>* 更详细说明请参考文档http://ask.dcloud.net.cn/article/66**/
public class PGPlugintest extends StandardFeature {public void onStart(Context pContext, Bundle pSavedInstanceState, String[] pRuntimeArgs) {/*** 如果需要在应用启动时进行初始化,可以继承这个方法,并在properties.xml文件的service节点添加扩展插件的注册即可触发onStart方法* */}//
//    public void onStart(Context pContext, Bundle pSavedInstanceState, String[] pRuntimeArgs) {
//
//    /**
//     * 如果需要在应用启动时进行初始化,可以继承这个方法,并在properties.xml文件的service节点添加扩展插件的注册即可触发onStart方法
//     * */
//    }
//public void PluginTestFunction(IWebview pWebview, JSONArray array){Log.e(TAG, String.format("webview = %s, jsonArray = %s", pWebview, array));// Toast.makeText(mApplicationContext, array.toString(), Toast.LENGTH_SHORT).show();// 原生代码中获取JS层传递的参数,// 参数的获取顺序与JS层传递的顺序一致String CallBackID = array.optString(0);JSONArray newArray = new JSONArray();newArray.put(array.optString(1));newArray.put(array.optString(2));newArray.put(array.optString(3));newArray.put(array.optString(4));// 调用方法将原生代码的执行结果返回给js层并触发相应的JS层回调函数JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);}public String PluginTestFunctionSyncArrayArgu(IWebview pWebview, JSONArray array) {JSONArray newArray = null;JSONObject retJSONObj = null;try {newArray = array.optJSONArray(0);String inValue1 = newArray.getString(0);String inValue2 = newArray.getString(1);String inValue3 = newArray.getString(2);String inValue4 = newArray.getString(3);retJSONObj = new JSONObject();retJSONObj.putOpt("RetArgu1", inValue1);retJSONObj.putOpt("RetArgu2", inValue2);retJSONObj.putOpt("RetArgu3", inValue3);retJSONObj.putOpt("RetArgu4", inValue4);} catch (JSONException e1) {e1.printStackTrace();}return JSUtil.wrapJsVar(retJSONObj);}public String PluginTestFunctionSync(IWebview pWebview, JSONArray array) {String inValue1 = array.optString(0);String inValue2 = array.optString(1);String inValue3 = array.optString(2);String inValue4 = array.optString(3);String ReturnValue = inValue1 + "-" + inValue2 + "-" + inValue3 + "-" + inValue4;// 只能返回String类型到JS层。return JSUtil.wrapJsVar(ReturnValue, true);}}

OK,点击编译,运行成功!

Android原生集成MUI框架进行混合开发相关推荐

  1. Mac android原生工程中潜入react-native混合开发项目搭建

    最近公司有意向要用react-native做开发,自己在去年的时候也接触过,不过没有深入探讨,这两天,抽出时间看了看,顺便看了一下文档,做了一个简易的dome,由于我本人用的mac os 系统,Mac ...

  2. 连接真机开发安卓(Android)移动app MUI框架 完善购物车订单等页面——混合式开发(五)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 这周真的太忙了,就 ...

  3. android中使用tmf框架插件化开发的问题

    android中使用tmf框架插件化开发的问题 最近项目开发使用的是tmf框架,其中大多数都是通过源生和H5交互的方式来实现的,大体实现和别的三方框架是一样的,需要按照tmf的官方文档引入一些lib和 ...

  4. 连接真机开发安卓(Android)移动app MUI框架——混合式开发(一) (敲详细)

    从接触安卓开发的第一天起,我想我已经爱上了开发,哈哈哈,愿你我坚持下去的理由都是热爱,共勉!这几天没有更新博客,是因为我学习去了(没有相见的日子,我在努力哈哈哈).有想过用模拟器来运行的,但是模拟器太 ...

  5. 连接真机开发安卓(Android)移动app MUI框架——混合式开发(二) 带你项目开发(最新版)

    今天是很丧的一天,做什么都提不起兴趣,不知道何时才能做到道家的"无为,而无所不为",也无法理解范仲淹的"不以物喜不以己悲".可是再没兴趣,学习还是要继续!!!为 ...

  6. Android支付宝错误码62009,hb混合开发app 微信支付提示支付宝62009未知错误

    问题描述 hb混合开发app 微信支付提示支付宝62009未知错误 问题出现的环境背景及自己尝试过哪些方法 真机模拟测试 相关代码 获取通道 mounted(){ plus.payment.getCh ...

  7. 连接真机开发安卓(Android)移动app MUI框架 添加购物车等——混合式开发(四)

    这篇发得有点晚了,实属罪过! 以前高中月考的时候有幸进了一个学霸班坐了一个学霸的座位(应该是一位女学霸,桌子上面写着:如果不是因为生气而将事情变得更加严重,那么事情也不是那么的大了) 希望自己可以心情 ...

  8. 连接真机开发安卓(Android)移动app MUI框架 添加购物车等——混合式开发(四)...

    此文转载自:https://blog.csdn.net/hanhanwanghaha/article/details/110094728 这篇发得有点晚了,实属罪过! 以前高中月考的时候有幸进了一个学 ...

  9. 连接真机开发安卓(Android)移动app MUI框架 反馈意见、忘记密码、登录、底部选项卡、联系我们、导航等页面代码可拿——混合式开发(六)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 开头先分享个有趣的 ...

最新文章

  1. WPC大会新动态:合作伙伴采纳Windows Azure
  2. 《代码大全》阅读笔记02
  3. 操作系统学习(五) 、代码段和数据段描述符
  4. Windows编程之使用外部动态链接库——纸牌
  5. 【转】3.2(译)构建Async同步基元,Part 2 AsyncAutoResetEvent
  6. OpenYurt开箱测评|一键让原生K8s集群具备边缘计算能力
  7. Matlab7.0安装之后Runtime Error警告解决办法
  8. 谷歌浏览器添加扩展程序
  9. 一个校园互联网实验室的纳新试题(我的服务端开发笔试题)
  10. 怎么把PDF转换成Word?2种转Word方法技巧
  11. 无线蓝牙耳机哪个价位性价比最高?500以内最好的蓝牙耳机推荐
  12. ChatOps 如何帮助你更好地开发 DevOps
  13. Laravel 文件系统/存储
  14. 黑色简洁的PHP短网址短链接生成源码 可在后台添加广告
  15. Ymir平台部署安装
  16. Linux操作系统汇编语言基础知识(图文代码)
  17. 根据字符的首字母进行分类
  18. 小班关于计算机运用的教案,实用的小班教案四篇
  19. 洛谷P2056 采花
  20. 在 Windows 上卸载 Creative Cloud 桌面应用程序

热门文章

  1. 每个计算机的ip地址要一样吗,每台电脑的IP地址会变吗?一直都一样吗?
  2. [转]把自己从一个疯狂下载者变成一个学习者
  3. 在Debian上用FVWM做自己的桌面
  4. JAVA练习200-峰与谷
  5. 线程基础篇-线程同步
  6. 为什么论文中有的空格特别大
  7. avi格式该怎么转换?高效无损转换avi格式的方法
  8. proc oracle12c,Oracle12cRAC安装遭遇CLSRSC-507: The root script cannot proceed on this node
  9. vanish_3.0_ban
  10. sql根据指定符号拆分字符串表函数