JyLie

vuePress-theme-reco JyLie    2017 - 2023
JyLie

Choose mode

  • dark
  • auto
  • light
主页
分类
  • API
  • HTML
  • css
  • vue
  • Linux
  • Docker
  • Webpack
  • WebGL
  • PixiJS
  • Github
  • BOM
  • XML
  • bug
  • ie
  • uniapp
  • IE
  • mysql
  • font
  • bom
  • canvas
  • video
  • html
  • JavaScript
  • js
  • 运算符
  • RegExp
  • 编码
  • MiniApp
  • nginx
  • Tool
  • node.js
  • cat
  • nodejs
  • protocol
  • URL
  • FLOW
  • DNS
  • Protocol
  • python
  • 安全
  • linux
  • shell
  • IDE
  • Packer
  • ViteJS
  • git
  • vendor
  • WebApp
  • WebView
  • Window API
  • webview
  • 规范
标签
时光轴
GitHub
author-avatar

JyLie

74

Article

79

Tag

主页
分类
  • API
  • HTML
  • css
  • vue
  • Linux
  • Docker
  • Webpack
  • WebGL
  • PixiJS
  • Github
  • BOM
  • XML
  • bug
  • ie
  • uniapp
  • IE
  • mysql
  • font
  • bom
  • canvas
  • video
  • html
  • JavaScript
  • js
  • 运算符
  • RegExp
  • 编码
  • MiniApp
  • nginx
  • Tool
  • node.js
  • cat
  • nodejs
  • protocol
  • URL
  • FLOW
  • DNS
  • Protocol
  • python
  • 安全
  • linux
  • shell
  • IDE
  • Packer
  • ViteJS
  • git
  • vendor
  • WebApp
  • WebView
  • Window API
  • webview
  • 规范
