手把手開發(fā)uniapp Android原生插件

一. 準備工作

二. 導入項目

將下載的App離線SDK解壓,用Android Studio打開目錄中的UniPlugin-Hello-AS目錄

三. 新建模塊

新建模塊1.png
新建模塊2.png
新建模塊3.png
dependencies {

//    implementation 'com.android.support:appcompat-v7:28.0.0'
//    testImplementation 'junit:junit:4.+'
//    androidTestImplementation 'com.android.support.test:runner:1.0.2'
//    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //必須添加的依賴
    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')
}
app中引入插件.png

四. 添加證書并生成dcloud_appkey(這里劃重點,很多文檔里面都沒有這個導致巴報錯)

  1. 打開HBuilderX 新建一個uniapp項目


    打開HBuilderX 新建一個uniapp項目.png
  2. 重新獲取appID(自己新建的項目不需要,復制別人的項目一定要重新獲取)


    重新獲取appId.png
  3. 打開dcloud開發(fā)者中心并登陸(https://dev.dcloud.net.cn/), 找到剛才新建的項目并進入
    image.png

    打開離線打包Key管理頁面.png
  4. 輸入我們的包名,下圖中的內容就是我們的包名(這里一定要注意包名是app的包名不是插件的包名)
    image.png
  5. 利用Android Studio生成證書


    生成證書1.png

    生成證書2.png

    生成證書3.png

    生成證書4.png

    生成證書5.png

    生成證書6.png

    生成證書7,修改build.gradle之后需要重新編譯.png

    查看證書的SHA1(很多同學打開沒有Tasks目錄,看一下張圖).png

    解決沒有Tasks目錄的問題.png

    最后我們將得到的SHA1復制到我們的離線打包管理中


    image.png

    然后我們就獲取到了Android的appkey
    image.png

    將appkey復制到AndroidManifest.xml文件中
    將appkey復制到AndroidManifest.xml文件中.png

五. 開發(fā)插件(這里就只寫Module開發(fā),Component開發(fā)大同小異,具體的可以全看官方文檔)

  1. 開發(fā)一個簡單的插件


    image.png
package com.guodong.myapplication;

import com.alibaba.fastjson.JSONObject;
import com.taobao.weex.annotation.JSMethod;

import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class TestPlugin extends UniModule {
    @JSMethod
    public void add(JSONObject json, UniJSCallback callback){
        final int a = json.getIntValue("a");
        final int b = json.getIntValue("b");
        callback.invoke(new JSONObject(){{
            put("code", 0);
            put("result", a+b);
        }});
    }
}

  1. 在app中引入插件


    image.png
{
      "plugins": [
        {
          "type": "module",
          "name": "TestPlugin",
          "class": "com.guodong.myapplication.TestPlugin"
        }
      ]
}

六. 生成頁面

  1. 回到HBuilder中開發(fā)demo頁面


    image.png
<template>
    <view class="content">
        <image class="logo" src="/static/logo.png"></image>
        <view class="text-area">
            <text class="title">{{title}}</text>
        </view>
        <button @click="handlerTest">1+1=</button>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                title: 'Hello'
            }
        },
        onLoad() {

        },
        methods: {
            handlerTest() {
                const testPlugin = uni.requireNativePlugin('TestPlugin');
                testPlugin.add({
                    a: 1,
                    b: 2
                },e=>{
                    uni.showToast({
                        title: JSON.stringify(e),
                        icon: 'none'
                    })
                })
            }
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
    }

    .logo {
        height: 200rpx;
        width: 200rpx;
        margin-top: 200rpx;
        margin-left: auto;
        margin-right: auto;
        margin-bottom: 50rpx;
    }

    .text-area {
        display: flex;
        justify-content: center;
    }

    .title {
        font-size: 36rpx;
        color: #8f8f94;
    }
</style>
  1. 點擊HBuilderX發(fā)布=>原生app-本地打包=>生成本地打包App資源


    image.png
  2. 將生成的__UNI__200DF91文件夾放到UniPlugin-Hello-AS/app/src/main/assets/apps目錄中


    image.png
  3. 修改dcloud_control.xml文件中的appId


    image.png

七. 運行項目

這里不出意外項目就能運行了,最終效果如下


image.png

八. 后面就是打包插件放入項目中,這些按照官方文檔來就沒什么難度了

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容