关于uni-app离线打包安卓应用的详细到坑坑都踩了的大步骤

4,197 阅读9分钟

哈喽哈,我是小王子,最近写了一个网页套壳的APP,用的技术是java+hbuild+android studio,总体来说还是很麻烦的因为它也确实很麻烦会有很多坑坑坑了啦

  1. 首先我们要在电脑上安装一些东西,首先java包要用jre1.8.0\_201或之前的包,之后的包不会生成md5的密钥哦,嘿嘿
  2. 其次我这边安装的是android-studio-2021.1.1.22-windows这个版本的东西,自行去找资源,如果找不到可以来找我安慰你
  3. hbuild版本用最新的就可以这里不做要求了哦
  4. 没有第四条了,这里我为什么要写第四条呢,因为顺手打下来的

一、安装android studio

一般来说呢直接安装就可以了呢,但是进去了之后会遇到很多问题,但是呢这些问题大部分是一个原因,没有配置呢镜像的原因

选择auto detect proxy settings, 填maven.aliyun.com/nexus/conte…

image.png

然后关掉android studio后重开,基本就可以了呢,在2023.4.13日使用是可以的了

二、安装java并且产生一个秘钥

  1. 安装JRE环境(推荐使用JRE8环境,如已有可跳过)

  2. 生成签名证书

    使用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要求这两个密码一致),直接回车就可以

以上命令运行完成后就会生成证书,路径为你运行这段代码的文件下。

3.查看证书信息

可以使用以下命令查看:

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    
         SHA1: BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7    
         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    
Signature algorithm name: SHA256withRSA    
Subject Public Key Algorithm: 2048-bit RSA key    
Version: 3

其中证书指纹信息(Certificate fingerprints):

  • MD5
    证书的MD5指纹信息(安全码MD5)
  • SHA1
    证书的SHA1指纹信息(安全码SHA1)
  • SHA256
    证书的SHA256指纹信息(安全码SHA245)

