uni-app打包成Android Apk 全程详解
本文使用cli
方式
一、Android原生配置
官方文档
0 安装开发环境
必备软件:
- Android Studio
- HBuilderX
- 小程序Android离线sdk, 下载版本sdk (一般是最新版。版本要与 HBuilder X版本一致,检查版本的方法看下面导出App资源小节)
申请 Appkey
- 登录开发者中心。如果没有账号,就注册一个。申请
Appkey
需要进行邮箱和手机号的实名认证。 - 在左侧菜单中选择我创建的应用,点击应用
- 左侧选择
离线打包Key管理
,选择对应平台 iOS Android,输入包名和SHA1 (包名是自定义的,SHA1获取),确认无误点击保存,即可获取到对应平台的App.
// 生成 keystore 签名文件
keytool -genkey -alias xxx -keyalg RSA -keysize 2048 -validity 36500 -keystore xxx.keystore// 查看 SHA1 信息
keytool -list -v -keystore xxx.keystore
-alias xxx : xxx是别名
xxx.keystore : 文件名
配置
Android
打开Android项目,配置主APP的Androidmanifest.xml文件, 导航到Application节点,创建meta-data节点,name为dcloud_appkey,value为申请的AppKey如下:
<application><meta-dataandroid:name="dcloud_appkey"android:value="替换为自己申请的Appkey" /></application>
iOS
点击链接参考IOS平台的配置Appkey章节.
二、导出App资源
查看版本
!!! 首先请确保uni-app编译器的版本号和离线 SDK 的版本号一致。
如果版本不一致,app启动时会弹出版本不一致的提示框
- 通过
HBuilder X
创建的项目
帮助 —— 关于
- 通过
Vue Cli
创建的项目
cmd命令行 cd 到项目的根目录,执行npm run info
3.1.18是它的版本, 那么在上面下载小程序sdk版本时,也要选择3.1.18的版本。
三、生成本地打包 APP 资源
1. 通过 HBuilderX 创建的项目
选择项目 -> 发行 -> 原生App-本地打包 -> 生成本地打包App资源
2. 通过 vue-cli 创建的项目
命令行 cd 到项目根目录,执行 npm run build:app-plus
,会在 项目目录/dist/build/app-plus
下生成app打包资源。
在项目根目录新建一个文件夹,以 src/manifest.json
中的 appid
字段为文件名,然后在文件夹中创建一个 www
目录,将 app-plus
文件夹下的资源拷贝到 www
目录中。
如果 manifest.json 中
的 appid
字段为空
,需要将项目拖进 HBuilderX 中重新获取一个 appid。注意:appid不能随便填写,必须重新获取。
用 HBuilderX 重新获取 appid
的方法:
- 打开 HBuilderX ,文件 —— 导入 —— 从本地目录导入,将项目导入进来
- 打开
src
目录,点击manifest.json
,点击基础配置右边的重新获取。
登录开发者中心,查看AppKey是否生成了,以及包名是否为空。如果没有AppKey,那么要填写下面的内容,生成。
重新运行npm run build:app-plus
,生成新的app-plus内容,替换之前的www
文件夹里的内容,并且打开里面的manifest.json
应该能看到id
已经变成重新获取的appid
了。
四、导入Android Studio
0 新建Android项目
官网开发环境文档
如果之前没有新建Android项目,那么要先创建一个空项目,如果已创建,可忽略此步骤。
填写 Package Name
,
Language 选择 Java
,因为小程序离线打包sdk不支持kotlin.
minSdkVersion
最低支持21,小于21在部分5.0以下机型上将无法正常使用。
图片上的Mini SDK是19,实际要选21
.
导入SDK libs
在步骤1.0里我们下载了小程序SDK,解压包,打开sdk/libs
, 拷贝以下文件到libs
目录下
lib.5plus.base-release.aar
android-gif-drawable-release@1.2.17.aar
uniapp-v8-release.aar
oaid_sdk_1.0.25.aar
libs目录:
点击左上角的Android
, 切换到 Project
视图
就可以看到 app/libs
目录
在build.gradle
中添加资源引用
切回Android视图。复制下面的代码到app的build.gradle
里,
在dependencies
下面添加代码:
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])implementation "com.android.support:support-v4:28.0.0" // 28.0.0 要替换成你的build tools 版本implementation "com.android.support:appcompat-v7:28.0.0"implementation 'com.android.support:recyclerview-v7:28.0.0'implementation 'com.facebook.fresco:fresco:1.13.0'implementation "com.facebook.fresco:animated-gif:1.13.0"implementation 'com.github.bumptech.glide:glide:4.9.0'implementation 'com.alibaba:fastjson:1.1.46.android'
其中28.0.0 要替换成你的build tools
版本,如图,这里是 30.0.3
uni-app配置时需要在build.gradle中添加aaptOptions
配置。 往上滑,在 android{}
里添加aaptOptions
:
android{....aaptOptions { additionalParameters '--auto-add-overlay' ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" }}
注意:更新SDK时需要同时更新aar/jar文件和build.gradle配置
点击右上角Sync Now
,同步Gradle配置。
配置
① 配置 Androidmanifest.xml
打开Androidmanifest.xml
,在application
节点,创建meta-data
节点,name为dcloud_appkey
,value为申请的AppKey
. 如下:
<application><meta-dataandroid:name="dcloud_appkey"android:value="替换为自己申请的Appkey" />
</application>
配置应用启动页及provider节点
Androidmanifest.xml
删掉自动生成的
MainActivity
节点,如下图部分
同时删除项目里的MainActivity
类,不需要了。复制如下代码到
application
节点里
<activityandroid:name="io.dcloud.PandoraEntry"android:configChanges="orientation|keyboardHidden|keyboard|navigation"android:label="@string/app_name"android:launchMode="singleTask"android:hardwareAccelerated="true"android:theme="@style/TranslucentTheme"android:screenOrientation="user"android:windowSoftInputMode="adjustResize" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="io.dcloud.PandoraEntryActivity"android:launchMode="singleTask"android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"android:hardwareAccelerated="true"android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"android:screenOrientation="user"android:theme="@style/DCloudTheme"android:windowSoftInputMode="adjustResize"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><action android:name="android.intent.action.VIEW" /><data android:scheme="h56131bcf" /></intent-filter></activity><!--provider节点必须添加--><providerandroid:name="io.dcloud.common.util.DCloud_FileProvider"android:authorities="${apk.applicationId}.dc.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/dcloud_file_provider" /></provider>
!!! 注意:${apk.applicationId}
必须替换成当前应用的包名. 替换后: android:authorities=“com.carrie.knowpicture.dc.fileprovider”
- 配置应用名称、图标和启动界面
应用名称
打开 res - values - strings.xml
,修改 app_nane
的值。
应用图标
icon.png为应用的图标。
push.png为推送消息的图标。
splash.png为应用启动页的图标。
打开res
目录,新建drawable-xxxhdpi
文件夹,将图标放到 drawable-xxxhdpi
文件夹
修改Androidmanifest.xml
中application节点的icon
属性为@drawable/icon
。如下图:
注意:splash.png在不同设备上显示效果不一样,为防止出现拉伸的状况,建议使用Android studio生成.9.png类型图片
1 导入资源
新建 assets 目录
点击左上角的Android
, 切换到 Project
视图
如下依次点击打开目录,在 main
文件夹右键,新建文件夹,命名为 assets
。固定名称不能更改。
在assets
右键新建一个文件夹apps
,将 3.2 步骤的appid文件夹整个复制到 apps
目录下。(文件夹结构包含 appid 和 www)
配置资源文件
打开之前下载的小程序SDK文件夹, 打开 SDK - assets
文件夹,复制 data
文件夹到 Android Studio的assets
目录下
修改dcloud_control.xml
文件:
- 修改
appid
- 生成自定义基座,在
hbuilder
根节点下添加:
debug="true" syncDebug="true"
自定义基座支持热更新需要将debug-server-release.aar打入apk中,生成正式包时可以删除。
详细步骤参考链接
2. 配置签名信息
打开 app build.gradle
在buildTypes
上面添加如下代码:
signingConfigs {config {keyAlias 'dnpic' // 在1.0步骤生成keystore文件时定义的别名keyPassword 'carrie' // keystore 密码storeFile file('E:/WebDevelopment/dnpic/dnpic.keystore') // keystore 本地存储路径,用 斜杠 /storePassword 'carrie' // keystore 密码}}
修改buildTypes - release
:
buildTypes {debug {signingConfig signingConfigs.configminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {signingConfig signingConfigs.configminifyEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
同步 Sync Now
点击 运行
.
五、打包签名apk
Build - Generate Signed Bundle / Apk
选择 APK
选择release
, 选中 V1 V2
成功后,在 app\release 目录下,看到生成的apk.
(optional) 重写Application
如果集成离线SDK时需要重写application
(不需要则跳过这一步),必须继承自DCloudApplication
,否则会导致SDK中业务逻辑无法正常运行。
新建一个Java类 MyApplication:
class MyApplication extends DCloudApplication {@Overridepublic void onCreate() {super.onCreate();}
}
将MyApplication
配置到Androidmanifest.xml中(如下): 在 application
节点中添加代码:
android:name=".MyApplication"
tools:replace="android:name"
tools需要导入。在上面的manifest
里添加:
xmlns:tools="http://schemas.android.com/tools"
name
里是MyApplication路径,默认前缀为package
FAQ
1、项目配置都正确怎么还是提示"未配置AppKey或配置错误"?
安装包的信息与你在申请Appkey填写信息不符导致的。
appid+应用包名+签名sha1三者必须与申请填写的信息一致才可以的。
uni-app打包成Android Apk 全程详解相关推荐
- 把java文件打包成.jar (jar命令详解)
把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...
- java文件打包jar文件_把java文件打包成.jar (jar命令详解)
把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...
- 2022最全Hbuilder打包成苹果IOS-App的详解
本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤. 介绍一下个人开发者账号: 再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果你想变成付费开发者账号 ...
- python3.6打包成exe文件_详解如何将python3.6软件的py文件打包成exe程序
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)
前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...
- android应用市场点击下载APK安装详解
Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...
- Cordova + vue 打包安卓(Android) apk
Cordova + vue 打包安卓(Android) apk 本系统通过Vue集成Cesium制作的高精度三维地图引擎,在此基础上进行Android封装,封装与2022-9-26日,亲测可用. 第一 ...
- unity3d android包太大了,unity/unity3d编译成android apk包瘦身方法
unity/unity3d编译成android apk包瘦身方法 本文系原创,请转发的朋友带上我的链接. 相信用unity开发的同学都会遇到类似的经历:明明资源图片不大,但是发现打包后apk文件 ...
- android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
- android apk安装过程,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
最新文章
- 使用winrar自解压功能制作安装包
- 美国诚实签经验——着装,戒指,手表装土豪,医生预约单,流水、房产和工作证明...
- 一个中科院退学博士生的感想(zz)
- 谷歌大中华区总裁李开复今日离职
- yolov3算法优点缺点_优点缺点
- homebrew mysql conf_homebrew 安装mysql后,如何配置mysql
- oracle数据库领域,菜鸟成长课程之《Oracle数据库职业直通车》,引领大家真正进入Oracle数据库领域...
- 中国工程院出台“八不准” 为院士增选“划红线”
- Kafka生成消息时的3种分区策略
- linux操作系统常用命令
- IT寡头们之间的围棋模式;最新动向:多点布局,规模经营和资本扩张
- 计算机开机网络连接启动慢,开机后网络连接出来慢,win7开机后网络连接慢
- CMake入门1——CMake与VS编译器和nmake的结合使用
- 千万级大V独家合作,西瓜视频用什么吸引创作人?
- android日历提醒小程序源码,微信小程序倒班日历简洁实用demo完整源码
- 1ppi等于多少dpi_图片知多少?
- 推特精准客户开发手册
- Python 3 迁移怨声载道
- Windows下自动连接WiFi 脚本
- 算法二十二:倒水问题
热门文章
- 微信 html5 声音,Html5-video ,播放视频有声音无画面(微信H5页面)
- 服务器游戏性能测试工具,python 游戏服务器 性能测试工具
- 数据库系统原理学习笔记三(关系数据模型的组成要素)
- 软件工程—团队作业1(三人行)
- 【C++】代码实现:数据线性平滑算法:3点线性平滑、5点(1次、2次、3次)线性平滑、7点(1次、2次)线性平滑
- Kubernetes 学习路径
- Flink统计日志图片信息并降序排序
- 【Beta】 第六次Daily Scrum Meeting
- Tkinter 学习笔记
- 随机产生四位,任意位或者范围数字方法