Uni-App Android 本地打包
基本配置
Hbuilder X 版本 3.1.18.20210609
Android Studio 版本 4.2.2
Jre 版本 1.8.0_291
App离线SDK 根据 Hbuilder X 自行下载
3.1.10版本起需要 申请Appkey
申请 Appkey 需要 生成Android平台签名证书(.keystore)
简单生成一个签名证书
使用 cmd 添加当前临时环境变量 path
set PATH=%PATH%;"C:\Program Files\Java\jre1.8.0_291\bin"
使用 keytool -genkey
生成一个证书
keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
# testalias 是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字
# test.keystore 是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径
# 36500 是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期
回车后提示
Enter keystore password: # 输入证书文件密码,输入完成回车
Re-enter new password: # 再次输入证书文件密码,输入完成回车
What is your first and last name?
[Unknown]: # 输入名字和姓氏,输入完成回车
What is the name of your organizational unit?
[Unknown]: # 输入组织单位名称,输入完成回车
What is the name of your organization?
[Unknown]: # 输入组织名称,输入完成回车
What is the name of your City or Locality?
[Unknown]: # 输入城市或区域名称,输入完成回车
What is the name of your State or Province?
[Unknown]: # 输入省/市/自治区名称,输入完成回车
What is the two-letter country code for this unit?
[Unknown]: # 输入国家/地区代号(两个字母),中国为CN,输入完成回车
Is CN=XX, OU=XX, O=XX, L=XX, ST=XX, C=XX correct?
[no]: # 确认上面输入的内容是否正确,输入y,回车
Enter key password for <testalias>
(RETURN if same as keystore password):
# 确认证书密码与证书文件密码一样(HBuilder|HBuilderX要求这两个密码一致),直接回车就可以
注意:上述信息填写要规范,乱填有可能会影响应用上架应用市场。
可通过 keytool -list -v -keystore <证书名称>
查看证书信息
keytool -list -v -keystore test.keystore
Enter keystore password: # 输入密码,回车
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: test
Creation date: 2019-10-28
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN
Issuer: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN
Serial number: 7dd12840
Valid from: Fri Jul 26 20:52:56 CST 2019 until: Sun Jul 02 20:52:56 CST 2119
Certificate fingerprints:
MD5: F9:F6:C8:1F:DB:AB:50:14:7D:6F:2C:4F:CE:E6:0A:A5 # 证书的MD5指纹信息(安全码MD5)
SHA1: BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7 # 证书的SHA1指纹信息(安全码SHA1)
SHA256: 24:11:7D:E7:36:12:BC:FE:AF:2A:6A:24:BD:04:4F:2E:33:E5:2D:41:96:5F:50:4D:74:17:7F:4F:E2:55:EB:26
# 证书的SHA256指纹信息(安全码SHA245)
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
SHA1指纹信息 在申请 Appkey 需要用到
准备项目(参考)
打开 android studio 创建一个空白项目
-
package name 对应 Android 包名
-
使用 Java 进行创建
切换到 Project
打开 下载好的 SDK 3.1.18\Android-SDK@3.1.18.80859_20210610\HBuilder-Integrate-AS\simpleDemo\libs
将包复制到 libs
修改 build.gradle
在 dependencies 加上
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation "com.android.support:support-v4:28.0.0"
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'
出现红色波浪线
右键项目 选择
确定后,点击 Do Refactor 即可
然后 在 android 中添加
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
配置 Androidmanifest.xml
在 <application></application>
中加入
<meta-data android:name="dcloud_appkey" android:value="申请的 Appkey"></meta-data>
新建的项目默认会有一个MainActivity的节点,必须删掉!
<!-- 删掉 -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 替换上 -->
<activity
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: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节点必须添加-->
<provider
android:name="io.dcloud.common.util.DCloud_FileProvider"
android:authorities="${apk.applicationId}.dc.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/dcloud_file_provider" />
</provider>
${apk.applicationId} 更换为当前应用的包名
生成本地资源
生成本地资源在项目中右键
打包完成后会生成一个本地资源,这里我使用的是 SDK 自带的 simpleDemo 下的资源
将资源按照 simpleDemo 的路径放到项目中
同时将 SDK 里的 data 加入到项目中
修改 data 文件夹下的 dcloud_control.xml
将 appid 改为与本地资源 manifest.json 中的 id 一致
配置 build.gradle
回到 app -> build.gradle
查看 android -> defaultConfig
versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中version -> code值一致
versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中version -> name值一致。
applicationId为应用的包名,一般设置为反向域名,不建议修改。
建议将targetSdkVersion设置为25或以上。
App离线SDK minSdkVersion最低支持21,小于21在部分5.0以下机型上将无法正常使用。
- 100 对应 1
- 1.0.0 对应 1.0
配置最上级目录的 build.gradle
在这两个位置分别加上 镜像
// 添加的阿里云镜像
maven{ url "http://maven.aliyun.com/nexus/content/groups/public/" }
maven{ url "http://maven.aliyun.com/nexus/content/groups/repositories/jcenter/" }
配置 strings.xml
文件
打开app-> src -> main -> res -> values -> strings.xml文件,修改“app_name”字段值,该值为安装到手机上桌面显示的应用名称,建议与manifest.json中name(基础配置中的应用名称)对应。
配置图标
右键打开 res
上传图片,调整
next -> finish
将加载图片命名为 splash.png 放到 drawable 文件夹中
如出现拉伸情况可 参考
打包 apk
打开 Generate Signed Bundle or APK 选择 apk
Next
选择先前生成的 .keystore文件 输入别名、密码
Next
完成打包
点击 local 进入 release
检查 apk
复制一份 apk
改后缀名为 zip
进入解压包
将 META-INF/CERT.RSA 解压出来
使用
keytool -printcert -file CERT.RSA
注意是否设置了 jre 环境变量
查看 SHA1 是否与 .keystore 一致,不一致可能要查看是否配置错误