需求:
原生安卓 apk 要求嵌入到 uniapp 中,并通过 uniapp 前端调起 app 的相关组件。
下面手把手教你,从 apk 到 aar,以及打包冲突到如何运行,期间我所遇到的问题都会 一 一 进行说明,相关版本以我文章内为例子,其他版本如果存在差异请自行解决(不过一般也不会有很大差别啦)
官方文档传送门:uni原生插件开发教程
一、uniapp(这里以新建为主演示)
直接在 HBuilder 中新建即可
新建完成后,uniapp 工作台会创建对应的项目,等会生成 appkey 会用到(没有 dcloud 账号就创建一个)
二、Android环境(离线基座项目)搭建
因为我们是 Android 开发的,所以我们只看 Android 部分就可以了,开发环境如下:
首先下载对应 HBuilderX 对应版本的 SDK
1. 查看我们当前 HBuilder 的版本(建议升级到最新):
2. 点击以下红框部分,跳转到查下 Android sdk 界面,选择对应的版本下载,如果HBuilder 不是最新的,就到历史版本中下载对应的即可
3. 在 Android Studio 中,新建项目(选 java,当前项目是我们离线基座的apk,不是我们的项目的),记录下包名(以下我的相关配置):
4. 添加相关配置:
app 下 build.gradle:
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'androidx.webkit:webkit:1.3.0'
implementation 'com.facebook.fresco:fresco:2.5.0'
implementation "com.facebook.fresco:animated-gif:2.5.0"
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.squareup.okio:okio:1.15.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.12'
implementation 'com.github.bumptech.glide:glide:4.9.0'
下载后的sdk放进来(我们自己的aar包打包后直接放进来,然后同步即可):
可以看到,这个基座是一个 androidX 的项目 ,如果我们要引进来的项目是 support 的也没关系(我的就是 support 的)
5. 搞一个签名,签名网上有很多教程,这里我就不贴出来了,可以自行搜索,这里我贴一下我的配置,这个签名的作用,是为后面我们打包 apk 和申请 appkey 的时候用到的(离线打包自签名,咋搞都可以,只要签名能用):
6. AndroidManifest.xml
注意点:
(1)application 添加:tools:replace=“android:icon,android:allowBackup”
(2)provider 的 authorities需要改成你当前的 包名…dc.fileprovider,例如:android:authorities=“com.android.myapplication2.dc.fileprovider”
(3) 增加 dcloud_appkey,value 就是等会我们要去 uniapp 工作台申请的 appkey
<meta-data
android:name="dcloud_appkey"
android:value="xxx" />
完整示例如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.android.myapplication2">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name