最近在做一个关于uniapp的项目,遇到一个需求。有一个原生开发的aar的原生插件,不是插件市场的,开发说明原生开发的插件不可以直接提供给uniapp使用,需要按照uniapp原生插件开发文档重新制作成uniapp可以使用的aar。(半路出家)研究两天才捣鼓出来。整理一下步骤。
这边是将一个第三方的aar怎么变的在uniapp可以使用,所以不需要有很好的Android功底。
1.需要一个Android studio 我用的4.1.1版本
2.下载官方的SDK(注意hbuliderx的版本要和SDK版本匹配)
官方链接
3.下载完成后解压文件夹,用Android studio 打开Hello-AS
4.新建一个Module(Android Library)
然后配置好Module名称,包名,安卓SDK版本等,如下(注意红框MiniMum SDK最好不要大于19,不然uniapp打包的时候可能出现错误):
5.将app目录下libs文件下的文件拷贝到新建的module的libs文件夹下(humesdk-1.0.0)是我需要用的第三方aar
6.build.gradle文件,添加如下所示代码
class 是新建module的路径
7.编写自己的插件(必须继承UniModule,方法必须添加 @UniJSMethod(uiThread = true)其他的是我调用第三方插件的方法 callback.invoke,是在向js的回调函数,返回值,详情见官方文档)
8.生成uniapp可使用的aar(原生插件逻辑写完点击开发工具右侧的gradle,找到对应Module,双击如下所示跑完之后则可生成aar包待用。)
9.找到生成的aar(拷贝aar文件到uniapp你的项目下)
10(导入到uniapp项目,红色模块名称保持一致,黄色部分注意,如果你引用了第三方sdk一定要也要导入进来,不然可能执行的第三模块的方法不生效,calss 是新建module的路径class最后的 UpdateModule是业务逻辑文件).
11.最后选择本地插件,然后自定义基座云打包调试
本示例主要解决module中引用
aar
包依赖报错的问题,及
aar
包合并打成新
aar
包的问题。
aar
合并打包报错解决方案,library、module集成
aar
包报Execution failed for task ':
app
:mergeDebugNativeLibs、Could not resolve all dependencies for configuration 。如果你想将module打成
aar
包供其他项目
使用
,可以
使用
本示例解决。将
aar
包集成改为jar包集成。即将
aar
后缀改为zip,解压出jar包及资源文件(如果有),将jar包及资源文件(如果有)复制到相应的目录,按照jar包的方式集成。如果
aar
包中有通过R.id./R.layout.等方式
调用
资源文件,这种集成方式可能会报资源文件找不到。module中引用
aar
包,需要在project的build中配置路径,flatDir { dirs '../mylibrary/libs' }或者flatDir { dirs project(':mylibrary').file('libs') },需要注意的是,如果你更新了新版
uni
-
app
第三方
sdk
集成
重点。
aar
文件需要二次扩展
uni
-
app
无法直接
调用
java代码,需要java那边做一个
uni
-
app
的扩展module(参考地址https://nativesupport.dcloud.net.cn/NativePlugin/course/
android
?id=%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91)然后
uni
-
app
才能
调用
接口
在根目录下新建文件夹nativeplugins 格式如下
nativeplugins 固定
--uin
1.
Android
Studio
下载地址:
Android
Studio
官网 OR
Android
Studio
中文社区
2.HBuilderX
3.
App
离线
SDK
下载:最新
android
平台
SDK
下载
3.1.10版本起需要申请
App
key,具体请点击链接
SDK
目录说明
|-- HBuilder-Hello
App
离线打包演示应用
|-- HBuilder-Integrate-AS 集成
uni
-
app
的最简示例
|--
SDK
最近需要写一个功能包,提供给界面去
使用
.里面涉及到一个
第三方
的包,这时候我生成
aar
/jar包给对方
使用
的时候,
调用
不到
第三方
包的代码,只可以
调用
我写的类的代码.
我就去网上去寻找,
aar
/jar包生成包含
第三方
等问题.网上也有很多答案,我随便发一个别人的链接, https://blog.csdn.net/qq_20328181/article/details/84333750,都是差不多的.
在这时候我遇到问题.里面说合并jar包,我的问题是我
第三方
是用implementation(xx)导入的.在那里有jar包
?我又去网上去寻找,implementation这个导入的jar包
直接在这个demo中写
uniapp
的(
Android
)
原生
插件
的代码即可。
package.json
{"name": "xt-HelloWorld","id": "xt-HelloWorld",
"version": "1.0.0","description": "PictureView","_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"
android
": {
"hooksClass": "",
"plugins": [
"type": "module",
"name": "xt-HelloWorld",
"class": "com.example.helloworld.HelloWorld"}
],"integrateType": "
aar
",
"abis": []}}}
uniapp
生成
android
,集成商汤科技的
android
的
sdk
识别身份证信息
二、
开发
思路
uniapp
使用
Dcloudx软件的“
原生
打包”,然后集成到
android
项目中(参考了DCloudx的例子),发布成
android
包。
三、遇到的问题
1、
uniapp
与
android
Studio
集成问题
uniapp
集成
android
uniapp
和
android
间进行数据传输,方法
调用
uniapp
离线打包集成到
android
studio
中运行到真机提示
app
key不正确问题
您好,如果在
Android
中
调用
aar
时找不到so文件,可能是因为so文件未正确打包到
aar
中。您可以检查一下
aar
文件中是否包含了so文件,如果没有,请将so文件打包到
aar
中。另外,您也可以尝试在项目的build.gradle文件中添加以下代码来确保so文件被正确打包:
android
{
packagingOptions {
pickFirst '**/*.so'
这样可以确保在打包
aar
时,如果存在多个so文件,只会选择其中一个进行打包。希望能帮到您。
CSDN-Ada助手:
uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)
Miller_Jason:
uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)
newbie (⊙o⊙):
uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)
newbie (⊙o⊙):
uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)
Miller_Jason: