uniapp 使用安卓打包离线本地apk
uniapp 使用安卓打包离线本地apk
写在前言注意:HBuilderX版本号和离线SDK应该是一致的(即运行环境版本和编译环境版本),否则在安装app的时候会弹出如下弹窗:
解决方案:(1). 方案一:使两个版本一致,下载同版本的HBuilderX,或者下载同版本的SDK
(2).方案二:忽略版本提示框,在manifest.json源码里添加以下代码。可参照该地址:https://ask.dcloud.net.cn/article/35627
"app-plus": {
"compatible": {
"ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
},
//....
},
*************************************************************************************************************************************************************************************************************************************************************
一、开发环境+文件下载的准备工作
1. 项目开发环境:HBuilderX(例:3.5.3)下载安装官网入口
2. 安卓项目编译运行打包环境:Android Studio下载安装官网入口 安装+创建一个项目示例
3. App离线SDK(软件开发工具包)(例:3.5.3)下载 快速入口 提取码:7rfu,
目的是拿到下面的五个文件做基础库配置:我的本地路径为 D:\myJob\两弹一星项目\所需文档\Android离线打包SDK(Alpha)\3.5.3\Android-SDK@3.5.3.81423_20220728\Android-SDK@3.5.3.81423_20220728\HBuilder-Integrate-AS\simpleDemo\libs
还有三个文件做资源配置:我的本地路径为:D:\myJob\两弹一星项目\所需文档\Android离线打包SDK(Alpha)\3.5.3\Android-SDK@3.5.3.81423_20220728\Android-SDK@3.5.3.81423_20220728\HBuilder-HelloUniApp\app\src\main\assets\data
4. 下载JDK(Java开发工具包)和 JRE(Java运行环境),并且配置系统环境变量。
jdk快速下载 提取码:gi9h :安装jdk;注意:需要记住自己jdk的安装位置!!!我的安装位置:E:\InstallPosition\jdk
jre快速下载 提取码:ut16 : 解压jre,将jre8u45下的jre拷贝到自己jdk安装目录下,如图
配置系统环境变量步骤如下:也可以参考https://www.cnblogs.com/18sui/p/16571437.html
(1)右键此电脑——>属性——>高级系统设置——>高级——>环境变量
(2)新建JAVA_HOME,变量值输入jdk安装位置
(3)编辑path,变量值最前面增加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(4)新建CLASSPATH,变量值输入.;%JAVA_HOME%\jre\lib
(5)点击所有的确定保存
(6)验证是否是否安装成功以及版本,以管理员身份运行命令提示符,输入java -version
5. HBuilderX中获取需要打包项目的appID(后边使用),可如下图所示在manifest.json中获取 或者登录 开发者中心(开发者中心里的应用项目是在HBuilderX创建的需要打包的项目)
注意:登录开发者中心需要登录自己或公司的账号密码,如果没有可以自己注册项目所属,如果需要应用授权或应用转让参照https://ask.dcloud.net.cn/article/id-12861__page-6
5. HBuilderX中生成本地打包App资源(后边使用)
6.SHA1的获取,可参考官方步骤——> APPKey申请,可参考官方步骤
(1). 登录开发者中心,点击我的uniapp项目
(2). 切换到“离线打包key管理”,第一步选择安卓平台,第二步安卓包名填写,第三步获取SHA1(或者按照如下步骤),目的是第四步生成Appkey,后边会用到
获取安卓证书签名SHA1步骤:
keytool -genkey -alias myTest -keyalg RSA -keysize 2048 -validity 36500 -keystore mytest.keystore
以上命令运行完成后就会生成证书,路径为“D:\mytest.keystore”。注意:我在D盘的操作所以文件的路径是D:\,下面的查看证书信息也要在D盘下输入命令
keytool -list -v -keystore mytest.keystore
7. 下载android.jks文件,提取码:j1x5,后面会用到
二、配置工程
1. 打开Android Studio新建空白工程
2. 选择“Empty Activity”
3. 设置项目名称,安卓包名com.example.myuniappsdk,项目存储位置
4. 创建完之后,切换到project下
5. 切换到我的项目myUniappSDK后,将之前准备的五个文件拷贝到如下路径
6. 复制如下内容到安卓项目的app/build.gradle中
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.aar'], dir: 'libs')
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.1.46.android'
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
注意:将android.jks拷贝到app下,与build.gradle同级别
// 第四步
signingConfigs {
config {
keyAlias 'TowOneStar' //别名,建议使用公司英文名简称
keyPassword '123456'
storeFile file('android.jks')
storePassword '123456'
v1SigningEnabled true //兼容v1
v2SigningEnabled true //兼容v2
}
}
buildTypes {
debug {
signingConfig signingConfigs.config
}
release {
signingConfig signingConfigs.config
}
}
7. 复制以下内容到app/src/main/AndroidManifest.xml中,获得AppKey
注意:(1)替换为自己申请的Appkey (2)android:authorities="替换自己的安卓包名.dc.fileprovider" (3)android:theme="@style/Theme.TowBombOneStarAndroid"中TowBombOneStarAndroid是安卓应用名称
<!--android:icon="@drawable/icon"这个是设置应用的图标很重要-->
<!--android:theme="@style/Theme.myUniappSDK"中的‘myUniappSDK’是安卓应用的名称,很重要!!!!-->
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.myUniappSDK"
tools:targetApi="31">
<meta-data
android:name="dcloud_appkey"
android:value="替换为自己申请的Appkey" />
<activity
android:exported="true"
android: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>
<activity
android:exported="true"
android:name="io.dcloud.PandoraEntryActivity"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize"
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节点必须添加-->
<provider
android:name="io.dcloud.common.util.DCloud_FileProvider"
android:authorities="com.example.myuniappsdk.dc.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<!--com.example.myuniappsdk位置填写自己项目包名-->
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/dcloud_file_provider" />
</provider>
</application>
8. app\src\main\res\values\strings.xml配置应用名称
9. 配置应用图标(logo)、启动页
icon.png为应用的图标
push.png为推送消息的图标
splash.png为应用启动页的图标
路径为:app\src\main\res
注意:
1、将icon.png、push.png、splash.png放置到drawable,drawable-ldpi,drawable-mdpi,
drawable-hdpi,drawable-xhdpi,drawable-xxhdpi文件夹下,不同文件夹下对应不同图片尺寸
(安卓新建之后没有对应的drawable-ldpi等文件夹,需自己手动创建)
2、splash.png在不同设备上显示效果不一样,为防止出现拉伸的状况,建议使用Android studio生成.9.png类型图片
安装之后的应用图标:icon.png
手机下打开应用出现启动图标:splash.png
10. 打开下载的文件目录找到对应的内容,复制到安卓项目的app/src/main/assets/data
注意:若项目中没有assets文件,点击右键新建一个即可
在assets下新建一个data文件夹下,里面放之前准备的三个文件
修改dcloud_control.xml文件,圈起来的地方需要增加或修改,替换自己的appID
在assets下新建apps文件夹,并将HBuilderX项目中打包生成的App资源拷贝到下面
11.修改根目录下文件gradle.properties,增加
android.nonTransitiveRClass=true
三、运行/打包
1、点击运行,需要手机连接数据线到电脑
2、打包apk,直接点击开发工具顶部菜单Build-Build Bundle(s)/APK(s)-Build APK(s)即可,操作完成之后,app-debug.apk所在位置如下图
最后的最后,直接下载到手机上安装app-debug.apk即可
后续:出现常见问题排查,如项目配置都正确提示“未配置AppKey或配置错误”
1、查看签名文件是否配置到了主APP的build.gradle。 signingConfigs { config { keyAlias 'TowOneStar' //别名,建议使用公司英文名简称 keyPassword '123456' storeFile file('android.jks') storePassword '123456' v1SigningEnabled true //兼容v1 v2SigningEnabled true //兼容v2 } }
2、查看离线项目中dcloud_control.xml文件中的appid是否与申请AppKey时的appid一致。
dcloud_control.xml
appid UNI...3、检测离线项目的包名是否申请AppKey时的包名是否一致。
包名 com.example.myuniappsdk
AppKey com.example.myuniappsdk
4、编译完通过apk解压获取一下签名信息与申请AppKey时填写的SHA1一致。
第4步验证如下截图。。。
输入keytool -printcert -file C:\META-INF\CERT.RSA获得SHA1签名与离线打包Key管理的SHA1签名对照是否一致