添加基础依赖库及资源文件
下载 uniMPSDK压缩文件,解压后将 uniMPSDK/SDK 目录下的文件拷贝到宿主项目中,除 libs 目录下的依赖包(aar)按实际需求依赖拷贝。
uniMPSDK/SDK/libs下必须集成依赖包:
uniMPSDK-release.aar //必须集成
uniapp-release.aar //必须集成
sqlite-release.aar oaid_sdk_1.0.25.aar //必须集成 注意(3.0.7版本的SDK及以下版本请集成msa_mdid_1.0.13.aar)
messaging-release.aar
iBeacon-release.aar
fingerprint-release.aar
contacts-release.aar
Bluetooth-release.aar
android-gif-drawable-release@1.2.23.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'//必须集成
}
注:
1、3.1.0版本开始 unimpSDK的minSdkVersion从19调整到21
2、添加的依赖包(aar)内部引用的集成与外部的依赖可能会产生冲突, 解决是在 gradle.properties 里将android.useAndroidX 和 android.enableJetifier 都设置为 true
复制SDK资源到android项目目录
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'
}
注: 原生端集成的 uniMPSDK 版本需要与 HBuilderX的版本一致,否则可能会造成应用异常。如: uniMPSDK 版本是 3.3.8,那么程序需要用 HBuilderX 3.3.8的版本去编译才行。
生成小程序应用资源
首先在 HBuilderX 中选择 uni-app 项目,生成 uni 小程序资源。
选中您的项目,右键->发行->原生App-制作应用wgt包
注:HBuilderX 2.6.2 以下版本选项是 “原生App-制作移动App资源升级包”
项目编译完成后会在控制台,输出wgt包的路径,点击路径可以直接打开wgt所在目录
如图,__UNI__DE1079A.wgt就是应用资源包,(__UNI__DE1079A 为小程序的 appid)
导入小程序应用资源
内置uni小程序集成方式
1、解压小程序资源包,解压方法将资源包的扩展 .wgt 重命名为 .zip 然后使用解压软件打开。
2、在android原生项目。在主Module模块的assets路径下创建apps/(内置uni小程序的appid)/www 路径。例如:apps/__UNI__DE1079A/www。将之前导出的应用资源包解压释放到apps/__UNI__DE1079A/www路径下。
更新资源注意:内置uni小程序资源 更新资源时需要修改uniapp版本号(versionName、versionCode都需要修改)才会更新,如果版本号相同则不会更新需要注意!!!
代码实现
初始化uniMPSDK
调用uni小程序SDK的DCUniMPSDK.getInstance().initialize 进行初始化。
示例:
class App : Application() {
override fun onCreate() {
super.onCreate()
//初始化 uni小程序SDK ----start----------
val item = MenuActionSheetItem("关于", "gy")
val item1 = MenuActionSheetItem("获取当前页面url", "hqdqym")
val item2 = MenuActionSheetItem("跳转到宿主原生测试页面", "gotoTestPage")
val sheetItems: MutableList<MenuActionSheetItem> = ArrayList()
sheetItems.add(item)
sheetItems.add(item1)
sheetItems.add(item2)
Log.i("unimp", "onCreate----")
val config = DCSDKInitConfig.Builder()
.setCapsule(true)
.setMenuDefFontSize("16px")
.setMenuDefFontColor("#ff00ff")
.setMenuDefFontWeight("normal")
.setMenuActionSheetItems(sheetItems)
.setEnableBackground(true) //开启后台运行
.build()
DCUniMPSDK.getInstance().initialize(
this, config
) { b -> Log.i("unimp", "onInitFinished----$b") }
}
override fun attachBaseContext(base: Context?) {
MultiDex.install(base)
super.attachBaseContext(base)
}
}
启动小程序
调用 DCUniMPSDK.getInstance().openUniMP(mContext, appid)
示例:
private fun initClick() {
to_uni_app.setOnClickListener {
kotlin.runCatching {
var iUniMp = DCUniMPSDK.getInstance().openUniMP(mContext, "__UNI__DE1079A")
mUniMPCaches.put(iUniMp.appid, iUniMp)
}.onFailure {
it.printStackTrace()
}
}
}
设置DefaultMenuButton监听事件
调用SDK 的 DCUniMPSDK.getInstance().setDefMenuButtonClickCallBack
示例:
DCUniMPSDK.getInstance().setDefMenuButtonClickCallBack { appid, id ->
var uniMp = mUniMPCaches[appid]
when(id) {
"gy" -> {
Log.e("unimp", "点击了关于")
}
"hqdqym" -> {
Log.e("unimp", "onCreate----${uniMp?.currentPageUrl}")
}
"gotoTestPage" -> {
var intent = Intent()
intent.setClass(mContext, TestToNativePage::class.java)
DCUniMPSDK.getInstance().startActivityForUniMPTask(appid, intent)
}
}
}