UniAPP-Android原生插件开发与打包
为什么要写这篇文章
官方给出的流程是这样的:
下载SDK:https://ask.dcloud.net.cn/article/103
创建Android Studio项目:https://ask.dcloud.net.cn/article/13232
开发原生插件:https://ask.dcloud.net.cn/article/35416
打包插件上传:https://ask.dcloud.net.cn/article/35414
看着感觉很蛋疼,尤其是原生插件开发,居然要我用v4v7的25版本。。。好吧,经过我慢慢摸索还是找到了一条比较靠谱的开发流程(虽说上面几个链接帮助挺大)。
如果你对Android Studio编程并不了解,此篇文章可能对您没有什么用处。
开发流程
1. 下载我封装好的项目
1.1. 修改pictureeditor_uni项目
1.1.1. 修改uniplugin_test项目
- 将AndroidManifest.xml中修改包名为自己插件包名,不可与项目包名重复。
- 修改java下com.test.plugin为刚刚修改的包名,这个包下只有一个类,类名自定义。假设这里包名是com.test.app,类名是SModule。
1.1.2. 修改app项目
- 修改res/values下的string.xml为你app的名称
- 修改drawable中的图标为对应app图标
- 修改assets下的apps.__UNI__YOURAPP.www为你app的ID并拷贝你的项目的本地打包资源到这里来。
- 修改assets下的dcloud_uniplugins.json中class为uniplugin_test项目的类名全拼,如假设所述,这里应该填com.test.app.SModule,name是用于js调用的时候的名称,推荐与类名一致,这里我写的PluginModule,type字段不要动,默认就是module。
- 修改assets下的data/dcloud_control.xml中的appid为你app的ID。
- 修改AndroidManifest.xml下的Manifest节点下的package为你的APP包名。
1.2. 修改uni_app_test项目
在hbuilderx中打开uni_app_test项目:
- 修改pages/index/index.vue的test方法,这里的uni.requireNativePlugin(‘PluginModule’);的PluginModule为你刚刚插件的名称,下面就可以根据你Module中的方法配置进行调用了。
- 在hbuilderx中点击发行->原生APP本地打包->生成本地APP打包资源,等待下面控制台跑完,输出“项目 'uni_app_test’导出成功,路径为:…”时打开这个链接。
- 替换掉uniplugin_test项目的app中的assets/apps.__UNI__YOURAPP,对应位置不要放错。
- 编译Android Studio项目就可以打包运行了。
2. 插件开发
2.1 导入现有项目
- 将现有的项目作为module导入刚刚封装好的项目中,将这个项目的:app改名成其它的。导入后如果出现编译版本问题,把编译版本targetSdkVersion改成28,buildToolsVersion改成"28.0.3".
- 将导入项目的AndroidManifest.xml的如下代码删掉(启动Activity)
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
- 将导入项目的build.gradle中的apply plugin: ‘com.android.application’ 修改为 apply plugin: ‘com.android.library’
- 删除build.gradle中android->defaultConfig中的applicationId
- 删掉重复的启动icon
- 启动项修改为app
- 在uniplugin_test项目中引入导入的项目,然后在插件的Module类中实现插件功能
- 调通可以运行即可
3.打包插件创建基座
先查看这个链接:https://ask.dcloud.net.cn/article/35414
3.1 创建插件目录
- 在你的uni_app_test项目中新建一个nativeplugins文件夹,里面内容如下:
其中PluginModule为你刚刚插件的名称。 - 修改package.json,PluginModule依然为你刚刚插件的名称,plugins节点里的内容和uniplugin_test下的app下的assets/dcloud_uniplugins.json的内容一致,permissions根据自己需要添加:
{
"name": "这里填你插件名称",
"id": "PluginModule",
"version": "1.0",
"description": "测试插件",
"_dp_type":"nativeplugin",
"_dp_nativeplugin":{
"android": {
"plugins": [
{
"type": "module",
"name": "PluginModule",
"class": "com.test.plugin.PluginModule"
}
],
"integrateType": "aar",
"minSdkVersion": "21",
"permissions": [
"android.permission.CAMERA",
"android.permission.RECORD_AUDIO",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.INTERNET"
]
}
}
}
3.2 获取aar文件
转到Android Studio项目中,找到你项目中的aar文件,里面有几个Module就复制几个aar文件。没有aar文件就去build一下项目就有了。将他们都复制出来统一放到android文件夹下,如果有jar包引用,把jar包放到libs文件夹下:
3.3 提交打包
运行->运行到手机模拟器->制作自定义基座,签名什么的自己弄,没有就用dcloud的。然后就云端打包把,等待成功提示,基座就做好啦~
注意! 不要放太多资源文件到aar中,dcloud对云端打包文件大小限制在40Mb以内,超额不能提交(- -所以我就离线了)