MUI、HBuilderX、H5+开发APP本地打包(Android)

此文基于MUI、HBuilderX、H5+开发的APP本地打包,不适用uniapp。

同款iOS的在这里: MUI、HBuilderX、H5+开发APP本地打包(iOS)

为什么本地打包

使用HBuilderX开发完项目后打包-发布, 通常情况下直接选择【app云打包】直接在线打包然后下载安装包,简单、方便。

一般情况下这种方式满足了大部分需求,但同时也有几个问题:

  • 1、项目代码提交官方后台(官方保证不保留任何用户代码,个人感觉也没啥问题)。
  • 2、云打包有文件大小限制,超过40M的文件打包需要提交申请,然后付费。对于我们测试某个问题,一天打包很多次也是不少的费用。

我们的APP包很大,如果云打包,不合适。所以必须自己本地打包。

工具准备

  • 开发工具 :HBuilderX(版本2.4.6.20191210)
  • 安卓打包SDK: Android-SDK@2.4.6.71983_20191211,版本要和HBuilderX保持一致,一般都是更新到官方最新版就可以了。
  • 打包工具:Android Studio 3.5.2

操作步骤

1、Android Studio创建一个工程,删除如下无用文件

1_新建工程.png

2、复制SDK->libs->lib.5plus.base-release.aar文件,及其他所需的库文件到原生工程工程的app->libs目录下

2_导入sdk.png

3、新建如下目录层级,导入有HBuilderx导出的APP资源文件

导入资源目录.png

apps.xxxx.www: xxx为HB中appid,appid为应用资源manifest.json文件中id节点的值,必须保持一致否则APP无法运行。

4、导入data目录文件,并修改dcloud_control.xml文件的apps->app->appid属性的值改为当前应用manifest.json文件id节点的值

导入data文件.png

5、替换res->drawble目录应用的图标文件

修改图标.png

6、修改配置文件
AndroidManifest.xml,
build.gradle,
这一步至关重要,稍有不慎APP或无法运行或 闪退、或相关功能不起作用、无法获取相关权限。最终配置如下;
AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gech.app">
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

    <application
        android:name="io.dcloud.application.DCloudApplication"
        android:allowClearUserData="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true"
        >
        <provider
            android:name="io.dcloud.common.util.DCloud_FileProvider"
            android:authorities="com.genertech.jzapp.dc.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/dcloud_file_provider" />
        </provider>
        <activity
            android:name="io.dcloud.PandoraEntryActivity"
            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:configChanges="orientation|screenSize"

            android:windowSoftInputMode="stateAlwaysHidden"

            android:theme="@style/DeviceDefault.Light"

            android:name="com.dmcbig.mediapicker.PickerActivity" />

        <activity android:configChanges="orientation|screenSize"

            android:windowSoftInputMode="stateAlwaysHidden"

            android:theme="@style/DeviceDefault.Light"

            android:name="com.dmcbig.mediapicker.PreviewActivity"/>
    </application>
</manifest>

使用到的权限:

  • 访问网络
  • 访问相机和相册
  • 存储权限
  • 应用内安装权限

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.gech.app"
        minSdkVersion 25
        targetSdkVersion 29
        versionCode 108
        versionName "1.0.8"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        disable 'GoogleAppIndexingWarning'
        checkReleaseBuilds false
        abortOnError true
    }
}

repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation fileTree(include: ['*.aar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//    implementation 'androidx.multidex:multidex:2.0.0'
//    implementation 'androidx.appcompat:appcompat:1.0.0'

    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.nineoldandroids:library:2.4.0'
    implementation 'com.github.bumptech.glide:glide:4.5.0'
}

引入第三方库、APP配置相关、文件依赖。

遇到的问题及解决方法

遇到的问题大多都是权限配置的问题,刚开始不太熟悉用到一些功能也想不起去配置权限。

  • 1、访问相册时没有返回按钮及导航栏相关,默认HB选择图片的样式很不友好。

解决:
libs引入如下文件

选择相册.png

application中设置如下:

       <activity android:configChanges="orientation|screenSize"

            android:windowSoftInputMode="stateAlwaysHidden"

            android:theme="@style/DeviceDefault.Light"

            android:name="com.dmcbig.mediapicker.PickerActivity" />

        <activity android:configChanges="orientation|screenSize"

            android:windowSoftInputMode="stateAlwaysHidden"

            android:theme="@style/DeviceDefault.Light"

            android:name="com.dmcbig.mediapicker.PreviewActivity"/>

2、选择图片点击相机无法弹出,没有提示获取访问相机的权限请求。

解决:
application引入权限即可

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus" />

3、APP版本升级时,下载新版本无法安装,权限问题。

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

同时application添加provider

        <provider
            android:name="io.dcloud.common.util.DCloud_FileProvider"
            android:authorities="com.gech.jzapp.dc.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/dcloud_file_provider" />
        </provider>

4、无法js文件加密

在线打包时可以选择js原生混合实现主要的js文件加密,由于官方加密算法的保密限制离线打包不在支持,目前还没有找到合适的实现方案。

总结

  • 类似本地打包操作这种严重依赖平台的操作要多阅读官方文档,但是由于版本区别、文档更新不及时错误很难避免,实际遇到问题要时刻保持关注,多方搜集。

  • 使用系统功能时如果不起作用,考虑是否需要申请用户权限

  • Android Studio 打包时注意gradle版本问题,由于网络问题可能会出现编译失败等问题,直接下载到本地使用更加方便。

  • HB的版本和离线打包的sdk的打包尽量保持一致,如果不一致可能会出现莫名其妙的问题。

参考

我是Light413,一名iOS开发者,喜欢前端及后台开发。我在简书,简书就是我的阵营,我喜欢在这里学习,在这里分享。以后文章会不断的更新,介绍关于iOS开发学习总结 , 介绍基于H5开发中感悟记录总结。感觉有用就点赞哈,喜欢就大胆的关注。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容