MUI溺健、HBuilderX麦牺、H5+開發(fā)APP本地打包(Android)

此文基于MUI、HBuilderX鞭缭、H5+開發(fā)的APP本地打包剖膳,不適用uniapp。

同款iOS的在這里: MUI岭辣、HBuilderX吱晒、H5+開發(fā)APP本地打包(iOS)

為什么本地打包

使用HBuilderX開發(fā)完項(xiàng)目后打包-發(fā)布, 通常情況下直接選擇【app云打包】直接在線打包然后下載安裝包沦童,簡單仑濒、方便。

一般情況下這種方式滿足了大部分需求偷遗,但同時(shí)也有幾個(gè)問題:

  • 1墩瞳、項(xiàng)目代碼提交官方后臺(官方保證不保留任何用戶代碼,個(gè)人感覺也沒啥問題)氏豌。
  • 2喉酌、云打包有文件大小限制,超過40M的文件打包需要提交申請箩溃,然后付費(fèi)瞭吃。對于我們測試某個(gè)問題,一天打包很多次也是不少的費(fèi)用涣旨。

我們的APP包很大歪架,如果云打包,不合適霹陡。所以必須自己本地打包和蚪。

工具準(zhǔn)備

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

操作步驟

1、Android Studio創(chuàng)建一個(gè)工程浆洗,刪除如下無用文件

1_新建工程.png

2催束、復(fù)制SDK->libs->lib.5plus.base-release.aar文件,及其他所需的庫文件到原生工程工程的app->libs目錄下

2_導(dǎo)入sdk.png

3伏社、新建如下目錄層級抠刺,導(dǎo)入有HBuilderx導(dǎo)出的APP資源文件

導(dǎo)入資源目錄.png

apps.xxxx.www: xxx為HB中appid塔淤,appid為應(yīng)用資源manifest.json文件中id節(jié)點(diǎn)的值,必須保持一致否則APP無法運(yùn)行速妖。

4高蜂、導(dǎo)入data目錄文件,并修改dcloud_control.xml文件的apps->app->appid屬性的值改為當(dāng)前應(yīng)用manifest.json文件id節(jié)點(diǎn)的值

導(dǎo)入data文件.png

5罕容、替換res->drawble目錄應(yīng)用的圖標(biāo)文件

修改圖標(biāo).png

6备恤、修改配置文件
AndroidManifest.xml,
build.gradle,
這一步至關(guān)重要,稍有不慎APP或無法運(yùn)行或 閃退锦秒、或相關(guān)功能不起作用露泊、無法獲取相關(guān)權(quán)限。最終配置如下旅择;
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>

使用到的權(quán)限:

  • 訪問網(wǎng)絡(luò)
  • 訪問相機(jī)和相冊
  • 存儲權(quán)限
  • 應(yīng)用內(nèi)安裝權(quán)限

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配置相關(guān)、文件依賴砌左。

遇到的問題及解決方法

遇到的問題大多都是權(quán)限配置的問題,剛開始不太熟悉用到一些功能也想不起去配置權(quán)限铺敌。

  • 1汇歹、訪問相冊時(shí)沒有返回按鈕及導(dǎo)航欄相關(guān),默認(rèn)HB選擇圖片的樣式很不友好偿凭。

解決:
libs引入如下文件

選擇相冊.png

application中設(shè)置如下:

       <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产弹、選擇圖片點(diǎn)擊相機(jī)無法彈出,沒有提示獲取訪問相機(jī)的權(quán)限請求弯囊。

解決:
application引入權(quán)限即可

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

3痰哨、APP版本升級時(shí),下載新版本無法安裝匾嘱,權(quán)限問題斤斧。

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

同時(shí)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文件加密

在線打包時(shí)可以選擇js原生混合實(shí)現(xiàn)主要的js文件加密霎烙,由于官方加密算法的保密限制離線打包不在支持撬讽,目前還沒有找到合適的實(shí)現(xiàn)方案。

總結(jié)

  • 類似本地打包操作這種嚴(yán)重依賴平臺的操作要多閱讀官方文檔悬垃,但是由于版本區(qū)別游昼、文檔更新不及時(shí)錯(cuò)誤很難避免,實(shí)際遇到問題要時(shí)刻保持關(guān)注尝蠕,多方搜集烘豌。

  • 使用系統(tǒng)功能時(shí)如果不起作用,考慮是否需要申請用戶權(quán)限

  • Android Studio 打包時(shí)注意gradle版本問題看彼,由于網(wǎng)絡(luò)問題可能會出現(xiàn)編譯失敗等問題廊佩,直接下載到本地使用更加方便囚聚。

  • HB的版本和離線打包的sdk的打包盡量保持一致,如果不一致可能會出現(xiàn)莫名其妙的問題罐寨。

參考

我是Light413靡挥,一名iOS開發(fā)者,喜歡前端及后臺開發(fā)。我在簡書鸯绿,簡書就是我的陣營跋破,我喜歡在這里學(xué)習(xí),在這里分享瓶蝴。以后文章會不斷的更新毒返,介紹關(guān)于iOS開發(fā)學(xué)習(xí)總結(jié) , 介紹基于H5開發(fā)中感悟記錄總結(jié)舷手。感覺有用就點(diǎn)贊哈拧簸,喜歡就大膽的關(guān)注。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男窟,一起剝皮案震驚了整個(gè)濱河市盆赤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歉眷,老刑警劉巖牺六,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汗捡,居然都是意外死亡淑际,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門扇住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來春缕,“玉大人,你說我怎么就攤上這事艘蹋〕簦” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵女阀,是天一觀的道長咱娶。 經(jīng)常有香客問我,道長强品,這世上最難降的妖魔是什么膘侮? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮的榛,結(jié)果婚禮上琼了,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好雕薪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布昧诱。 她就那樣靜靜地躺著,像睡著了一般所袁。 火紅的嫁衣襯著肌膚如雪盏档。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天燥爷,我揣著相機(jī)與錄音蜈亩,去河邊找鬼。 笑死前翎,一個(gè)胖子當(dāng)著我的面吹牛稚配,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播港华,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼道川,長吁一口氣:“原來是場噩夢啊……” “哼大州!你這毒婦竟也來了蒙具?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤荔泳,失蹤者是張志新(化名)和其女友劉穎橙数,沒想到半個(gè)月后宦言,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡商模,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜘澜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片施流。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鄙信,靈堂內(nèi)的尸體忽然破棺而出瞪醋,到底是詐尸還是另有隱情,我是刑警寧澤装诡,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布银受,位于F島的核電站,受9級特大地震影響鸦采,放射性物質(zhì)發(fā)生泄漏宾巍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一渔伯、第九天 我趴在偏房一處隱蔽的房頂上張望顶霞。 院中可真熱鬧,春花似錦、人聲如沸选浑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽古徒。三九已至拓提,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隧膘,已是汗流浹背代态。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舀寓,地道東北人胆数。 一個(gè)月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像互墓,于是被迫代替她去往敵國和親必尼。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容