uniapp調用原生android 方法,簡單教程

大步驟:

 

1:打包android原生sdk (例如廠家給了jar 或者so文件)

首先下載uniapp封裝好的原生項目,下載地址官方已經給出:官方教程 

下載地址

  • UniPlugin-Hello-AS工程請在App離線SDK中查找
  • 點擊Android Studio菜單選項File--->New--->Import Project。

 

 

 

 導入項目

 

 

 

  • 導入選擇UniPlugin-Hello-AS工程,點擊OK! 等待工程導入完畢。

 

 

 

 

根據官方介紹有兩類擴展插件 一個是擴展原生的UI 一個是擴展原生的java方法,這裏我們只擴展原生的java方法非UI的功能。例如廠商的sdk。我們不需要UI 只需要uniapp集成遠程插件,討論可以加我微信ldpcode,我也承接各種軟件項目。

接下來的步驟首先你要對android項目要有所瞭解,我是沒有android原生開發經驗的基礎上,探索寫得這個教程,有問題隨時指出。

1:創建Android Studio的Module模塊(這裏是在官方給的demo裏面創建 UniPlugin-Hello-AS 也就是這個項目裏面 )

  • 1 在現有Android項目中創建library的Module。例如uniplugin_ufh_module

 

 

 

 

 

 

 

 

 

  • 2 配置剛創建的Module的build.gradle信息

 

 

 

 這是我的原來的build.gradle文件內容

plugins {
    id 'com.android.library'
}

android {
    compileSdkVersion 32

    defaultConfig {
        minSdkVersion 30
        targetSdkVersion 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
View Code

我們需要添加以下代碼:

uniapp-v8-release.aar是擴展module主要依賴庫,必須導入此依賴庫!

//導入aar需要的配置
repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    //必須添加的依賴
    compileOnly 'androidx.recyclerview:recyclerview:1.0.0'
    compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'
    compileOnly 'androidx.appcompat:appcompat:1.0.0'
    compileOnly 'com.alibaba:fastjson:1.1.46.android'

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

 

新建一個module類

 例如我創建一個UHFmodule.java  

  • Module 擴展必須繼承 UniModule 類 (這是uniapp自己封裝的類)

 

 

 

我們開始寫擴展方法:

官方提示:

  • 擴展方法必須加上@UniJSMethod (uiThread = false or true) 註解。UniApp 會根據註解來判斷當前方法是否要運行在 UI 線程,和當前方法是否是擴展方法。
  • UniApp是根據反射來進行調用 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;
}

 

  • 同樣因爲是通過反射調用,Module 不能被混淆。請在混淆文件中添加代碼:
  • -keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章