tmerclub-doc/app离线打包/Android 打包文档.md
2025-03-19 15:04:57 +08:00

258 lines
7.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Mall4j 商城 Android 打包文档
文档源自 [uniapp 官方离线打包文档](https://nativesupport.dcloud.net.cn/AppDocs/),如有出入以官网文档为准
### 准备工作
Android平台签名证书 [生成指南](https://ask.dcloud.net.cn/article/35777)
注册Dcloud账号登录后台创建应用并申请离线打包 [Appkey](https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey)
### 开发环境
Android Studio [官方下载](https://developer.android.google.cn/studio/index.html)
HbulidX [官方下载](https://www.dcloud.io/hbuilderx.html)
App离线SDK下载 [最新android平台SDK下载](https://nativesupport.dcloud.net.cn/AppDocs/download/android)
### SDK目录说明
```
|-- HBuilder-Hello App离线打包演示应用
|-- HBuilder-Integrate-AS 集成uni-app的最简示例
|-- SDK SDK库文件目录
|-- Feature-Android.xls Android平台各扩展Feature API对应的详细配置
|-- Readme.txt 版本说明文件及注意事项
|-- UniPlugin-Hello-AS uni原生插件开发示例
```
### 导入工程
打开 Android Studio 导入 SDK 中的 HBuilder-Integrate-AS 工程
![导入工程](../img/app打包/android/导入工程.png)
导入后 Android Studio 会自动下载项目中用到的资源默认源是Google建议科学上网
### 工程配置
**build.gradle**
将生成的签名证书放入 simpleDemo 目录下
打开 simpleDemo/build.gradle 配置文件,修改包名和签名信息
![修改包名、签名](../img/app打包/android/修改包名、签名.png)
```js
// 签名信息配置
signingConfigs {
config {
keyAlias 'key0' // 证书别名
keyPassword '123456' // 证书密码
storeFile file('test.jks') // 证书文件路径
storePassword '123456' // 证书文件密码
v1SigningEnabled true
v2SigningEnabled true
}
}
```
**Androidmanifest.xml**
打开 simpleDemo/src/main/Androidmanifest.xml修改包名配置Appkey
![修改包名、签名](../img/app打包/android/AppKey.png)
### 图标、启动图以及应用名称
#### 图标、启动图
simpleDemo/src/main/res/drawableicon 为图标splash 为启动图。可直接替换
#### **应用名称**
simpleDemo/src/main/res/values/strings.xml文件修改“app_name”字段值
![](../img/app打包/android/应用名称.png)
### 模块及第三方SDK配置
使用模块或第三方SDK需要引入资源并添加对应配置。
#### 第三方SDK配置
以 [微信支付](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=%e5%be%ae%e4%bf%a1%e6%94%af%e4%bb%98) 为例,需要登录 [微信开放平台](https://open.weixin.qq.com/) 创建移动应用,审核成功后获取 微信AppId(appkey) [微信appkey申请方法](http://ask.dcloud.net.cn/article/208)
1. 引入文件
在 SDK/libs 目录下,找到 payment-weixin-release.aar 将这个文件放入工程中 simpleDemo/libs 目录;
将 SDK/src/wxapi 下的 WXPayEntryActivity.java 文件复制到工程 simpleDemo/main/java/包名/wxapi 目录
![](../img/app打包/android/微信支付1.png)
2. 添加配置
1. Androidmainfest.xml
需要在application节点前添加权限
```xml
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
```
application节点下配置如下代码
```xml
<meta-data android:name="WX_APPID" android:value="$微信APPID" />
<activity android:name="io.dcloud.feature.payment.weixin.WXPayProcessMeadiatorActivity"
android:exported="false"
android:excludeFromRecents="true"
android:theme="@style/ProjectDialogTheme"/>
<activity
android:name="$你的包名.wxapi.WXPayEntryActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:launchMode="singleTop" />
```
2. dcloud_properties.xml (assets/data)
```xml
<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl">
<module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/>
</feature>
```
3. build.gradle simpleDemo/build.gradle在主工程的build.gradle文件配置 dependencies
```json
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.facebook.fresco:fresco:2.5.0'
implementation "com.facebook.fresco:animated-gif:2.5.0"
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'androidx.webkit:webkit:1.3.0'
// 微信支付依赖配置
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.8.0'
}
```
![](../img/app打包/android/微信支付2.png)
项目中用到的模块及第三方SDK
| 模块/第三方SDK | 需要引入的文件 |
| ------------------------------------------------------------ | ----------------------------------------------- |
| [系统定位](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/geolocation?id=系统定位) | 无需引入文件,需添加配置 |
| [支付宝支付](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=支付宝) | payment-alipay-release.aar |
| [微信支付](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=微信支付) | payment-weixin-release.aar |
| [VideoPlayer视频播放](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/others?id=videoplayer视频播放) | media-release.aar、weex_videoplayer-release.aar |
| [livepusher直播推流](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/others.html#livepusher-%E7%9B%B4%E6%92%AD%E6%8E%A8%E6%B5%81) | weex_livepusher-release.aar |
### 导出资源
用 HbulidX 打开项目,打开 manifest.json 配置文件,修改 uniapp 应用标识(appid) 为 离线AppKey 中的应用id
![](../img/app打包/android/检查appid.png)
选择项目 -> 发行 -> 原生App-本地打包 -> 生成本地打包App资源编译完成后控制台会显示资源路径
或执行命令 npm run build:app-android 编译
![](../img/app打包/android/导出资源.png)
### 导入资源
将编译好的app资源拷贝到项目assets->apps下目录结构如下图
![](../img/app打包/android/导入资源.png)
修改 assets/data/dcloud_control.xml 中的 appid 为 uni-app 的 id
### 打包apk
Android Studio 菜单选择 Build -> Generate Signed Bund / APK ,弹窗选择 APK选择打包用的签名输入签名信息选择release 点击 Finish 即可完成打包
![](../img/app打包/android/打包apk.png)
### 常见问题
#### 未配置AppKey或配置错误
1、查看签名文件是否配置到了主APP的build.gradle
2、查看离线项目中dcloud_control.xml文件中的appid是否与申请AppKey时的appid一致
3、检测离线项目的包名是否申请AppKey时的包名是否一致
4、编译完通过apk解压获取一下签名信息与申请AppKey时填写的SHA1一致
#### 模拟器中app无法运行
要在模拟器运行,需要在 simpleDemo 目录下 build.gradle 配置文件 defaultConfig 下 添加配置
```xml
android {
defaultConfig {
...
ndk {
abiFilters 'arm64-v8a','armeabi-v7a', 'x86'
}
}
}
```