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签名对照是否一致

posted @ 2022-08-23 16:50  上官伍阳  阅读(321)  评论(0)    收藏  举报