【HbuilderX】【Android Studio】打包App步骤踩坑

moonjerx
2023-10-27 / 0 评论 / 97 阅读 / 正在检测是否收录...

一、HbuilderX打包本地离线资源包www

二、安装Android Studio

1.去 谷歌开发者官网 下载最新Android Studio安装包
2.安装过程中会通过谷歌官方下载地址 https://dl.google.com 下载Android SDK文件,需要科学网络才能下载
3.默认安装包附带的JDK版本是JDK11+以上的版本,本地安装JDK8后使用组合键 Ctrl+Shift+Alt+S 打开Project Structure->SDK Location->Gradle Settings可以切换JDK版本
4.打开Dcloud官方提供的 Android-SDK@3.8.12.81924_20230817/HBuilder-Integrate-AS 工程,等待资源文件下载完毕

三、Android Studio修改配置

1.修改AppID和AppKey
(1)HbuilderX打包好的 __UNI__XXXXXXX/www 资源包放到 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\assets\apps\ 目录下,以供打包App
修改 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\assets\data\dcloud_control.xml 文件中的值,改为HbuilderX(2)打包好的www资源包文件名,形如 uni.UNIxxxxxxx
(3)修改文件 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\AndroidManifest.xml 下的 dcloud_appkey 值,为dcloud官方申请提供
(4)App在手机桌面显示的应用名称需要根据本地语言自动切换国际化多语言名称
在目录 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\res 下复制 values 文件成多份
lo7ree0e.png
并修改应用名称即可
(5)App启动图,消息推送图标,修改目录 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\res\drawable 中对应图片即可,注意尺寸大小
2.gradle-6.5版本有bug,会报错主机中软件中止了一个连接,有网友提到是pc开了热点,冲突导致。关闭热点可解决。但是我台式机无热点也会如此。切换更高版本gradle解决。
(6) HBuilder-Integrate-AS 工程下包含两个build.gradle文件,其中一个是 simpleDemo 工程的,这个才是需要修改配置的。 HBuilder-Integrate-AS 工程的build.gradle文件基本没改动过。
3.无论切换什么版本gradle都会出现以下警告,但是不影响打包

Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01

4.AndroidManifest.xml文件中增加一些权限请求

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.android.simple">


<!-- 增加的内容start -->
<!--    <permission android:name="android.permission.BATTERY_STATS" />-->
<!--    <permission android:name="android.permission.WRITE_SETTINGS" />-->
<!--    <permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />-->
<!--    <permission android:name="android.permission.READ_LOGS" />-->

    <!-- 上架谷歌需要禁用-start -->
<!--    <uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:node="remove" tools:ignore="ProtectedPermissions" />-->
<!--    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove" tools:ignore="QueryAllPackagesPermission" />-->
<!--    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>-->
    <!-- 2023年8月11日 起谷歌要求应用必须以 Android 13(SDK API 级别 33) 或更高级别为目标平台,以下2个权限已被弃用-->
<!--    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
<!--    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
    <!-- 上架谷歌需要禁用-end -->


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.hardware.camera" />
    <uses-permission android:name="android.hardware.camera.autofocus" />
    <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_WIFI_STATE" />

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />


    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--    申请白名单保活,用于进程杀死 google 推送-->
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

    <!-- 解决某些设备不能从google play下载app的问题,声明此硬件使用并非必要-->
    <!--    <uses-feature android:name="android.hardware.location.gps" android:required="false"/>-->
    <!--    <uses-feature android:name="android.hardware.location" android:required="false"/>-->
    <!--    <uses-feature android:name="android.hardware.location.network" android:required="false"/>-->
    <!--    <uses-feature android:name="android.hardware.telephony" android:required="false"/>-->
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />
    <!--    <uses-feature android:name="android.hardware.wifi" android:required="false"/>-->
    <!--    <uses-feature android:name="android.hardware.bluetooth" android:required="false"/>-->
<!-- 增加的内容end -->
  
    <application
        android:allowBackup="true"
        android:allowClearUserData="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:supportsRtl="true">
        <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|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="xxxxxxxxxxxxxxxxxxxxxxxxxx" />
    </application>

</manifest>

AndroidManifest.xml中的 <activity/> 节点 android:exported 必须赋值,否则报错,dcloud官方文档赋值false
节点是向dcloud申请的appKey
5.官方提供的SDK包simpleDemo工程下libs中不包含录音功能需要的 audio-mp3aac-release.aar 包,缺此包打包出来的应用调用录音api会弹出h5+提示缺少录音包
此包在官方提供的SDK包中目录 Android-SDK@3.8.12.81924_20230817\SDK\libs\audio-mp3aac-release.aar
6.打包出来的默认apk/aab文件名格式为 simpleDemo_release.aab ,缺乏辨识度
build.gradle(:simpleDemo) 文件中的android节点最底部添加如下代码可以修改打包出来的apk/aab文件名

apply plugin: 'com.android.application'

android {
    compileSdkVersion 34
    buildToolsVersion '30.0.3'
    defaultConfig {
        applicationId "uni.UNIxxxxxxx"
        minSdkVersion 21
        targetSdkVersion 34
        versionCode 30100
        versionName "3.1.0"
        multiDexEnabled true
        ndk {
            // abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
            // 谷歌要求:提供了32位程序,就必须提供64位程序
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    signingConfigs {
        config {
            keyAlias 'XXXAlias'
            keyPassword 'keyPassword'
            storeFile file('xxx.keystore')
            storePassword 'keyPassword'
            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:*~"
    }

    //重命名输出apk/aab文件名
    setProperty("archivesBaseName", "AppName_v${defaultConfig.versionName}_" + new Date().format("YYYYMMddHHmm", TimeZone.getTimeZone("GMT+08:00")))
    //仅对apk有效
    //    android.applicationVariants.all { variant ->
    //        variant.outputs.all {
    //            def createTime = new Date().format("YYYYMMddHHmm", TimeZone.getTimeZone("GMT+08:00"))
    //            def fileName = "${signingConfigs.config.keyAlias}_${buildType.name}_v${defaultConfig.versionName}_${createTime}.apk"
    //            outputFileName = fileName
    //        }
    //    }
}

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'
}

打包出来的包名示例: AppName_v3.1.0_202310270536-release.apk ,aab文件同理
7.在正常build之前出现的莫名其妙问题,基本上都是gradle版本问题

0

评论 (0)

取消

您的IP: