前言:最近公司要在H5项目中调用七牛云SDK,但是根据H5项目人员了解到好像用H5来做视频聊天不是很好友,于是经理决定在原生上面去实现视频聊天这块功能。说实话之前一直没接触过混合开发,在此之前在网上查阅了一些资料,看了下大致流程及H5与原生交互。总体来说难度不是很大,当然对于我这种第一次接触的小白也是一种挑战,于是乎在这里记录下大致流程:
1.H5打包资源文件
- 在H5项目中找到manifest.json配置文件,在对应的基础配置里面有个AppID,这个Id非常重要。后面引入到android studio 中要用到
- 注册账号:H5打包貌似都要先去Dcloud官网注册一个账号 DAccount Service
- 最后一步:打包资源文件,打包资源文件,打包资源文件切记是打包资源文件
然后选择生成本地打包app资源
2.将H5项目引入到android studio
- 下载5+sdk:开发环境 | uni小程序SDK 下载完成后将
这三个包添加到android studio 的libs目录下。
- android studio中配置builde.gradle:
implementation 'com.github.bumptech.glide:glide:4.11.0' // 基座依赖implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'])
- 新建assets目录:assets目录与res,java同级,然后在assets目录下新建apps和data两个文件(如果有疑问就参考上面的链接步骤来)在apps文件下放入H5打包好的资源文件。然后在data文件下放入
这个三个xml文件,其中dcloud_control中
这个appid请改成H5项目中的AppID.到此assets目录下的结构大致如此:
- 配置AndroidManifest文件:首先在application节点下面添加两个activity
<activity android:name="io.dcloud.PandoraEntry" android:configChanges="orientation|keyboardHidden|keyboard|navigation" android:hardwareAccelerated="true" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="user" 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="io.dcloud.PandoraEntryActivity" android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard" android:hardwareAccelerated="true" android:launchMode="singleTask" android:permission="com.miui.securitycenter.permission.AppPermissionsEditor" android:screenOrientation="user" android:theme="@style/DCloudTheme" android:windowSoftInputMode="adjustResize"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <action android:name="android.intent.action.VIEW" /> <data android:scheme="h56131bcf" /> </intent-filter> </activity> 这两个activity是固定的,不用修改。然后修改下application中的应用图标以及应用名称。(aplication中启动activity一定要与上面一致)
- 运行app,基本上跟H5差不多效果。最后:如果我们需要自定义application请一定继承:
DCloudApplication,创建android原生项目请一定创建java。因为5+sdk目前不支持kotlin项目.
3.H5与android页面跳转以及传参
- 这里就说下H5跳转到android原生页面及传参:
//获取宿主上下文
var main = plus.android.runtimeMainActivity();
//通过反射获取Android的Intent对象
var Intent = plus.android.importClass("android.content.Intent");
//通过宿主上下文创建
intent var intent = new Intent(main.getIntent());
//设置要开启的Activity包类路径
intent.setClassName(main, "com.example.yidoctor.QNViodeActivity");
//开启新的任务栈 (跨进程)
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//向原生界面传值操作
intent.putExtra("topicId","value");
intent.putExtra("patientId","value");
intent.putExtra("doctorId","value");
intent.putExtra("roomtoken","value");
//开启新的界面
main.startActivity(intent);
最后安装APK记得加上
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /
权限
如果加了混淆运行的时候提示那么在混淆文件中加上
-keep public class * extends io.dcloud.common.DHInterface.BaseFeature -keep public class * implements io.dcloud.common.DHInterface.IFeature
本文章讲解的是h5+sdk这种方式集成到android studio项目中,在官网文档中这种方式是不支持开启混淆的,因此如果发现按照上面的方式开启混淆后还是有各种问题的可以放弃混淆了。另外在html中跳转到原生页面的代码中intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);开启新的任务栈这个是必不可少的不然很可能导致页面不跳转。
总结:到此为止H5项目引入android原生以及简单交互就差不多了.如果你还有其他需求可自行参考其他资料。本人也是第一次接触混合开发,如果文章中有不对或者不全的地方欢迎大家指出,如果文章有帮助到你,请动动你的小手指点个赞支持下.蟹蟹!!!
更新时间:2023-11-27