• uni-app之android离线打包


    一 AndroidStudio创建项目

    1.1,上一节演示了uni-app云打包,下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目

    1.2,下载uni-app离线SDK,离线SDK主要用于App本地离线打包及扩展原生能力,SDK下载链接https://nativesupport.dcloud.net.cn/AppDocs/download/android.html#

    1.3,SDK目录说明

        |-- HBuilder-Hello                App离线打包演示应用
        |-- HBuilder-Integrate-AS        集成uni-app的最简示例
        |-- SDK                            SDK库文件目录
        |-- Feature-Android.xls            Android平台各扩展Feature API对应的详细配置
        |-- Readme.txt                    版本说明文件及注意事项
        |-- UniPlugin-Hello-AS            uni原生插件开发示例

    1.4,SDK目录,后面androidStudio需要用到SDK里面资源

    1.5, AndroidStudio配置uni-sdk,将uni-sdk基础arr包复制到AndroidStudio的libs目录下

    lib.5plus.base-release.aar

    android-gif-drawable-release@1.2.23.aar

    uniapp-v8-release.aar

    oaid_sdk_1.0.25.aar

    install-apk-release.aar

    breakpad-build-release.aar

    1.6,拷贝assets里面的data目录,到androidStudio里面的assets里面

    1.7,app目录的build.gradle配置项目依赖dependencies,AndroidX版本需添加如下资源

    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.2.83'
    implementation 'androidx.webkit:webkit:1.3.0'

    1.8, uni-app配置时需要在build.gradle中添加aaptOptions配置

    aaptOptions {  
        additionalParameters '--auto-add-overlay'  
        ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"  
    }  
     

    1.9, androidStudio配置支持aar加载,新老gradle构建工具aar配置有所变化

    老版本在app的build.gradle中配置

    新版本在仓库级别里面配置,项目根目录里面的build.gradle或者settings.gradle

    1.10,在app的build.gradle中引用aar

    二,uni-app项目打包app资源

    2.1 获取appkey,登录开发者平台注册为开发者,https://dev.dcloud.net.cn/

    2.2 找到刚创建的uni-app项目

     2.3 创建证书

    2.3 查看证书并复制sha1值,离线打包key会用到

    2.4 点击离线打包key管理,会跳到各平台信息配置,配置sha1,MD5,SHA256和包名

     appid就是androidStudio项目里面的applicationId

    2.5 平台信息提交之后就可以创建key了

    创建之后进行查看,AppKey不区分debug和release模式,Andorid如需要调试需要使用申请AppKey时的证书

    2.6 打包uni-app资源包,发行-原生app本地打包-生成app资源

     控制台打包进度,成功后打开目录,将ID级的整个目录复制

    2.7 androidStudio的assets创建一个apps的目录,将app资源包拷贝到androidStudio项目的assets目录里面,注意:dcloud_control.xml里面的appid要改为对应的id。

    2.8 androidStudio项目的app-build.gradle 里面也改为对应的版本

    三,androidStudio配置key

    3.1 主APP的build.gradle文件的android节点下配置应用的签名信息,先下载证书

    3.2 配置正式签名和调试签名

    signingConfigs {
        config {
            keyAlias '__uni__ee84bbf'
            keyPassword 'slvjh2d2'
            storeFile file('slvjh2d2.keystore') // 路径为相对路径或绝对路径
            storePassword 'slvjh2d2'
            v1SigningEnabled true //兼容v1
            v2SigningEnabled true //兼容v2
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.config
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug  {
            signingConfig signingConfigs.config
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

    3.3 Androidmanifest.xml配置key


        xmlns:tools="http://schemas.android.com/tools"> 

                 ...>
                        android:name="dcloud_appkey"
                android:value="替换为自己申请的Appkey" />

    3.4 配置清单的application和应用入口,直接用unisdk的资源就行

    整个清单文件如下:

    1. "1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:tools="http://schemas.android.com/tools">
    4. <application
    5. android:name="io.dcloud.application.DCloudApplication"
    6. android:allowBackup="true"
    7. android:dataExtractionRules="@xml/data_extraction_rules"
    8. android:fullBackupContent="@xml/backup_rules"
    9. android:icon="@mipmap/ic_launcher"
    10. android:label="@string/app_name"
    11. android:supportsRtl="true"
    12. android:theme="@style/Theme.UniApp"
    13. tools:targetApi="31">
    14. <activity
    15. android:name="io.dcloud.PandoraEntry"
    16. android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale"
    17. android:exported="true"
    18. android:hardwareAccelerated="true"
    19. android:theme="@style/TranslucentTheme"
    20. android:windowSoftInputMode="adjustResize"
    21. tools:ignore="WrongManifestParent">
    22. <intent-filter>
    23. <data android:scheme="hbuilder" />
    24. <action android:name="android.intent.action.VIEW" />
    25. <category android:name="android.intent.category.DEFAULT" />
    26. <category android:name="android.intent.category.BROWSABLE" />
    27. intent-filter>
    28. <intent-filter>
    29. <data android:mimeType="image/*" />
    30. <action android:name="android.intent.action.SEND" />
    31. <category android:name="android.intent.category.DEFAULT" />
    32. intent-filter>
    33. <intent-filter>
    34. <action android:name="android.intent.action.MAIN" />
    35. <category android:name="android.intent.category.LAUNCHER" />
    36. intent-filter>
    37. activity>
    38. <meta-data
    39. android:name="dcloud_appkey"
    40. android:value="221fedc4b1f1f2087f96c7120ca8d3b9" />
    41. application>
    42. manifest>

    四 调试运行和打包

    4.1 出现主题冲突错误

    那就删掉项目中的style.xml ,同时清单文件里面的application的主题也更换为透明主题

    修改前

     修改后

    再次运行可以安装成功了 

    4.2  安装后但运行失败,报找不到activity类错误

    然后对比了下SDK的清单,发现确实少注册了一个类,那就注册上

    1. <activity
    2. android:name="io.dcloud.PandoraEntryActivity"
    3. android:launchMode="singleTask"
    4. android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize|uiMode"
    5. android:hardwareAccelerated="true"
    6. android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
    7. android:screenOrientation="user"
    8. android:theme="@style/DCloudTheme"
    9. android:windowSoftInputMode="adjustResize"
    10. android:exported="true">
    11. <intent-filter>
    12. <category
    13. android:name="android.intent.category.DEFAULT" />
    14. <category
    15. android:name="android.intent.category.BROWSABLE" />
    16. <action
    17. android:name="android.intent.action.VIEW" />
    18. <data
    19. android:scheme=" " />
    20. intent-filter>
    21. activity>

    4.3 再次运行发现可以成功了跑起来了

     4.4 androidStudio选择build-generate signed bundle//Apk,打包apk

    4.5 选择证书密钥

    4.6 填写签名信息

    4.7 选择创建正式包

     4.8 OK,打包成功

     4.9 正式apk安装到手机也可以运行成功,离线打包就完成了

    4.10 主要步骤

    • 新建uni项目生成uni-appid
    • 开发者平台生成密钥证书并生成appkey
    • 导出uni项目的app资源
    • 新建androidStudio项目,拷贝aar,新建assets的data
    • 拷贝app资源到androidStudio的apps目录
    • androidStudio项目清单文件配置入口和appkey,并统一appid和版本
    • 调试打包生成正式apk
  • 相关阅读:
    HDLBits-Fsm3onehot
    十、Mysql - 全备份 - 根据二进制日志还原数据
    2022杭电多校联赛第六场 题解
    源码分享-M3U8数据流ts的AES-128解密并合并---GoLang实现
    从零开始的Socket编程 一
    Java进阶篇
    HK32F030MF4P6 SWD管脚功能复用GPIO
    记一次PDU接室外监控溶解事故
    TinyWebServer整体流程
    微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化
  • 原文地址:https://blog.csdn.net/qq_29848853/article/details/132643481