原生應用集成uniMPsdk

添加基礎依賴庫及資源文件

下載 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.useAndroidXandroid.enableJetifier 都設置為 true

復制SDK資源到android項目目錄

sdk資源

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所在目錄
輸出路徑

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)
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • [TOC] 要開發原生插件的話,首先得去 DCloud 官網下載 DCloud SDK[1][#fn1]。DClo...
    JerryLOL閱讀 2,376評論 0 3
  • 目錄結構 一個uni-app工程,默認包含如下目錄及文件:┌─common 用于存放一些通用的 js...
    李霖弢閱讀 1,773評論 0 0
  • uni-app是一個使用Vue.js開發跨平臺應用的前端框架,開發者編寫一套代碼,可編譯到iOS、Android、...
    十佳少年閱讀 11,254評論 0 3
  • 1. 項目技術分類[#1-%E9%A1%B9%E7%9B%AE%E6%8A%80%E6%9C%AF%E5%88%8...
    科研者閱讀 2,783評論 0 1
  • 環境搭建 頁面外觀配置 數據綁定 uni-app的生命周期 組件的使用 條件注釋跨端兼容 uni-app的事件 導...
    不是隔壁的老王啊閱讀 2,628評論 0 0