简体中文
app打包,在Android原生开发中提供了配置 AndroidManifest.xml 和 资源目录 assets、res。uni-app中对常用项进行了封装,提供了manifest.json。
但manifest.json不能包含所有Android的配置。
在HBuilderX 3.6以前,开发者如需使用manifest未封装的配置、或需自定义资源目录 assets、res下的内容,只能离线打包或开发App原生语言插件。
HBuilderX3.6.0起,支持直接在应用项目中配置应用清单文件 AndroidManifest.xml 和资源目录 assets、res。
在HBuilderX中,对项目根目录右键菜单 "新建" -> "自定义文件"
输入文件名称 AndroidManifest.xml
(注意大小写敏感),点击 “创建” 按钮新建文件
根据应用需求编辑添加需要的内容,如下示例:
<?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="io.dcloud.nativeresouce">
<!--permissions-->
<application>
<!--meta-data-->
<meta-data android:name="My_Custom_Key" android:value="My_Custom_Value"/>
</application>
</manifest>
注意
如果应用需要一些特殊的Android权限配置,可根据需求在manifest节点下添加,如下示例:
<?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="io.dcloud.nativeresouce">
<!--按下面方式配置需要自定义添加的权限-->
<!-- 使用网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 读写SD卡权限 -->
<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="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 拍照权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- 定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<!-- 联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- 蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 短信权限 -->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<!-- 安装应用权限 -->
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!-- 快捷方式权限 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>"
<application>
<!--meta-data-->
</application>
</manifest>
注意
uni-app x项目manifest.json中没有提供Android权限的配置,需在此AndroidManifest.xml中添加。
相关参考
如果应用使用了三方SDK(uts插件或uni原生插件)默认包含了一些Android权限,而实际可能不需要用到,则可以在应用清单文件文件中配置权限并添加tools:node="remove"移除,如下示例是移除"android.permission.INSTALL_PACKAGES"、"android.permission.REQUEST_INSTALL_PACKAGES"权限:
<?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="io.dcloud.nativeresouce">
<!--按下面方式配置需要移除的permissions-->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:node="remove"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>
<application>
<!--meta-data-->
</application>
</manifest>
uni-app 项目请在 manifest.json
可视化界面的 App常用其它设置
中配置,详情参考Android设置url scheme
应用需要向系统注册url scheme,以便在浏览器中通过scheme打开App,可根据需求在AndroidManifest.xml
文件中添加android:scheme
数据,如下示例:
<?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="io.dcloud.nativeresouce">
<application>
<!--meta-data-->
<activity android:name="io.dcloud.uniapp.UniLaunchProxyActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myappuniappx"/>
</intent-filter>
</activity>
</application>
</manifest>
uni-app x 项目支持通过此方式配置url scheme,需 HBuilderX4.18及以上版本
注意
intent-filter
下 data
节点的 android:scheme
属性值配置的是需要注册的scheme,上面示例配置了myappuniappx,请根据应用实际需求修改,可添加多个data节点配置多个scheme值。为了避免与其他应用产生冲突,请配置自己应用特有的字符串来避免冲突。intent-filter
下 action
和 category
节点数据是固定值,不要修改。相关参考
intent-filter
节点,参考:https://developer.android.google.cn/guide/topics/manifest/intent-filter-elementdata
节点,参考:https://developer.android.google.cn/guide/topics/manifest/data-elementactivity
注册配置信息android平台的activity
内容载体,部分特殊功能需修改activity注册配置才能实现功能,因此提供如下方式修改注册的配置信息。
uni-app x 页面 activity 如下:
如下示例:
<?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="io.dcloud.nativeresouce">
<application>
<activity android:name="io.dcloud.PandoraEntryActivity"
android:配置项 = "配置内容"/>
</application>
</manifest>
uni-app x 页面 activity 如下:
如下示例:
<?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="io.dcloud.nativeresouce">
<application>
<activity android:name="io.dcloud.uniapp.UniAppActivity"
android:配置项 = "配置内容"/>
<activity android:name="io.dcloud.uniapp.appframe.activity.UniPageActivity"
android:配置项 = "配置内容"/>
<activity android:name="io.dcloud.uniapp.appframe.activity.UniLandscapePageActivity"
android:配置项 = "配置内容"/>
<activity android:name="io.dcloud.uniapp.appframe.activity.UniPortraitPageActivity"
android:配置项 = "配置内容"/>
</application>
</manifest>
注意
Android url scheme配置
实现HBuilderX中对项目右键菜单 "新建" -> "目录"
输入名称 nativeResources
(注意大小写敏感),确定并创建目录。
继续创建“android”子目录、创建“assets”、“res”二级子目录,结构如下:
将需要添加的Android原生资源文件分别拷贝到assets、res目录,云端打包时将会合并到安装包中。
注意
┌─apps //应用资源目录
│ └─[AppID] //使用DCloud AppID作为目录名称
├─data //配置文件目录
│ ├─dcloud_control.xml
│ ├─dcloud_error.html
│ ├─dcloud_properties.xml
│ └─dcloud3.dat
├─fonts //内置字体文件目录
│ ├─dcloud_iconfont.ttf
│ └─unincomponents.ttf
├─res //地图功能资源目录
│ ├─dcloud_beep.ogg
│ ├─dcloud_prograss_snow1.png
│ └─point.png
├─uni-jsframework.js //uni-app vue2框架
├─uni-jsframework-vue3.js //uni-app vue3框架
├─uni-jsframework-dev.js //uni-app vue2框架(开发模式)
└─uni-jsframework-vue3-dev.js //uni-app vue3框架(开发模式)
┌─apps //应用资源目录
│ └─[AppID] //使用DCloud AppID作为目录名称
├─font //内置字体文件目录
│ └─dcloud_iconfont.ttf
├─uniappx //内置unix资源目录
│ ├─fonts
│ └─version.json
└─uni-uts //内置uts资源目录
├─uni-prompt
└─...
在 Android 原生开发中可以在 build.gradle
文件配置 manifestPlaceholders
数据用于替换 AndroidManifest.xml
中的占位符,例如 ${api_key} 。
为了满足此需求,在项目的 nativeResources/android 目录下可添加 manifestPlaceholders.json
文件来配置 manifestPlaceholders
数据。
示例如下:
{
"api_key": "我的api key"
}
manifestPlaceholders.json
文件中的键名和键值必需是字符串,其中键名为占位符的名称,如占位符 ${api_key} 的键名为 api_key,键值为要替换 AndroidManifest.xml
中的占位符的值。
注意
云端打包默认保留以下manifestPlaceholders
,避免使用
离线打包时应用清单文件和资源需要开发者手动合并到Android原生工程中。