三、生成app的那个必须要用的key

  1. 去dclioud的官方开发者的官网(dev.dcloud.net.cn/pages/app/l…
  2. 找到你的应用
  3. 点击你的应用名称
  4. 点击各平台信息选项
  5. 在修改里面填上第二部生成的那些东西
  6. 在离线打包里面查看你的app的key
  7. 这个key很有用的记得记一下

四、运行你的安卓app呢

一、生成本地打包APP资源

HBuilderX菜单:发行=》原生app本地打包=》生成本地打包APP资源; 生成的资源后面用到

准备工程

一:新建工程

打开Android studio新建一个空白项目

image.png

选择 Empty Activity 点击 Next。

image.png

Minimum API Level 建议选21及以上

Package name作为应用标志,涉及申请第三方平台账号,一般情况下不建议修改,包名一般设置反向域名,如:io.dcloud.HBuilder

点击 Finish 完成创建

二:导入工程

2.7.0之后提供HBuilder-Integrate-AS工程,可以直接导入HBuilder-Integrate-AS工程,直接运行simpleDemo项目即可。

三:准备工作

  1. HBuilder-Integrate-AS复制到项目文件夹;
  2. 左上角把 Android 切换为 Project(下图);

image.png

  1. 把第一步打包好的资源放到 \simpleDemo\src\main\assets\apps 内;
  2. 把 \simpleDemo\src\main\assets\data 的 dcloud_control.xml 的appid改为自己的;
  3. 把 \simpleDemo\src\main\res\drawable 的图标改为自己的,splash则可以右键创建 .9 启动图(splash.png和splash.9.png只能保留一个);
  4. 把 \simpleDemo\src\main\res\values\strings.xml 的app名称改为自己的,这个会显示在手机桌面;
  5. 重点 修改文件 \app\src\main\AndroidManifest.xml
把manifest节点的package属性改为自己项目的包名;
搜索dcloud_appkey,把下一行的value值改为dcloud开发者后台生成的appkey;
  1. 添加权限:在application节点前,与application节点并列:
 例如:(也就是uniapp项目的配置文件manifest.json里面的权限permission那一坨)
 <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_NETWORK_STATE"/>
  1. 配置build.gradle,在app(simpleDemo)目录下:
defaultConfig: applicationId包名 
versionCode版本号code
versionName版本号 
signingConfigs:配置证书相关信息
  1. 配置keystore,build.gradle文件的android节点下配置如下:
signingConfigs {
        config {
            keyAlias '签名别名'
            keyPassword '签名密码'
            storeFile file('xxx/xxx/xxx.keystore或xxx/xxx/xxx.jks') // 路劲为相对路径或绝对路径
            storePassword '密码'
            v1SigningEnabled true //兼容v1
            v2SigningEnabled true //兼容v2
        }
}

buildTypes {
        debug {
            signingConfig signingConfigs.config
            ...
        }
        release {
            signingConfig signingConfigs.config
            ...
        }
}

项目配置都正确怎么还是提示"未配置AppKey或配置错误"?

这种情况不用怀疑。还是安装包的信息与你在申请Appkey填写信息不符导致的。 appid+应用包名+签名sha1三者必须与申请填写的信息一致才可以的。

android平台 可以按以下步骤检查一下离线项目配置:

  1. 查看签名文件是否配置到了主APP的build.gradle,配置方式参考上面常见问题1。注意:需要将signingConfigs添加到buildTypes才会生效
  2. 查看离线项目中dcloud_control.xml文件中的appid是否与申请AppKey时的appid一致。

image.png 3. 检测离线项目的包名是否申请AppKey时的包名是否一致。

image.png

  1. 对比安装包apk文件的SHA1是否与应用后台配置的SHA1一致。
  • Android studio调试时提示appkey配置错误,参考文档获取签名信息与后台配置SHA1对比是否一致。
  • 生成正式包时提示appkey配置错误,获取安装包apk文件获取(签名参考下面问题4)与后台配置SHA1对比是否一致。
  1. 检查dcloud_appkey配置位置是否正确,dcloud_appkey一定要放到Androidmanifest.xml文件的application节点里。
	<application>
        <meta-data
            android:name="dcloud_appkey"
            android:value="替换为自己申请的Appkey" />
	</application>

五、运行你的安卓app呢出现的问题

1.你的安卓运行图标完全不急毛亮,一直是灰色的我去贼厉害了呢,点击工具栏的Sync Project with Gradle Files按钮

image.png

点击按钮后会开始同步Gradle,下载一些相关的东西,若同步后有报错就把相关错误修复后再重新同步一次

六、打包输出你的安卓apk的安卓包子

  1. 通过签名jks来试试,点击导航栏的Build→Generate Signed Bundle / APK…

image.png

image.png

Next

image.png

这里需要一个商店的key,因为没有,所以创建一个新的,点击Create new…

image.png

首先指明生成的jks文件的路径,点击这个文件夹图标。

image.png

然后命名jks的名称为GenerateAPK,然后点击OK。

image.png

然后输入这个jks和别名的一些相关信息,上方的商店密码和别名密码可以设置为一样的,这样便于记忆,只不过安全系数就降低了。我上面设置的是123456,信息都设置好了之后,点击OK。

image.png

如果出现这个弹窗,你可以不用担心,点击OK。

image.png

这里勾选上记住密码。

image.png

选择release,下面两个都勾选上,然后点击Finish。

image.png

当你看到屏幕的右下角出现这个提示时,说明你的APK已经生成了,你可以在你的app下看到多了一个release的文件夹,里面就是app-release.apk包,下面你可以复制发到手机上,然后下载,手机上是可以安装的。

image.png

三、打包的细节优化

从上面的操作中,你已经知道了一些内容,而在基本的开发中也是会用到的,而为了更好区别不同的包名,常用会给apk进行一个重命名,让你一眼就知道这个apk是哪个项目的。

① 自定义Apk名字

修改app下的build.gradle

// 自定义打包名称
android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "GenerateAPK_${buildType.name}_v${versionName}.apk" } }

添加位置如下图所示

image.png

  1. 以上apk打包参考 blog.csdn.net/qq\_3843621…

七、安装中文的android studio

1.点击下方卡片进入IntelliJ Platform插件页面

Chinese (Simplified) Language Pack / 中文语言包 - IntelliJ IDEs Plugin | Marketplace

2.点击,这里一定要安装和你匹配的中文包一定

image.png

3.点击download

image.png

4.打开刚刚下载的zip,解压

5.按下图操作

image.png

6.找到刚刚解压的jar文件,点击OK

image.png

  1. 点击,选择

image.png

在弹出的界面,单击plugins

image.png

搜索chinese,下载第二个

image.png

image.png

  1. 重启

  2. 以上收录与www.zhihu.com/tardis/zm/a…

感谢收看,哈哈哈哈,下次我再分享如何将base64的图片改为file格式类型