提交 208a8533 编写于 作者: 张磊

Merge remote-tracking branch 'remotes/origin/dev'

......@@ -15,6 +15,22 @@
* [源码和示例](sample.md)
* [uni错误规范](https://uniapp.dcloud.net.cn/tutorial/err-spec.html)
* [跨平台框架及原生对比](select.md)
* 离线打包
* [概述](native/README.md)
* Android离线打包
* [原生工程配置](native/use/android.md)
* 模块配置
* [内置模块](native/modules/android/others.md)
* [uni-ad](native/modules/android/uni-ad.md)
* [uni-facialRecognitionVerify](native/modules/android/uni-facialRecognitionVerify.md)
* [uni-payment](native/modules/android/uni-payment.md)
* [uni-push](native/modules/android/uni-push.md)
* [uni-video](native/modules/android/uni-video.md)
* [uni-verify](native/modules/android/uni-verify.md)
* [资源导入](native/export/export.md)
* [调试](native/debug/android.md)
* [打包发行](https://nativesupport.dcloud.net.cn/AppDocs/package/android.html)
* [离线SDK](native/download/android.md)
* 更新日志
* [正式版](release.md)
* [Alpha 版](release-note-alpha.md)
## 简介
`uni-app x 原生SDK`是为iOS和Android原生工程师提供的开发工具包。
把uni-app x的runtime封装为原生开发调用的接口。开发者可以在自己的 Android 及 iOS 原生开发环境配置工程使用,包括 Android原生SDK 及 iOS原生SDK。
`uni-app x 原生SDK`在某种程度上类似于react native/weex/flutter的SDK,但范围要更大。
因为上述几个跨平台SDK主要是渲染引擎,提供了一个view给原生开发者使用。
而uni-app x提供了一个完整的应用,有页面管理、众多组件和API。
所以在原生应用中集成uni-app x原生SDK,更像是集成一个小程序SDK。
当然uni-app x的性能是最好的,它不会像小程序那样缓慢,也比react native/weex/flutter等性能和兼容性更好(评测[另见](../../select.md)
uni-app x原生SDK,给原生开发者提供了更多可能性:
1. 一个最高性能的跨平台框架,让开发效率、运行性能、开发成本这个原来的不可能三角变成可以兼得
2. 渐进式的使用,把某些页面使用uni-app x来开发,嵌入之前的原生工程中
3. 使用自己的原生工程集成环境来打包和发版(即相对于云打包的离线打包)
当然本sdk也可以用于App本地离线打包,相当于新建一个空的原生项目,把uni-app x 原生sdk集成进去然后本地打包。
## 关系
这里有3个概念:
1. 原生工程:开发者的既有工程
2. uni-app x 原生SDK:需在uni-app x官方下载的SDK,分Android版和iOS版
3. uni-app x 应用原生资源:开发者在HBuilderX中新建的uni-app x项目,通过发行菜单或HBuilderX的cli导出的应用原生资源
使用流程一般是:
1. 开发者在HBuilderX新建uni-app x项目,进行开发
2. 在HBuilderX中导出应用原生资源,生成一批kt或swift代码及相关图片等附件资源
3. 开发者在原生工程中引入uni-app x原生SDK,合并入导出的应用原生资源,整体运行编译
+ [Android平台App本地离线打包](./use/android.md)
+ iOS平台App本地离线打包(暂不支持)
## 配置项目
1. 在app模块的build.gradle下添加如下依赖
```groovy
dependencies {
implementation "com.squareup.okhttp3:okhttp:3.12.12"
}
```
2. 将debug-server-release.aar拷贝到主项目的libs目录下
3. 在AndroidManifest.xml的application节点下添加如下内容
```xml
<meta-data android:name="DCLOUD_DEBUG" android:value="true"/>
```
## 生成调试安装包
### 应用配置
打开build.gradle文件,修改versionCode和versionName字段,如下图:
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-1.png)
versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中versionCode值一致
versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中versionName值一致。
### 生成安装包
**注意:自定义基座不支持aab包。**
点击Build->Generate Signed Bundle/APK...,如下图:
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-2.png)
选择 APK 选项,点击Next
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-3.png)
选择项目(Module),即当前需要打包的项目,注意:如果创建的项目是Library的话,不会显示在此列表里
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/7-4.png)
选择证书,如果没有证书的话,点击Create new... 新建,如果已有证书,可以点击Choose exiting... 选择已有证书
创建证书
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-4.png)
输入密码(key store password对应上图第一个password,key password 对应上图第二个password),点击Next。
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-5.png)
生成apk,Build Variants建议选release(正式发行尽量杜绝选择debug),Signature Versions建议都选,点击Finish。
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-6.png)
打包完成
若apk打包成功,会在Android studio 右下角显示打包成功提示框,如下图。
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/6-7.png)
点击locate即可跳转到安装包所在目录。
## 导入HBuilderX
1. 将生成的apk文件重命名为`android_debug.apk`
2.`android_debug.apk`拷贝到uni-app x项目的unpackage/debug目录下
3. 点击 运行按钮->运行到Android App基座,勾选`使用自定义基座运行`
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/debug_hx.png)
### 生成离线打包app资源
#### 通过 HBuilderX 可视化界面创建的项目
选择项目,然后点击:发行 -> 原生App-本地打包 -> 生成本地打包App资源
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/export.jpg)
导出成功之后会在项目的unpackage/resources目录下生成资源文件
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/resources.png)
目录说明:
- `app-android` 对应的是android原生代码及资源文件
- `appid` android导出的资源文件
- `uniappx` 导出的android原生kotlin文件
- `uni_modules` 导出的uts原生插件
- `app-ios` 对应的是android原生代码及资源文件
- `appid` ios导出的资源文件
- `uni_modules` 导出的uts原生插件
***
注意:
- uni-app x导出的资源文件android和ios不互通!
***
### 导入Android项目
[将资源导入Android原生项目](../use/android.md)
\ No newline at end of file
## API与对应的库参照表
|模块名称 |本地依赖库 |线上依赖库 |最低支持安卓版本 |依赖的模块 |
|:-- |:-- |:-- |:-- |:-- |
|uni-createRequestPermissionListener|uni-createRequestPermissionListener-release.aar |- |- |- |
|uni-createWebviewContext |uni-createWebviewContext-release.aar |- |- |- |
|uni-fileSystemManager |uni-fileSystemManager-release.aar |- |- |- |
|uni-getLocation-system |uni-getLocation-system-release.aar |- |- |- |
|uni-getNetworkType |uni-getNetworkType-release.aar |- |- |- |
|uni-installApk |uni-installApk-release.aar |- |- |- |
|uni-network |uni-network-release.aar |com.squareup.okhttp3:okhttp:3.12.12 |- |- |
|uni-websocket |uni-websocket-release.aar |com.squareup.okhttp3:okhttp:3.12.12 |- |- |
|uni-cloud-client |uni-cloud-client-release.aar |- |- |uni-media<br/>uni-network |
|uni-media |uni-media-release.aar<br/>nativeobj-preview-release.aar|com.github.bumptech.glide:glide:4.9.0<br/>androidx.recyclerview:recyclerview:1.0.0<br/>androidx.appcompat:appcompat:1.0.0 |- |uni-prompt |
各模块对应的API可参考文档[App端支持的内置模块列表](https://doc.dcloud.net.cn/uni-app-x/collocation/manifest-modules.html#utsmodules)
## 配置
根据编译出来的`unpackage/resource/app-android/{appid}/manifest.json`中的`app->distribute->modules`下的模块配置。
### 配置本地依赖库
将上表中本地依赖库对应的aar拷贝到app模块的libs目录下
### 配置线上依赖库
将上表中的线上依赖库添加到app模块的build.gradle中。以`uni-network`为例,参考:
```
dependencies {
implementation 'com.squareup.okhttp3:okhttp:3.12.12'
}
```
## 其他模块
[uni-ad](/native/modules/android/uni-ad.md)
[uni-video](/native/modules/android/uni-video.md)
[uni-push](/native/modules/android/uni-push.md)
[uni-facialRecognitionVerify](/native/modules/android/uni-facialRecognitionVerify.md)
[uni-verify](/native/modules/android/uni-verify.md)
[uni-payment](/native/modules/android/uni-payment.md)
## uni-AD
### aar说明
|广告SDK |aar依赖 |线上依赖 |说明 |
|:-- |:-- |:-- |:-- |
|基础模块 |uni-ad-release.aar<br/>uni-ad-splash-release.aar<br/>uniad-native-release.aar |- |广告基础模块及开屏广告,必选 |
|优量汇 |uniad-gdt-release.aar<br/>GDTSDK.unionNormal.aar |- |可选 |
|GroMore |uniad-gromore-release.aar<br/>open_ad_sdk.aar |- |可选 |
|快手 |uniad-ks-release.aar<br/>ks_adsdk-ad.aar |- |可选 |
|百度 |uniad-bd-release.aar<br/>Baidu_MobAds_SDK.aar |- |可选 |
|sigmob |uniad-sgm-release.aar<br/>windAd.aar<br/>wind-common.aar |- |可选 |
广告需要根据[uni_AD后台](https://uniad.dcloud.net.cn/)按照广告开通情况将对应的广告渠道aar拷贝到libs下。**基础模块必须添加。**
### 添加联盟ID
在主项目的build.gradle的下添加联盟ID:
```groovy
defaultConfig {
...
buildConfigField "String", "DCLOUDUnionId", "\"联盟ID\""
}
```
***
说明:联盟ID位于:[uni-AD后台](https://uniad.dcloud.net.cn/)->首页->联盟ID
***
\ No newline at end of file
## uni-facialRecognitionVerify
### 本地依赖库
|本地依赖库名称 |
|:-- |
|APSecuritySDK-DeepSec-7.0.1.20230914.jiagu.aar |
|Android-AliyunFaceGuard-10042.aar |
|aliyun-base-2.3.7-20231102102722.aar |
|aliyun-facade-2.3.7-20231102102722.aar |
|aliyun-face-2.3.7-20231102102722.aar |
|aliyun-faceaudio-2.3.7-20231102102722.aar |
|aliyun-facelanguage-2.3.7-20231102102722.aar |
|aliyun-wishverify-2.3.7-20231102102722.aar |
|facialRecognitionVerify-support-release.aar |
|uni-facialRecognitionVerify-release.aar |
将本地依赖库复制到app项目的libs下
### 线上依赖库
|线上依赖库名称 |
|:-- |
|com.squareup.okhttp3:okhttp:3.11.0 |
|com.squareup.okio:okio:1.14.0 |
|com.alibaba:fastjson:1.2.83 |
|com.aliyun.dpa:oss-android-sdk:+ |
将线上依赖库添加到app项目的build.gradle下
\ No newline at end of file
## uni-payment
### 微信支付
|本地依赖库名称 |
|:-- |
|wechat-sdk-android:6.8.0.aar |
### 微信支付
|本地依赖库名称 |
|:-- |
|alipaysdk-android:15.8.17.aar |
将本地依赖库复制到app项目的libs下
\ No newline at end of file
## uni-push
### Gradle配置
首先需在项目根目录下的build.gradle增加个推仓库源
```
allprojects {
repositories {
jcenter()
google()
// 个推的Maven仓库地址。
maven {
url 'https://mvn.getui.com/nexus/content/repositories/releases'
}
}
}
```
项目应用下的build.gradle
```
android {
defaultConfig {
manifestPlaceholders = [
"GETUI_APPID" : "%GETUI_APPID%",
"PUSH_APPID" : "%PUSH_APPID%",
"dcloud_unipush_auto_notification":"%透传时是否自动创建通知,布尔类型%"
// 厂商推送配置
//小米
"MIPUSH_APPID":"%MIPUSH_APPID%",
"MIPUSH_APPKEY":"%MIPUSH_APPKEY%",
//魅族
"MEIZUPUSH_APPID":"%MEIZUPUSH_APPID%",
"MEIZUPUSH_APPKEY":"%MEIZUPUSH_APPKEY%",
//OPPO
"OPPOPUSH_APPKEY":"%OPPOPUSH_APPKEY%",
"OPPOPUSH_APPSECRET":"%OPPOPUSH_APPSECRET%",
//华为
"com.huawei.hms.client.appid":"%com.huawei.hms.client.appid%",
//vivo
"com.vivo.push.app_id":"%com.vivo.push.app_id%",
"com.vivo.push.api_key":"%com.vivo.push.api_key%",
//荣耀
"com.hihonor.push.app_id":"%com.hihonor.push.app_id%",
]
}
}
dependencies {
implementation 'com.getui:gtc:3.2.13.0' //个推核心组件
implementation 'com.getui:gtsdk:3.3.6.0' //个推SDK
}
```
`GETUI_APPID``PUSH_APPID` 在开发者中心->uni-push->2.0->消息推送->配置管理->应用配置->AppID,请务必填写一致,`PUSH_APPID`字段是与一键登录出现AppID冲突时优先读取。
厂商相关的字段内容,在开发者中心->uni-push->2.0->厂商推送设置。
### 本地依赖库
|名称 |备注|
|:-- |:--|
|uni-push-release.aar ||
|gt-lib.aar | 包含厂商推送依赖库|
将本地依赖库复制到app项目的libs下。
#### 华为配置
##### Gradle配置
* 需在项目根目录下的build.gradle增加华为推送的仓库地址
```
buildscript {
repositories {
jcenter()
google()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
// 增加agcp配置。
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
allprojects {
repositories {
jcenter()
google()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
```
* 项目应用下的build.gradle
在文件头 apply plugin: 'com.android.application' 下一行添加如下配置。
```
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
```
* 添加添加华为推送的配置文件
登录华为的AppGallery Connect网站,找到需要集成华为推送的应用,在“项目设置 > 常规”页面的“应用”区域,点击`agconnect-services.json`下载配置文件。
`agconnect-services.json`文件拷贝到应用级根目录下即可。
## uni-verify
### 本地依赖库
|名称 |
|:-- |
|uni-verify-release.aar |
|GY-3.1.6.3-release.aar |
将本地依赖库复制到app项目的libs下。
### 线上依赖库
首先在项目根目录下的build.gradle增加个推仓库源。
```groovy
allprojects {
repositories {
jcenter()
google()
// 个推的Maven仓库地址
maven {
url 'https://mvn.getui.com/nexus/content/repositories/releases'
}
}
}
```
|名称 |
|:-- |
|com.getui:gtc:3.2.13.0 |
然后将线上依赖库添加到app项目的build.gradle下。
### 配置应用ID
```groovy
android {
defaultConfig {
manifestPlaceholders = [
"GETUI_APPID" : "%GETUI_APPID%",
"GY_APP_ID" : "%GY_APP_ID%",
]
}
}
```
GETUI_APPID与GY_APP_ID对应[开发者中心](https://dev.dcloud.net.cn/)一键登录->基础配置->一键登录应用ID(离线打包使用),GETUI_APPID与GY_APP_ID取值相同。
\ No newline at end of file
## uni-video
### 本地依赖库
|名称 |
|:-- |
|uni-video-release.aar |
|ijkplayer.aar |
|videoplayer.aar |
将本地依赖库复制到app项目的libs下。
### 线上依赖库
|名称 |
|:-- |
|com.github.bumptech.glide:glide:4.9.0 |
|androidx.annotation:annotation:1.1.0 |
|androidx.core:core:1.1.0 |
将线上依赖库添加到app项目的build.gradle下。
### 组件注册
将以下内容添加到主模块的build.gradle,详见[根据configjson配置应用](../../use/android.md#utscomponents)
```groovy
defaultConfig {
buildConfigField "String", "UTSRegisterComponents", "\"[{\\\"name\\\":\\\"video\\\",\\\"class\\\":\\\"uts.sdk.modules.DCloudUniVideo.VideoComponent\\\"}]\""
}
```
\ No newline at end of file
# uni-app x 原生SDK Android版
## 准备
- HBuilder X (4.18版本及以上)
- android studio
***
说明:当前文档基于android studio 2023.2.1 Patch 2。gradle版本为8.4。gradle插件版本为8.2.2。kotlin插件版本为1.9.10。
***
注意:当前文档主要提供在已有项目中接入uni-app x。如果是新项目则另见[文档](./androidnewproject.md)
## 新建uni-app x模块
点击File->New->New Module...
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/new_modules.png)
点击左侧`Templates``Android Library`
`Language`选择`Kotlin`
`Module name`建议设置为`uniappx`
点击`Finish`
**注意**
- `Language` 一定要选择`Kotlin`
- uni-app x最低支持版本为21,`Minimum SDK`需要选择21及以上的版本。
- `Build configuration language`建议选择`Groovy DSL(build.gradle)`。以下教程均按照此模式进行。。
## 工程配置
### 基础库配置
将uts-runtime-release.aar,android-gif-drawable-1.2.28.aar,app-common-release.aar,app-runtime-release.aar,breakpad-build-release.aar,dcloud-layout-release.aar,
framework-release.aar,uni-exit-release.aar,uni-getAccessibilityInfo-release.aar,uni-getAppAuthorizeSetting-release.aar,uni-getAppBaseInfo-release.aar,
uni-getSystemSetting-release.aar,uni-openAppAuthorizeSetting-release.aar,uni-prompt-release.aar,uni-storage-release.aar,uni-getDeviceInfo-release.aar,
uni-getSystemInfo-release.aar共17个aar拷贝到uni-app x模块的libs下,如果没有libs需要手动创建,参考下图:
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/main_libs.jpg)
### 修改build.gradle
修改uni-app x模块下的build.gradle
- 添加依赖
将下面的依赖信息添加到build.gradle中
```groovy
dependencies {
implementation fileTree(include: ['*.aar'], dir: './libs')
implementation("androidx.core:core-ktx:1.8.0")
implementation("androidx.recyclerview:recyclerview:1.0.0")
implementation("androidx.appcompat:appcompat:1.0.0")
implementation("androidx.exifinterface:exifinterface:1.3.6")
implementation("androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("com.google.android.material:material:1.4.0")
implementation("androidx.viewpager2:viewpager2:1.1.0-beta02")
implementation("com.alibaba:fastjson:1.2.83")
implementation("com.facebook.fresco:fresco:3.1.3")
implementation("com.facebook.fresco:middleware:3.1.3")
implementation("com.facebook.fresco:animated-gif:3.1.3")
implementation("com.facebook.fresco:webpsupport:3.1.3")
implementation("com.facebook.fresco:animated-webp:3.1.3")
implementation("com.github.bumptech.glide:glide:4.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.10")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.10")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
implementation("com.squareup.okhttp3:okhttp:3.12.12")
implementation("com.github.getActivity:XXPermissions:18.0")
}
```
- 添加aaptOptions配置
将aaptOptions配置添加到android节点下
```groovy
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
```
***注意:上面的配置需要同时设置到主模块中。***
### 修改项目的settings.gradle
在项目根路径下的settings.gradle中添加`jitpack`的maven的仓库地址,参考如下:
```groovy
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
```
### 修改项目的gradle.properties
在项目根路径下的gradle.properties中追加如下内容
```groovy
android.useAndroidX=true
android.enableJetifier=true
```
### 修改AndroidManifest.xml
- 添加activity
将下面内容拷贝到application节点下
```xml
<activity
android:name="io.dcloud.uniapp.UniAppActivity"
android:configChanges="orientation|keyboard|keyboardHidden|smallestScreenSize|screenLayout|screenSize|mcc|mnc|fontScale|navigation|uiMode"
android:exported="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/UniAppX.Activity.DefaultTheme"
android:windowSoftInputMode="adjustResize"
tools:replace="android:label,android:exported,android:theme,android:configChanges,android:windowSoftInputMode,android:screenOrientation">
</activity>
```
- 添加appid
在application节点下添加`DCLOUD_UNI_APPID`节点
```xml
<meta-data
android:name="DCLOUD_UNI_APPID" android:value="替换成应用的appid" />
```
- 修改application
将`application`节点的`android:name`修改为`io.dcloud.uniapp.UniApplication`
**注意:如果需要自定义application,必须继承自UniApplication**
### 拷贝资源文件
1. [导出uni-app x项目的资源文件](../export/export.md)
2. 将app-android目录下与appid对应的目录拷贝到主项目的`assets/apps`目录下
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/app_assets.png)
**注意:apps下的appid必须与AndroidManifest.xml的`DCLOUD_UNI_APPID`保持一致。**
### 拷贝kt文件
需要将`unkackage/resource/app-android/uniappx/app-android/src/`目录下的所有文件拷贝到项目的`src/main/java`
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/copykt.png)
注意:不要破坏原有src下的目录结构。
### 添加到主模块
将uni-app x模块添加到主模块中。
```groovy
dependencies {
implementation project(':uniappx')
implementation fileTree(include: ['*.aar'], dir: '../uniappx/libs')
}
```
## 配置uts插件
离线打包导出成功之后,uts插件资源位于`unpackage/resource/app-android/uni_modules`下。
如果不包含uts插件,可以[跳过](#configModules)此章节。
注意:付费uts插件不支持离线打包。
为方便区分,`uts插件`指前端封装的uni_modules插件;`android uts插件`指根据编译后的`uts插件`生成的安卓原生模块。
### 新建android uts插件模块
点击File->New->New Module...
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/new_modules.png)
点击左侧`Templates``Android Library`
`Language`选择`Kotlin`
`Module name`建议与uts插件模块名称一致。
点击`Finish`
***
注意:
- `Templates`一定要选择`Android Library`
- `Language`一定要选择`Kotlin`
- `Build configuration language`建议选择`Groovy DSL(build.gradle)`。以下教程均按照此模式进行。
***
### 修改android uts插件模块的build.gradle
添加依赖
```groovy
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../app/libs')
compileOnly fileTree(include: ['*.aar'], dir: './libs')
compileOnly "com.alibaba:fastjson:1.2.83"
compileOnly "androidx.core:core-ktx:1.10.1"
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
}
```
+ **注意:uni-app需要添加如下依赖到build.gradle中**
```groovy
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../app/libs')
compileOnly fileTree(include: ['*.aar'], dir: './libs')
compileOnly 'com.alibaba:fastjson:1.1.46.android'
compileOnly 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10'
compileOnly 'androidx.core:core-ktx:1.6.0'
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0'
compileOnly 'org.jetbrains.kotlin:kotlin-reflect:1.6.0'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
}
```
****
说明:
android uts插件模块编译时也要依赖基础库。建议直接使用`uniappx`模块下的libs目录。参考:
```groovy
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../uniappx/libs')
...
}
```
如果插件依赖其他内置模块,可参考:[模块配置](../modules/android/others.md),将模块对应的配置添加到app项目下。
如果插件依赖其他uts插件,建议优先将依赖的`uts插件`配置成`android uts插件模块`。然后在当前`android uts插件模块`的build.gradle中添加依赖的插件模块。参考:
```groovy
dependencies {
implementation project(':uts-依赖的android uts插件模块')
...
}
```
****
### 根据config.json配置应用
如果不包含config.json文件,可以[跳过](#copyResources)此章节。
[config.json配置及参考文档。](../../plugin/uts-plugin.md#androidconfigjson)
如果config.json中不存在下面示例中的任一字段,直接忽略即可。
```json
{
"abis": [
"armeabi-v7a","arm64-v8a"
],
"dependencies": [
"androidx.core:core-ktx:1.6.0",
{
"id": "com.xxx.richtext:richtext",
"source": "implementation 'com.xxx.richtext:richtext:3.0.7'"
}
],
"minSdkVersion": 21,
"project": {
"plugins": [
"com.huawei.agconnect"
],
"dependencies": [
"com.huawei.agconnect:agcp:1.6.0.300"
]
},
"components": [{"name": "zl-text","class": "uts.sdk.modules.zlText.ZlTextComponent"}],
"hooksClass": "uts.sdk.modules.zlText.ZlTextHook"
}
```
**注意:abis、minSdkVersion、dependencies、project在设置android uts插件模块也需要设置到app主模块中。**
- abis
abis表示插件支持的CPU类型,需要将支持的CPU类型添加到android uts插件模块的build.gradle中,参考上面示例,添加内容如下:
```groovy
android {
defaultConfig {
ndk { abiFilters "armeabi-v7a","arm64-v8a" } // 将ndk的内容添加到指定结构下
}
}
```
- minSdkVersion
minSdkVersion表示最小支持的android版本。修改android uts插件模块的build.gradle中的minSdkVersion即可
**注意:部分android studio生成的项目中为minSdk**
- dependencies
dependencies为插件依赖的仓储库,需要将dependencies中的依赖添加到android uts插件模块的build.gradle中
对于字符串内容,需要拼接implementation并添加到build.gradle的dependencies下。示例中"androidx.core:core-ktx:1.6.0"可以参考如下内容:
```groovy
dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
}
```
对于JSON内容,只需要将source对应的内容添加到build.gradle的dependencies下。示例中"id": "com.xxx.richtext:richtext"可以参考如下内容:
```groovy
dependencies {
implementation 'com.xxx.richtext:richtext:3.0.7'
}
```
- project
project 为gradle插件的配置。
plugins节点下的内容需要添加到android uts插件模块的build.gradle的plugins下。参考:
```groovy
plugins {
id 'com.android.application'
id 'com.huawei.agconnect'
}
```
dependencies节点下的内容需要添加到项目根目录下的build.gradle的buildscript > dependencies中。参考:
```groovy
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "com.huawei.agconnect:agcp:1.6.0.300"
}
}
allprojects {}
```
<a id='utscomponents'></a>
- components
components 为uts组件的注册信息。需要将components对应的内容添加到主模块的build.gradle。参考配置:
```groovy
defaultConfig {
buildConfigField "String", "UTSRegisterComponents", "\"[{\\\"name\\\":\\\"zl-text\\\",\\\"class\\\":\\\"uts.sdk.modules.zlText.ZlTextComponent\\\"}]\""
}
```
如果主模块的build.gradle已经存在UTSRegisterComponents,需要将现有配置与原有配置合并。参考:
```groovy
buildConfigField "String", "UTSRegisterComponents", "\"[{\\\"name\\\":\\\"zl-a\\\",\\\"class\\\":\\\"zlA.ZlAComponent\\\"},{\\\"name\\\":\\\"zl-text\\\",\\\"class\\\":\\\"uts.sdk.modules.zlText.ZlTextComponent\\\"}]\""
```
**注意:转义符不能删掉,格式一定严格一致。**
- hooksClass
hooksClass 为uts插件[应用程序生命周期函数监听。](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html#android-%E5%B9%B3%E5%8F%B0)
需要将hooksClass对应的内容添加到主模块的build.gradle中。参考配置
```groovy
defaultConfig {
buildConfigField 'String[]', 'UTSHooksClassArray', '{\"uts.sdk.modules.zlText.ZlTextHook\"}'
}
```
如果主模块的build.gradle已经存在UTSHooksClassArray,需要将现有配置与原有配置合并。参考:
```groovy
defaultConfig {
buildConfigField 'String[]', 'UTSHooksClassArray', '{\"uts.sdk.modules.zlText.ZlTextHook\",\"uts.sdk.modules.zla.ZLAHook\"}'
}
```
**注意:转义符不能删掉,格式一定严格一致。**
### 复制资源@copyResources
根据uts插件的资源目录,将对应的内容拷贝到android uts插件模块下。
**说明:不存在的目录可以不处理。**
#### libs
拷贝uts插件libs下的库到android uts插件模块的libs下,并在android uts插件模块的build.gradle下添加依赖。
```groovy
dependencies {
...
compileOnly fileTree(include: ['*.aar','*.jar'], dir: './libs')
}
```
**注意:uts插件的本地libs下的依赖同样也需要添加到主模块中。**
#### assets
如果存在assets目录,需要将assets文件夹拷贝到`android uts插件模块/src/main/`目录下。
#### res
如果存在res目录,需要将res文件夹拷贝到`android uts插件模块/src/main/`目录下。
#### AndroidManifest.xml
如果存在AndroidManifest.xml文件,需要将AndroidManifest.xml拷贝到`android uts插件模块/src/main/`目录下。
注意:如果AndroidManifest.xml中设置了package字段,必须将此字段删除并将package的内容设置到build.gradle的`namespace``applicationId``namespace``applicationId`的内容必须一致,也必须与原AndroidManifest.xml的`package`一致,否则编译会报错。
#### src
将src目录下的所有文件拷贝到`android uts插件模块/src/main/java`目录下。
### 添加到主项目
将android uts插件模块的依赖添加到主模块和`uniappx`模块的build.gradle的依赖中
```groovy
dependencies {
...
implementation project(':uts-progressNotification')
}
```
## 配置内置模块@configModules
根据`unpackage/resource/{appid}/manifest.json`的配置,添加[内置模块的配置](../modules/android/others.md)
以下模块可以忽略配置:
- uni-exit
- uni-getAccessibilityInfo
- uni-getAppAuthorizeSetting
- uni-getAppBaseInfo
- uni-getDeviceInfo
- uni-getSystemInfo
- uni-getSystemSetting
- uni-openAppAuthorizeSetting
- uni-prompt
- uni-storage
## 运行uni-app x
需要在打开uni-app x的地方添加如下代码,触发逻辑即可打开uni-app x。
```kotlin
startActivity(Intent(this, UniAppActivity::class.java))
```
退出应用可以调用`uni.exit()`,整体退出uni-app x。
如果需要在uni-app x与原生工程之间通信,可以参考[文档](androidcomm.md)
连接手机,点击运行按钮,可以在手机上查看效果。
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/7-6.png)
## uni-app x 与 android 原生工程通信
### 广播方式
实现实时通讯可以通过安卓原生的广播通信的方式。
#### uni-app x项目
首先需要在当前页面注册一个BroadcastReceiver接受android原生应用发送的广播信息。
发送广播可以通过`UTSAndroid.getUniActivity()?.sendBroadcast(intent)`将信息传送到原生。
```uvue
<template>
<view class="content">
<image class="logo" src="/static/logo.png" @click="send"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
</view>
</template>
<script>
// #ifdef APP-ANDROID
import BroadcastReceiver from 'android.content.BroadcastReceiver'
import Context from 'android.content.Context'
import Intent from 'android.content.Intent'
import IntentFilter from 'android.content.IntentFilter'
class MyReciver extends BroadcastReceiver {
constructor() {
}
override onReceive(context : Context, intent : Intent) {
var action = intent.getAction()
if (action.equals("ACTION_FROM_NATIVE")) {
var value = intent.getStringExtra("key");
uni.showToast({
title: value!!
})
}
}
}
// #endif
export default {
data() {
return {
title: '点击图片发送广播',
// #ifdef APP-ANDROID
receiver: null as BroadcastReceiver | null
// #endif
}
},
onLoad() {
},
onReady() {
// #ifdef APP-ANDROID
this.receiver = new MyReciver()
UTSAndroid.getUniActivity()?.registerReceiver(this.receiver!, new IntentFilter("ACTION_FROM_NATIVE"))
// #endif
},
onUnload() {
// #ifdef APP-ANDROID
UTSAndroid.getUniActivity()?.unregisterReceiver(this.receiver!)
// #endif
},
methods: {
send() {
// #ifdef APP-ANDROID
var intent = new Intent("ACTION_TO_NATIVE");
intent.putExtra("key", "接受到广播,三秒钟之后会接收到原生发送的广播");
UTSAndroid.getUniActivity()?.sendBroadcast(intent)
// #endif
}
}
}
</script>
<style>
.content {
display: flex;
align-items: center;
justify-content: center;
}
.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-bottom: 50rpx;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>
```
#### android原生项目
首先需要在当前activity注册一个BroadcastReceiver接受uni-app x发送的广播信息。
发送广播可以通过`sendBroadcast(inte)`将信息传送到uni-app x。
```kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
findViewById<View>(R.id.btn_goto).setOnClickListener {
startActivity(Intent(this@MainActivity, UniAppActivity::class.java))
registerReceiver(broadcast, IntentFilter("ACTION_TO_NATIVE"))
}
}
private val broadcast = object : BroadcastReceiver() {
val handler = Handler(Looper.getMainLooper())
override fun onReceive(context: Context, intent: Intent) {
if(intent.action == "ACTION_TO_NATIVE") {
Toast.makeText(context, intent.getStringExtra("key"), Toast.LENGTH_SHORT).show()
handler.postDelayed({
val inte = Intent("ACTION_FROM_NATIVE")
inte.putExtra("key", "接受来自原生的广播")
sendBroadcast(inte)
}, 3000)
}
}
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(broadcast)
}
}
```
**注意:广播要在页面关闭的时候取消注册,避免可能出现崩溃的问题。**
具体可以参考离线打包SDK中的`app-comm`示例。
\ No newline at end of file
## 准备
- HBuilder X (4.18版本及以上)
- android studio
***
说明:当前文档基于android studio 2023.2.1 Patch 2。gradle版本为8.4。gradle插件版本为8.2.2。kotlin插件版本为1.9.10。
***
## 新建项目
android studio中新建项目,模板选择`No Activity`。下一步选语言kotlin和Build configuration language,如下图:
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/create_project.jpg)
**注意**
- `Language` 一定要选择`Kotlin`
- uni-app x最低支持版本为21,`Minimum SDK`需要选择21及以上的版本。
- `Build configuration language`建议选择`Groovy DSL(build.gradle)`。以下教程均按照此模式进行。
- `Name`建议与manifest.json中的`name`字段一致。
- `Package name`作为应用标志,涉及申请第三方平台账号,一般情况下不建议修改,包名一般设置反向域名。
## 工程配置
### 基础库配置
将uts-runtime-release.aar,android-gif-drawable-1.2.28.aar,app-common-release.aar,app-runtime-release.aar,breakpad-build-release.aar,dcloud-layout-release.aar,
framework-release.aar,uni-exit-release.aar,uni-getAccessibilityInfo-release.aar,uni-getAppAuthorizeSetting-release.aar,uni-getAppBaseInfo-release.aar,
uni-getSystemSetting-release.aar,uni-openAppAuthorizeSetting-release.aar,uni-prompt-release.aar,uni-storage-release.aar,uni-getDeviceInfo-release.aar,
uni-getSystemInfo-release.aar共17个aar拷贝到app模块的libs下,如果没有libs需要手动创建,参考下图:
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/main_libs.jpg)
### 修改build.gradle
修改app模块下的build.gradle
- 添加依赖
将下面的依赖信息添加到build.gradle中
```groovy
dependencies {
implementation fileTree(include: ['*.aar'], dir: './libs')
implementation("androidx.core:core-ktx:1.8.0")
implementation("androidx.recyclerview:recyclerview:1.0.0")
implementation("androidx.appcompat:appcompat:1.0.0")
implementation("androidx.exifinterssface:exifinterface:1.3.6")
implementation("androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("com.google.android.material:material:1.4.0")
implementation("androidx.viewpager2:viewpager2:1.1.0-beta02")
implementation("com.alibaba:fastjson:1.2.83")
implementation("com.facebook.fresco:fresco:3.1.3")
implementation("com.facebook.fresco:middleware:3.1.3")
implementation("com.facebook.fresco:animated-gif:3.1.3")
implementation("com.facebook.fresco:webpsupport:3.1.3")
implementation("com.facebook.fresco:animated-webp:3.1.3")
implementation("com.github.bumptech.glide:glide:4.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.10")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.10")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
implementation("com.squareup.okhttp3:okhttp:3.12.12")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.10")
implementation("com.github.getActivity:XXPermissions:18.0")
}
```
- 添加aaptOptions配置
将aaptOptions配置添加到android节点下
```groovy
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
```
- 配置应用版本号
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/versions.jpg)
`versionCode`为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中versionCode值一致
`versionName`为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中versionName值一致。
`applicationId`为应用的包名,一般设置为反向域名,不建议修改。
按应用市场要求,建议将`targetSdk`设置为30或以上。
uni-app x `minSdk`最低支持21,小于21将无法编译通过。
`namespace`对应原来的AndroidManifest.xml的`package`字段,如果没有特殊设置,建议与`applicationId`一致。`namespace`字段不能删除。
完整的build.gradle可参考:
```groovy
plugins {
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsKotlinAndroid)
}
android {
// namespace 与 applicationId 保持一致
namespace 'uni.UNIAF21722'
compileSdk 34
defaultConfig {
applicationId "uni.UNIAF21722"
minSdk 24
targetSdk 34
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
// 一定要加
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
}
dependencies {
implementation fileTree(include: ['*.aar'], dir: './libs')
implementation("androidx.core:core-ktx:1.8.0")
implementation("androidx.recyclerview:recyclerview:1.0.0")
implementation("androidx.appcompat:appcompat:1.0.0")
implementation("androidx.exifinterface:exifinterface:1.3.6")
implementation("androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("com.google.android.material:material:1.4.0")
implementation("androidx.viewpager2:viewpager2:1.1.0-beta02")
implementation("com.alibaba:fastjson:1.2.83")
implementation("com.facebook.fresco:fresco:3.1.3")
implementation("com.facebook.fresco:middleware:3.1.3")
implementation("com.facebook.fresco:animated-gif:3.1.3")
implementation("com.facebook.fresco:webpsupport:3.1.3")
implementation("com.facebook.fresco:animated-webp:3.1.3")
implementation("com.github.bumptech.glide:glide:4.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.10")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.10")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
implementation("com.squareup.okhttp3:okhttp:3.12.12")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.10")
implementation("com.github.getActivity:XXPermissions:18.0")
}
```
### 修改项目的settings.gradle
在项目根路径下的settings.gradle中添加`jitpack`的maven的仓库地址,参考如下:
```groovy
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
```
### 修改项目的gradle.properties
在项目根路径下的gradle.properties中追加如下内容
```groovy
android.useAndroidX=true
android.enableJetifier=true
```
### 修改AndroidManifest.xml
- 添加activity
首先将原来application节点下的内容全部删除,然后将下面内容拷贝到application节点下
```xml
<activity
android:name="io.dcloud.uniapp.UniAppActivity"
android:configChanges="orientation|keyboard|keyboardHidden|smallestScreenSize|screenLayout|screenSize|mcc|mnc|fontScale|navigation|uiMode"
android:exported="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/UniAppX.Activity.DefaultTheme"
android:windowSoftInputMode="adjustResize"
tools:replace="android:label,android:exported,android:theme,android:configChanges,android:windowSoftInputMode,android:screenOrientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="io.dcloud.uniapp.appframe.activity.UniPageActivity"
android:configChanges="orientation|keyboard|keyboardHidden|smallestScreenSize|screenLayout|screenSize|mcc|mnc|fontScale|navigation|uiMode"
android:screenOrientation="portrait"
tools:replace="android:configChanges,android:screenOrientation" />
```
- 添加appid
在application节点下添加`DCLOUD_UNI_APPID`节点
```xml
<meta-data
android:name="DCLOUD_UNI_APPID" android:value="替换成应用的appid" />
```
- 合并AndroidManifest.xml
如果uni-app x项目下存在AndroidManifest.xml,需要将uni-app x项目下的AndroidManifest.xml中的内容拷贝到android项目下的AndroidManifest.xml中。
注意:拷贝时需要按照xml结构拷贝过去,不能整体覆盖
- 修改application
将`application`节点的`android:name`修改为`io.dcloud.uniapp.UniApplication`
**注意:如果需要自定义application,必须继承自UniApplication**
### Splash配置
`app模块->src->main->res->values`新建`uniappx-splashscreen.xml`文件,将下面内容拷贝到xml文件中。
```xml
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="UniAppX.Activity.SplashScreenTheme" parent="@style/UniAppX.Activity.DefaultTheme">
<item name="android:colorControlActivated">#2196F3</item>
<item name="android:windowBackground">@drawable/uniappx_splashscreen</item>
</style>
</resources>
```
`app模块->src->main->res->values-v31`新建`uniappx-splashscreen.xml`文件,将下面内容拷贝到xml文件中。
```xml
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="UniAppX.Activity.SplashScreenTheme" parent="@style/UniAppX.Activity.DefaultTheme">
<item name="android:windowSplashScreenBackground">@color/uniappx_splashscreen_background</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/uniappx_splashscreen_icon</item>
<item name="android:windowSplashScreenBrandingImage">@drawable/uniappx_splashscreen_brand</item>
</style>
</resources>
```
注意:目录不存在的话按照上面说明直接新建即可。
Splash字段说明:
- `uniappx_splashscreen`对应的是uni-app x项目的manifest.json的`app->distribute->splashScreens->android`。你需要将不同屏幕密度对应的文件拷贝到对应的drawable目录下。如`xhdpi`对应的是`drawable-xhdpi`目录。如果app模块->src->main->res下不存在`drawable-xhdpi`目录,你需要新建一个同名目录,并将图片重命名为`uniappx_splashscreen`,扩展名不变。
- `uniappx_splashscreen_background`对应的是uni-app x项目的manifest.json的`app->distribute->splashScreens->android12->background`。你需要替换`@color/uniappx_splashscreen_background`为manifest.json中对应的值。
- `uniappx_splashscreen_icon`对应的是uni-app x项目的manifest.json的`app->distribute->splashScreens->android12->icon`。你需要将不同屏幕密度对应的文件拷贝到对应的drawable目录下。如`xhdpi`对应的是`drawable-xhdpi`目录。如果app模块->src->main->res下不存在`drawable-xhdpi`目录,你需要新建一个同名目录,并将图片重命名为`uniappx_splashscreen_icon`,扩展名不变。
- `uniappx_splashscreen_brand`对应的是uni-app x项目的manifest.json的`app->distribute->splashScreens->android12->brand`。你需要将不同屏幕密度对应的文件拷贝到对应的drawable目录下。如`xhdpi`对应的是`drawable-xhdpi`目录。如果app模块->src->main->res下不存在`drawable-xhdpi`目录,你需要新建一个同名目录,并将图片重命名为`uniappx_splashscreen_brand`,扩展名不变。
xml文件配置成功之后,修改AndroidManifest.xml中`android:name``io.dcloud.uniapp.UniAppActivity`的activity节点的`android:theme``@style/UniAppX.Activity.SplashScreenTheme`
各字段对应的说明可以参考[splash启动封面配置文档。](https://doc.dcloud.net.cn/uni-app-x/collocation/manifest-splashscreen.html)
### 应用图标配置
应用图标对应的是uni-app x项目manifest.json中的`app->distribute->icons->android`。你需要根据不同的分辨率将对应的资源拷贝到对应的drawable目录下。
然后修改AndroidManifest.xml中application节点的`android:icon`属性值为对应图片的名称。如:我将图片命名为`icon.png`,参考下图。
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/set_icon.jpg)
### 应用名称配置
应用名称默认定义为`app_name`字段,位于`app->src->main->res->values->strings.xml`。该值为安装到手机上桌面显示的应用名称,建议与manifest.json中name(基础配置中的应用名称)对应。
### 拷贝资源文件
1. [导出uni-app x项目的资源文件](../export/export.md)
2. 将app-android目录下与appid对应的目录拷贝到主项目的`assets/apps`目录下
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/app_assets.png)
**注意:apps下的appid必须与AndroidManifest.xml的`DCLOUD_UNI_APPID`保持一致。**
### 拷贝kt文件
需要将`unkackage/resource/app-android/uniappx/app-android/src/`目录下的所有文件拷贝到项目的`src/main/java`
[图片]
注意:不要破坏原有src下的目录结构。
## 配置uts插件
离线打包导出成功之后,uts插件资源位于`unpackage/resource/app-android/uni_modules`下。
如果不包含uts插件,可以[跳过](#配置内置模块)此章节。
注意:付费uts插件不支持离线打包。
为方便区分,`uts插件`指前端封装的uni_modules插件;`android uts插件`指根据编译后的`uts插件`生成的安卓原生模块。
### 新建android uts插件模块
点击File->New->New Module...
![](https://web-ext-storage.dcloud.net.cn/native/doc/android/new_modules.png)
点击左侧`Templates``Android Library`
`Language`选择`Kotlin`
`Module name`建议与uts插件模块名称一致。
点击`Finish`
***
注意:
- `Templates`一定要选择`Android Library`
- `Language`一定要选择`Kotlin`
- `Build configuration language`建议选择`Groovy DSL(build.gradle)`。以下教程均按照此模式进行。
***
### 修改android uts插件模块的build.gradle
添加依赖
```groovy
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../app/libs')
compileOnly fileTree(include: ['*.aar'], dir: './libs')
compileOnly "com.alibaba:fastjson:1.2.83"
compileOnly "androidx.core:core-ktx:1.10.1"
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
}
```
+ **注意:uni-app需要添加如下依赖到build.gradle中**
```groovy
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../app/libs')
compileOnly fileTree(include: ['*.aar'], dir: './libs')
compileOnly 'com.alibaba:fastjson:1.1.46.android'
compileOnly 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10'
compileOnly 'androidx.core:core-ktx:1.6.0'
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0'
compileOnly 'org.jetbrains.kotlin:kotlin-reflect:1.6.0'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
}
```
****
说明:
android uts插件模块编译时也要依赖基础库。建议直接使用app项目下的libs目录。参考:
```groovy
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../app/libs')
...
}
```
如果插件依赖其他内置模块,可参考:[模块配置](/docs/uniappxDocs/modules/android/others.md),将模块对应的配置添加到app项目下。
如果插件依赖其他uts插件,建议优先将依赖的`uts插件`配置成`android uts插件模块`。然后在当前`android uts插件模块`的build.gradle中添加依赖的插件模块。参考:
```groovy
dependencies {
implementation project(':uts-依赖的android uts插件模块')
...
}
```
****
### 根据config.json配置应用
如果不包含config.json文件,可以[跳过](#复制资源)此章节。
[config.json配置及参考文档。](../../plugin/uts-plugin.md#androidconfigjson)
如果config.json中不存在下面示例中的任一字段,直接忽略即可。
```json
{
"abis": [
"armeabi-v7a","arm64-v8a"
],
"dependencies": [
"androidx.core:core-ktx:1.6.0",
{
"id": "com.xxx.richtext:richtext",
"source": "implementation 'com.xxx.richtext:richtext:3.0.7'"
}
],
"minSdkVersion": 21,
"project": {
"plugins": [
"com.huawei.agconnect"
],
"dependencies": [
"com.huawei.agconnect:agcp:1.6.0.300"
]
},
"components": [{"name": "zl-text","class": "uts.sdk.modules.zlText.ZlTextComponent"}],
"hooksClass": "uts.sdk.modules.zlText.ZlTextHook"
}
```
**注意:abis、minSdkVersion、dependencies、project在设置android uts插件模块也需要设置到app主模块中。**
- abis
abis表示插件支持的CPU类型,需要将支持的CPU类型添加到android uts插件模块的build.gradle中,参考上面示例,添加内容如下:
```groovy
android {
defaultConfig {
ndk { abiFilters "armeabi-v7a","arm64-v8a" } // 将ndk的内容添加到指定结构下
}
}
```
- minSdkVersion
minSdkVersion表示最小支持的android版本。修改android uts插件模块的build.gradle中的minSdkVersion即可
**注意:部分android studio生成的项目中为minSdk**
- dependencies
dependencies为插件依赖的仓储库,需要将dependencies中的依赖添加到android uts插件模块的build.gradle中
对于字符串内容,需要拼接implementation并添加到build.gradle的dependencies下。示例中"androidx.core:core-ktx:1.6.0"可以参考如下内容:
```groovy
dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
}
```
对于JSON内容,只需要将source对应的内容添加到build.gradle的dependencies下。示例中"id": "com.xxx.richtext:richtext"可以参考如下内容:
```groovy
dependencies {
implementation 'com.xxx.richtext:richtext:3.0.7'
}
```
- project
project 为gradle插件的配置。
plugins节点下的内容需要添加到android uts插件模块的build.gradle的plugins下。参考:
```groovy
plugins {
id 'com.android.application'
id 'com.huawei.agconnect'
}
```
dependencies节点下的内容需要添加到项目根目录下的build.gradle的buildscript > dependencies中。参考:
```groovy
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "com.huawei.agconnect:agcp:1.6.0.300"
}
}
allprojects {}
```
- components
components 为uts组件的注册信息。需要将components对应的内容添加到app主模块的build.gradle。参考配置:
```groovy
defaultConfig {
buildConfigField "String", "UTSRegisterComponents", "\"[{\\\"name\\\":\\\"zl-text\\\",\\\"class\\\":\\\"uts.sdk.modules.zlText.ZlTextComponent\\\"}]\""
}
```
如果app主模块的build.gradle已经存在UTSRegisterComponents,需要将现有配置与原有配置合并。参考:
```groovy
buildConfigField "String", "UTSRegisterComponents", "\"[{\\\"name\\\":\\\"zl-a\\\",\\\"class\\\":\\\"zlA.ZlAComponent\\\"},{\\\"name\\\":\\\"zl-text\\\",\\\"class\\\":\\\"uts.sdk.modules.zlText.ZlTextComponent\\\"}]\""
```
**注意:转义符不能删掉,格式一定严格一致。**
- hooksClass
hooksClass 为uts插件[应用程序生命周期函数监听。](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html#android-%E5%B9%B3%E5%8F%B0)
需要将hooksClass对应的内容添加到APP模块的build.gradle中。参考配置
```groovy
defaultConfig {
buildConfigField 'String[]', 'UTSHooksClassArray', '{\"uts.sdk.modules.zlText.ZlTextHook\"}'
}
```
如果app主模块的build.gradle已经存在UTSHooksClassArray,需要将现有配置与原有配置合并。参考:
```groovy
defaultConfig {
buildConfigField 'String[]', 'UTSHooksClassArray', '{\"uts.sdk.modules.zlText.ZlTextHook\",\"uts.sdk.modules.zla.ZLAHook\"}'
}
```
**注意:转义符不能删掉,格式一定严格一致。**
### 复制资源
根据uts插件的资源目录,将对应的内容拷贝到android uts插件模块下。
**说明:不存在的目录可以不处理。**
#### libs
拷贝uts插件libs下的库到android uts插件模块的libs下,并在android uts插件模块的build.gradle下添加依赖。
```groovy
dependencies {
...
compileOnly fileTree(include: ['*.aar','*.jar'], dir: './libs')
}
```
**注意:uts插件的本地libs下的依赖同样也需要添加到app模块中。**
#### assets
如果存在assets目录,需要将assets文件夹拷贝到`android uts插件模块/src/main/`目录下。
#### res
如果存在res目录,需要将res文件夹拷贝到`android uts插件模块/src/main/`目录下。
#### AndroidManifest.xml
如果存在AndroidManifest.xml文件,需要将AndroidManifest.xml拷贝到`android uts插件模块/src/main/`目录下。
注意:如果AndroidManifest.xml中设置了package字段,必须将此字段删除并将package的内容设置到build.gradle的`namespace``applicationId``namespace``applicationId`的内容必须一致,也必须与原AndroidManifest.xml的`package`一致,否则编译会报错。
#### src
将src目录下的所有文件拷贝到`android uts插件模块/src/main/java`目录下。
### 添加到主项目
将android uts插件模块的依赖添加到主项目的build.gradle的依赖中
```groovy
dependencies {
...
implementation project(':uts-progressNotification')
}
```
## 配置内置模块
根据`unpackage/resource/{appid}/manifest.json`的配置,添加[内置模块的配置](../modules/android/others.md)
以下模块可以忽略配置:
- uni-exit
- uni-getAccessibilityInfo
- uni-getAppAuthorizeSetting
- uni-getAppBaseInfo
- uni-getDeviceInfo
- uni-getSystemInfo
- uni-getSystemSetting
- uni-openAppAuthorizeSetting
- uni-prompt
- uni-storage
## 运行
连接手机,点击按钮,运行即可。
![avatar](https://img.cdn.aliyun.dcloud.net.cn/nativedocs/5%2BSDK-android/image/7-6.png)
\ No newline at end of file
......@@ -244,7 +244,7 @@ Android原生应用清单文件,建议只保存UTS插件内置的清单文件
除了插件下有AndroidManifest.xml,项目下也有。注意2者的区别。一般使用者的配置不放在插件下,而放在自己的项目下。项目下配置[详见](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android)
##### config.json
##### config.json@androidconfigjson
uts插件在Android平台的原生层配置文件,可以在其中配置依赖仓储等gradle相关内容。
```json
......@@ -419,7 +419,7 @@ iOS平台原生 entitlements 文件配置,云端打包时会将配置信息合
</plist>
```
##### config.json
##### config.json@iosconfigjson
uts插件在iOS平台的其它原生配置文件,可以在其中配置依赖的系统库等信息
```json
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册