日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

uni-app混合原生安卓開發(fā)

作者:WongWoo1991 更新時間: 2022-05-12 編程語言

uni-app和原生App混合開發(fā)問題

首先務必確認uni-app和原生代碼,誰是主誰是從的問題。
1、如果你的應用是uni-app開發(fā)的,需要擴展一些原生能力,那么首先去插件市場看看有沒有現(xiàn)成的插件,如果沒有,就自己開發(fā),開發(fā)文檔請參考原生插件開發(fā)教程https://nativesupport.dcloud.net.cn/NativePlugin/course/android。
2、如果你的App是原生開發(fā)的,部分功能欄目想通過uni-app實現(xiàn),有2種方式:

  • 在原生App里集成uni小程序sdk,參考:https://nativesupport.dcloud.net.cn/README,相當于原生app擁有了小程序能力。
  • 如果不想集成原生sdk,那就把uni-app代碼發(fā)布成H5方式,在原生App里通過webview打開。

原生插件開發(fā)

現(xiàn)在我們只討論第一種情況,應用是uni-app開發(fā)的,需要擴展一些原生能力,即原生插件開發(fā)。

開發(fā)者須知

  • 已經(jīng)具備了相應Android應用開發(fā)經(jīng)驗,使用Android Studio開發(fā)過Android原生。
  • 也應該對HTML,JavaScript,CSS等有一定的了解, 能開發(fā)uni-app。

開發(fā)環(huán)境

  • JAVA環(huán)境 jdk1.8
  • Android Studio
  • App離線SDK下載:請下載2.9.8+版本的android平臺SDK

注意

  • 插件目前暫時不支持Kotlin
  • gradle版本注意事項
    HX3.0.0+版本云打包及相應版本SDK都將gradle版本4.6-all升級到6.5-all,tools.build:gradle版本3.2.1升級到4.1.1。

步驟

一、uni-app端

既然以uni-app開發(fā)主體,首先要有一個uni-app項目,新建項目testApp。
擴展 Module
Module 擴展 非 UI 的特定功能
創(chuàng)建Android Studio的Module模塊

  • 在現(xiàn)有Android項目中創(chuàng)建library的Module。例如uniplugin_module
  • 配置剛創(chuàng)建的Module的build.gradle信息。
    示例:
//導入aar需要的配置
repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    //必須添加的依賴
    compileOnly 'com.android.support:recyclerview-v7:28.0.0'
    compileOnly 'com.android.support:support-v4:28.0.0'
    compileOnly 'com.android.support:appcompat-v7:28.0.0'
    compileOnly 'com.alibaba:fastjson:1.1.46.android'

    compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')
}

Tips:
uniapp-v8-release.aar是擴展module主要依賴庫,必須導入此依賴庫!
創(chuàng)建TestModule類
Module 擴展必須繼承 UniModule 類
示例:

public class TestModule extends UniModule
  • 擴展方法必須加上@UniJSMethod (uiThread = false or true) 注解。UniApp 會根據(jù)注解來判斷當前方法是否要運行在 UI 線程,和當前方法是否是擴展方法。
  • UniApp是根據(jù)反射來進行調(diào)用 Module 擴展方法,所以Module中的擴展方法必須是 public 類型。

示例:

//run ui thread
@UniJSMethod(uiThread = true)
public void testAsyncFunc(JSONObject options, UniJSCallback callback) {
    Log.e(TAG, "testAsyncFunc--"+options);
    if(callback != null) {
        JSONObject data = new JSONObject();
        data.put("code", "success");
        callback.invoke(data);
    }
}

//run JS thread
@UniJSMethod (uiThread = false)
public JSONObject testSyncFunc(){
    JSONObject data = new JSONObject();
    data.put("code", "success");
    return data;
}

同樣因為是通過反射調(diào)用,Module 不能被混淆。請在混淆文件中添加代碼:

-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}

Module 擴展的方法可以使用 int, double, float, String, Map, List ,com.alibaba.fastjson.JSONObject 類型的參數(shù)

二、原生android端

在下載的離線SDK項目中修改

三、插件調(diào)試

本地注冊插件
以上兩種方式選一即可

  • 第一種方式
    在UniPlugin-Hello-AS工程下 “app” Module根目錄assets/dcloud_uniplugins.json文件。 在moudles節(jié)點下 添加你要注冊的Module 或 Component
  • 第二種方式
    創(chuàng)建一個實體類并實現(xiàn)UniAppHookProxy接口,在onCreate函數(shù)中添加組件注冊相關(guān)參數(shù) 或 填寫插件需要在啟動時初始化的邏輯。
    在UniPlugin-Hello-AS工程下 “app” Module根目錄assets/dcloud_uniplugins.json文件,在hooksClass節(jié)點添加你創(chuàng)建實現(xiàn)UniAppHookProxy接口的實體類完整名稱填入其中即可 (有些需要初始化操作的需求可以在此處添加邏輯,無特殊操作僅使用第一種方式注冊即可無需集成UniAppHookProxy接口)
    public class RichAlert_AppProxy implements UniAppHookProxy {
        @Override
        public void onCreate(Application application) {
            //當前uni應用進程回調(diào) 僅觸發(fā)一次 多進程不會觸發(fā)
          //可通過UniSDKEngine注冊UniModule或者UniComponent
        }

      @Override
      public void onSubProcessCreate(Application application) {
          //其他子進程初始化回調(diào) 可用于初始化需要子進程初始化需要的邏輯
      }
    }

dcloud_uniplugins.json說明

    nativePlugins: 插件跟節(jié)點 可存放多個插件
    hooksClass: 生命周期代理(實現(xiàn)AppHookProxy接口類)格式(完整包名加類名)
    plugins: 插件數(shù)組
    name : 注冊名稱
    class : module 或 component 實體類完整名稱
    type : module 或 component類型。

{
    "nativePlugins": [
        {
            "hooksClass": "uni.dcloud.io.uniplugin_richalert.apphooks",
            "plugins": [
            {
                "type": "module",
                "name": "DCloud-RichAlert",
                "class": "uni.dcloud.io.uniplugin_richalert.RichAlertModule"
            }
            ]
        }
    ]
}

四、集成uni-app項目測試插件

  • 安裝最新HbuilderX 大于等于1.4.0+

  • 創(chuàng)建uni-app工程或在已有的uni-app工程編寫相關(guān)的.nvue 和.vue文件。使用uni-app插件中的module 或 component。

  • xxx.vue 示例代碼(源碼請參考UniPlugin-Hello-AS項目中uniapp示例工程源碼文件夾的unipluginDemo工程)

  • 選擇 發(fā)行—>原生APP-本地打包—>生成本地打包App資源 等待資源生成!

  • 在控制臺會輸出編譯日志,編譯成功會給出App資源路徑

  • 把APP資源文件放入到UniPlugin-Hello-AS工程下 app Module根目錄assets/apps/測試工程appid/www對應目錄下,再修改assets/data/dcloud_control.xml!修改其中appid=“測試工程appid”!,測試工程UniPlugin-Hello-AS 已有相關(guān)配置可參考。具體可查看App離線打包。

  • appid注意 一定要統(tǒng)一否則會導致應用無法正常運行!

  • 配置"app"Module下的 build.gradle. 在dependencies節(jié)點添加插件project引用 (以uniplugin_richalert為例)

// 添加uni-app插件
implementation project(':uniplugin_richalert')
  • 運行測試。測試運行時一切要以真機運行為主

原文鏈接:https://blog.csdn.net/yu75567218/article/details/113345522

欄目分類
最近更新