添加基礎依賴庫及資源文件
下載 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)
}
}
}