原生应用集成uniMPsdk

2022-05-30  本文已影响0人  失足者

添加基础依赖库及资源文件

下载 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)
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读