開發(fā)環(huán)境準(zhǔn)備
此文章最適合第一次開發(fā)原生插件并且無(wú)原生開發(fā)經(jīng)驗(yàn)的攻城獅!
- uni-app 官方文檔地址:uni原生插件開發(fā)教程
- 原生插件必備離線SDK下載:Android 離線SDK - 正式版
- 要擁有JAVA環(huán)境 jdk1.8 版本,其他版本根據(jù)情況自我調(diào)整
- 想必讀者在看此文章之前電腦就有HBuilderX和Android Studio開發(fā)工具了吧(沒有?那看我干什么,夾菜啊!)
搓搓手,準(zhǔn)備開始啦
-
下載Android 離線SDK - 正式版
點(diǎn)擊進(jìn)入:Android 離線SDK - 正式版
進(jìn)入下載SDK官網(wǎng)后復(fù)制提取碼后進(jìn)入百度云直接下載最新版壓縮包
- 官方SDK解壓后圖解:
看到紅框內(nèi)的文件夾了吧,這就是你要完成偉大插件的文件夾
(最好把紅框內(nèi)文件拷貝后單獨(dú)放在一個(gè)你自己新建的開發(fā)插件文件夾內(nèi))
- Android Studio下載教學(xué),已有軟件讀者請(qǐng)?zhí)^(guò)
- 第一步到官網(wǎng)點(diǎn)擊小紅框按鈕
- 第二步下滑彈窗勾選同意協(xié)議并點(diǎn)擊下載
開始開發(fā)原生插件
一、導(dǎo)入項(xiàng)目
1.點(diǎn)擊Android Studio菜單選項(xiàng)File—>New—>Import Project后導(dǎo)入uni插件原生項(xiàng)目 UniPlugin-Hello-AS工程請(qǐng)?jiān)贏pp離線SDK中查找
2.導(dǎo)入以后目錄結(jié)構(gòu)如下,等待依賴導(dǎo)入完成
3. 粗略介紹一下項(xiàng)目的各個(gè)配置是怎樣的
先說(shuō)圖中的1,settings.gradle文件,指定項(xiàng)目名稱,include ':app’好像表示會(huì)打包成一個(gè)app而不是一個(gè)依賴庫(kù),依賴庫(kù)就是給其他項(xiàng)目引用的
圖中2,gradle.properties文件,配置運(yùn)行環(huán)境參數(shù)比如最大堆內(nèi)存等。android.useAndroidX=true和android.enableJetifier=true表示自動(dòng)使用androidx依賴庫(kù),如果使用到對(duì)應(yīng)的類會(huì)自動(dòng)引入androidx依賴包
org.gradle.jvmargs=-Xmx1536m
圖中3,External Libraries,下面是當(dāng)前項(xiàng)目的所有引用,可以從這里看到所有依賴jar
圖中4,build.gradle文件,在項(xiàng)目的根目錄下,如下,是關(guān)于從哪里下載依賴,以及一些項(xiàng)目級(jí)別的配置:
圖中的gradle、build、.idea、.gradle文件夾,這些是idea以及外部環(huán)境如何定義當(dāng)前項(xiàng)目,一般跟項(xiàng)目代碼無(wú)關(guān),可以不關(guān)注。
圖中5,textdemo,這個(gè)是項(xiàng)目自己寫插件demo目錄,籠統(tǒng)來(lái)講你開發(fā)的插件就是他(名字可以忽略隨便起的)
4.非常重要app文件講解
圖中1,build目錄,這個(gè)目錄是項(xiàng)目編譯后放字節(jié)碼文件,重新編譯前可以直接刪掉沒事
圖中2,libs目錄,存放依賴的jar包,放在這個(gè)目錄的jar會(huì)自動(dòng)添加到依賴(加上依賴就行:implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
圖中3, src\main\java,這是源碼目錄,存放所有源碼,也就是java類
圖中4, src\main\res,資源目錄,存放圖片,樣式,布局文件layout,等
圖中5,src\main\AndroidManifest.xml文件,相當(dāng)于web.xml文件文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-498593.html
原生插件開發(fā)
- 創(chuàng)建插件Library
- 切換至Project模式
- 在項(xiàng)目根目錄右擊File——>new——>new Module——>Android Library——>next
- 選擇Android Library,module name是你插件自定義名稱,其他配置按需分配后直接Finish
- 插件創(chuàng)建已完成,小紅框內(nèi)就是我們創(chuàng)建出來(lái)的插件模
- 配置插件在項(xiàng)目
- 在app目錄下的build.gradle下引入 textdemo
這里說(shuō)一下,每次修改配置文件,AS上方會(huì)有藍(lán)色提示框,點(diǎn)擊Sync New同步更新文件,如果有問(wèn)題的話點(diǎn)擊File下Sync Project with Gradle Files功能進(jìn)行同步文件 - 將applibs目錄下的 uniapp-v8-release.aar包(名字可能不一樣)引入到自己 插件里,必須引用!
- 在app/dcloud_uniplugins.json文件中添加插件信息
- 開始編寫插件代碼及功能
- 在modle目錄下創(chuàng)建TestModule類(自定義類)集成UniMoudle
- 提供一個(gè)demo代碼進(jìn)行演示,可以直接復(fù)制后進(jìn)行使用
public class TestModule extends UniModule {
JSCallback jsCallback;
String path = "";
/**
* 簡(jiǎn)單回調(diào)示例
* 傳入一個(gè)String類型 處理并返回
*/
@JSMethod(uiThread = true)
public void processData(String data, JSCallback jsCallback) {
this.jsCallback = jsCallback;
if (mWXSDKInstance != null && mWXSDKInstance.getContext() instanceof Activity) {
path = data + "+(處理完成)";
//返回處理結(jié)果 進(jìn)行回調(diào)
jsCallback.invoke(path);
}
}
/**
* 調(diào)用原生Toast顯示傳入內(nèi)容
*/
@JSMethod(uiThread = true)
public void showToast(String message, JSCallback jsCallback) {
if (mWXSDKInstance != null && mWXSDKInstance.getContext() instanceof Activity) {
Toast.makeText(mWXSDKInstance.getContext(), message, Toast.LENGTH_SHORT).show();
//返回處理結(jié)果 進(jìn)行回調(diào)
jsCallback.invoke("接收到了");
}
}
}
- 打包為aar插件包在uniapp項(xiàng)目?jī)?nèi)使用
- AS選中右側(cè)gradle選中當(dāng)前插件項(xiàng)目,點(diǎn)擊項(xiàng)目下other下assembleRelease進(jìn)行打包插件
- 打包完成后會(huì)在你選中的項(xiàng)目下出現(xiàn)build文件,下方圖中aar包就是你的插件包
本地插件開發(fā)
- 在你的uniapp項(xiàng)目下新建一個(gè)nativePlugins,多個(gè)插件都要有單獨(dú)的文件夾(就是圖中寫插件的那個(gè))存放
- 將上一步打包好的aar包按規(guī)定放入指定創(chuàng)建好的目錄下,編寫package.json文件
- 在需要引入插件功能的地方寫入一下代碼
//引用方式
const textdemo = uni.requireNativePlugin('textdemo');
textdemo.showToast({message:"Hello World"}, res => {
//插件回調(diào)
console.log(res)
})
- 打開HBuilderX項(xiàng)目下manifest.json下App原生插件配置中選擇本地插件選擇你自己的插件
- 制作自定義調(diào)試基座后通過(guò)真機(jī)調(diào)試連接手機(jī)進(jìn)行查看插件功能是否正常(切記基座選擇為自定義基座)
- 如果遇到當(dāng)前運(yùn)行的基座不包含原生插件[xxx],請(qǐng)?jiān)趍anifest中配置該插件,重新制作包括該原生插件的自定義運(yùn)行基座,解決方案如下
1 首先一定要檢查插件包nativePlugins下package.json中配置,絕大多數(shù)人問(wèn)題都出現(xiàn)在配置問(wèn)題
2 安裝自定義基座前,需要把已安裝在手機(jī)上的自定義基座刪除
3 是否在manifest中配置 (這種睿智操作一般不會(huì)犯)
4 原生插件是否使用自定義基座 (大部分是這個(gè)原因)
5 自己開發(fā)原生插件是否有錯(cuò)誤,未成功打包到基座 (原因是這個(gè)的概率很小,因?yàn)樵?Android Studio 離線打包的時(shí)候我們調(diào)試通過(guò)了,說(shuō)明插件沒有問(wèn)題。)
離線打包調(diào)試插件開發(fā)
- 生成本地打包APP資源
- 先在HBuilderX中生成本地包
- 控制臺(tái)會(huì)輸出路徑
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-498593.html
- 將項(xiàng)目下unpackage/resources的UNI xxxx包復(fù)制到AS app文件下src/main/assets文件中
每次修改uniapp項(xiàng)目代碼都需要重復(fù)此步驟去替換UNI xxxx包
- ** 申請(qǐng)App離線打包key**
- 點(diǎn)擊開發(fā)者中心去申請(qǐng)自己應(yīng)用的離線key
- 點(diǎn)擊保存會(huì)生成 appkey,后面要用到?。?!
- 繼續(xù)打開AS進(jìn)行配置操作,把我們剛才申請(qǐng)的appkey填寫到 app/src/main/AndroidManifest.xml 中,因?yàn)殚_發(fā)的是安卓,所以appkey填安卓的
- 把我們的簽名證書放到app目錄下,我的簽名證書名叫 uniapp.keystore
- 最后一步在app目錄下build.gradle中android{signingConfigs}添加以下代碼,就可以在AS連接手機(jī)去運(yùn)行項(xiàng)目調(diào)試插件啦
signingConfigs {
config {
keyAlias '證書別名'
keyPassword '證書密碼'
storeFile file('uniapp.keystore')//放在app目錄下的證書
storePassword '證書密碼'
v1SigningEnabled true
v2SigningEnabled true
}
}
如有問(wèn)題或者遇到坑可以私信博主
到了這里,關(guān)于uniapp Android原生插件開發(fā)和離線打包調(diào)試看這篇就夠了!(保姆級(jí)手把手教學(xué))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!