标签
时光轴
GitHub
  • uniapp离线打包

    • 获取离线打包sha1、sha256、md5方法
      • Dcloud平台申请
        • 离线打包步骤

        uniapp离线打包

        vuePress-theme-reco JyLie    2017 - 2023

        uniapp离线打包


        JyLie 2023-08-23 uniapp

        # 获取离线打包sha1、sha256、md5方法

        首先你得先安装JRE环境(安装Android Studio的时候也得安装JDK,同时就有安装JRE了)

        随便进入一个磁盘,这里我是在C盘操作的,执行cmd进入命令行

        使用keytool -genkey命令生成证书: keytool -genkey -alias [alias_name] -keyalg RSA -keysize 2048 -validity 36500 -keystore [alias_name].keystore

        接着填写对应信息,确认是否正确时按Y生成一个签名文件,如下:

        输入密钥库口令:
        再次输入新口令:
        您的名字与姓氏是什么?
          [Unknown]:  Lie
        您的组织单位名称是什么?
          [Unknown]:  Lie
        您的组织名称是什么?
          [Unknown]:  Lie
        您所在的城市或区域名称是什么?
          [Unknown]:  Lie
        您所在的省/市/自治区名称是什么?
          [Unknown]:  Lie
        该单位的双字母国家/地区代码是什么?
          [Unknown]:  Lie
        CN=Lie, OU=Lie, O=Lie, L=Lie, ST=Lie, C=Lie是否正确?
          [否]:  Y
        
        输入 <uniapp-template> 的密钥口令
                (如果和密钥库口令相同, 按回车):
        再次输入新口令:
        
        Warning:
        JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore uniapp-template.keystore -destkeystore uniapp-template.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23

        接着获取sha1和sha256

        keytool -list -v -keystore [alias_name].keystore
        
        1

        获得MD5:

        keytool -exportcert -keystore [alias_name].keystore | openssl dgst -md5 
        
        1

        # Dcloud平台申请

        接着在Dcloud创建 Android ID,登录 Dcloud 后台,进入应用列表 (dcloud.net.cn ) 路径如下:应用管理 - 我的应用,点击右上角创建应用,应用类型选择uni-app,填写名称点击创建即可在列表中看到刚刚创建的一项,然后在列表中点击蓝色的应用名称进入配置。

        接着在应用管理 - 我的应用 的应用列表找到刚创建的应用,点击 应用名称 进入 应用信息。

        接着在各平台信息的Tab点击新增按钮填写信息,主要信息有:

        • 包名:com.android.test
        • sha1:xxxxx
        • sha256:xxxxx
        • MD5:xxxxx

        填写好信息后提交。

        接着在刚新建条目上找到离线打包Key 点击 创建 生成离线key offline_key。

        Dcloud平台信息申请成功后,接着来搞离线打包的事情了。

        # 离线打包步骤

        1. 使用HBuildX安装操作发行-原生App-本地打包(L)-生成本地打包App资源(R)取得需要离线打包源代码,格式一般为:__UNI__5ABA3EB ,下面统称为 __UNI__APPNAME

        2. 准备uniapp官方提供的 SDK包

        将 uniapp 官方提供的 SDK 压缩包 解压,并将其中的 【HBuilder-Integrate-AS】导入 Android Studio,导入后将 Android 目录更改为 Projects 目录,更直观些。

        1. 将【HBuilder-Integrate-AS】路径HBuilder-Integrate-AS -> simpleDemo -> src -> main -> assets -> apps 里面的 __UNI__A 替换为前面准备的离线资源 __UNI__APPNAME。

        2. 修改\HBuilder-Integrate-AS\simpleDemo\src\main\assets\data\dcloud_control.xml文件中的appid为自己项目的ID __UNI__APPNAME

        3. 修改\HBuilder-Integrate-AS\simpleDemo\src\main\AndroidManifest.xml文件中的包名为刚刚创建离线打包Key中填入的包名,以及底下的meta-data标签dcloud_appkey的value值为上面生成的Android ID __UNI__APPNAME

        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="需要填写的包名,如:com.android.test">
        
            <application
                android:allowBackup="true"
                android:allowClearUserData="true"
                android:icon="@drawable/icon"
                android:label="@string/app_name"
                android:largeHeap="true"
                android:supportsRtl="true">
                <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|smallestScreenSize|screenLayout|screenSize|uiMode"
                    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=" " />
                    </intent-filter>
                </activity>
                <meta-data
                    android:name="dcloud_appkey"
                    android:value="需要填写的离线打包key,如:offline_key" />
            </application>
        
        </manifest>
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        1. 将自己项目中的密钥文件复制到simpleDemo目录下,如uniapp-template.keystore;也可以使用Android Studio重新创建密钥,操作路径:Build>Generate Signed Bundle or APK>Next>Create new

        2. 修改项目\HBuilder-Integrate-AS\simpleDemo\build.gradle中密钥配置为自己的刚刚生成的密钥内容,注意目录层级,外层还有一个同名build.gradle文件;然后将【applicationId】也改为自己的包名

        apply plugin: 'com.android.application'
        
        android {
            compileSdkVersion 30
            buildToolsVersion '30.0.3'
            defaultConfig {
                applicationId "需要填写的包名,如:com.android.uniappTemplate"
                minSdkVersion 21
                targetSdkVersion 28
                versionCode 1
                versionName "1.0"
                multiDexEnabled true
                compileOptions {
                    sourceCompatibility JavaVersion.VERSION_1_8
                    targetCompatibility JavaVersion.VERSION_1_8
                }
            }
            signingConfigs {
                config {
                    keyAlias '需要填写的密钥alias,如:uniapp-template'
                    keyPassword '需要填写的密钥,如:123456'
                    storeFile file('需要填写的密钥文件名称,如:uniapp-template.keystore')
                    storePassword '需要填写的密钥,如:123456'
                    v1SigningEnabled true
                    v2SigningEnabled true
                }
            }
        
            buildTypes {
                debug {
                    signingConfig signingConfigs.config
                    minifyEnabled false
                    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                }
                release {
                    signingConfig signingConfigs.config
                    minifyEnabled false
                    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                }
            }
            aaptOptions {
                additionalParameters '--auto-add-overlay'
                ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
            }
        }
        
        dependencies {
            implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
            implementation 'androidx.appcompat:appcompat:1.1.0'
            implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
            implementation 'androidx.core:core:1.1.0'
            implementation "androidx.fragment:fragment:1.1.0"
            implementation 'androidx.recyclerview:recyclerview:1.1.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'
        }
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        1. 这个时候会发现控制台下方是爆红的,而且打包功能区【Build】下几乎都是灰色的,接下来就该改一下【JDK】和【Gradle】的版本了,点击左上角的【File】-【Settings】将【Gradle JDK】更改为【1.8】的版本然后保存;同样点击左上角【File】-【Project Structure...】将【Gradle Version】更改为【6.5】然后保存,等待项目重新加载【Gradle】,最后关闭 Android Studio 重新打开。

        2. 点击右上角的运行按钮,等待项目运行,结果便是成功啦~

        3. 点击功能区【Build】-【Generate Signed Bundle/APK...】选择【APK】-【Next】,填入刚刚生成的【密钥内容】(这里也可以生成新的,但是需要更改项目原本的,确实没必要哈哈哈),点击【Next】选择测试版还是发布版然后【Create】等待打包生成,结果便是成功啦~最后附上打包生成的APK目录

        等待Android studio 生成android包,生成资源目录为build

        1. 补充一个可以将uniapp项目直接运行至Android Studio模拟器的方法,而且还支持修改代码后自动重载以及控制台打印报错信息等。

        首先点击运行至 Android App 基座,第一次会下载相关插件,等待下载完成自动安装

        然后打开Android Studio,关闭原有的项目,然后根据下图进入VDM管理器

        会发现列表中已经有一个虚拟机了,点击小三角即可运行起来

        然后再一次点击运行至Android App 基座,点击运行,下方就会出现一个控制台,显示项目已经启动

        但是此时虚拟机一直显示【同步手机端程序文件完成】不动,足以说明翻车了,但还不完全翻哈哈哈,这就涉及到现在的 HbuilderX 版本比较新,而 Android Studio 的默认虚拟机版本略旧,这时候就得重新安装一个新的,看下一步

        重新回到【虚拟机列表】中,先点击右边的【暂停】按钮关闭虚拟机,然后点击左上角的【Create Device】创建虚拟机,这里我选择了【Pixel 7】pro也行,反正算是最新的,然后点击【Clone Device】,然后是【Finish】,再是 【Next】,接下来我选择的是【安卓11】也就是代号为R的安卓版本,第一次需要先点击右边的【下载】按钮进行下载,下载完成之后再到这里点击【Next】,最后【Finish】即可在列表中找到刚刚创建的新的虚拟机了

        运行刚刚创建的新虚拟机,首次运行会比较慢,因为要下载很多东西,且需要开机(很像你买的新手机),再次点击运行项目至 Android App 基建,如果显示找不到【Android 设备】,就点击弹窗左上角的刷新,过一会就会刷出来了,然后点击【运行】,这时候就可以成功运行至新的虚拟机了,大功告成~~

        # 相关文献

        • uniapp离线打包APK并运行至Android Studio