<原創(chuàng)聲明>本文首發(fā)于微信公眾號(hào),具有原創(chuàng)標(biāo)識(shí),秉著知識(shí)共享、互幫互助的原則歡迎大家的轉(zhuǎn)載,但轉(zhuǎn)載須有度,還請(qǐng)加出處,請(qǐng)尊重別人的勞動(dòng)成果,謝謝。
HBuilderX是一款不錯(cuò)的前端編輯器,它為使用者提供了云打包和離線打包兩種形式,但云打包有著次數(shù)限制(可付費(fèi)解鎖)并且服務(wù)器繁忙時(shí)需要排隊(duì)等候,不利于開發(fā)者的正常調(diào)試。從另一方面來看,盡管官方對(duì)于隱私保護(hù)極為重視,但還是無法讓使用者打消代碼上傳泄露的疑慮,所以離線打包作為第二條打包途徑理當(dāng)重視。
HBuilderX安卓離線打包基于自身的SDK和AndroidStudio軟件,AndroidStudio對(duì)于初學(xué)者來說較難掌握,而官方文檔也過于簡(jiǎn)潔,初期打包可能各種報(bào)錯(cuò),我在社區(qū)里看到不少離線打包失敗的網(wǎng)友,本著知識(shí)共享的原則將HBuilderX安卓離線打包步驟一一演示,希望能幫助到大家。
第一步,AndroidStudio環(huán)境測(cè)試
首先要下載AndroidStudio軟件,下面是官方網(wǎng)址:
https://developer.android.google.cn/studio/index.html
我們可以看到目前最新的版本是3.63,大家根據(jù)自己的電腦配置按照要求下載安裝即可,如果想了解更多而自己的英文水平不是那么的好,可以私下里使用谷歌瀏覽器翻譯了解。
AndroidStudio下載安裝完成后打開,如下圖所示選中Empty Activity,點(diǎn)擊Next創(chuàng)建。
編輯應(yīng)用名稱、包名和保存位置,包名一般為com.***.*** 樣式。我們注意到下方Minimum SDK有下拉列表框選項(xiàng),這里簡(jiǎn)單解釋一下,這份是用來選擇API的,注意到下面的藍(lán)色標(biāo)記“Your app will run on approximately 92.3% of device”了沒,代表安卓用戶中有92.3%的用戶手機(jī)版本大于等于這個(gè)數(shù),也就是安卓5.1及以上版本的Android手機(jī)可以正常使用這個(gè)應(yīng)用,而低于此版本的即使安裝安裝成功也會(huì)閃退黑屏等無法打開。
這就需要你做一個(gè)權(quán)衡,怎么才能讓應(yīng)用覆蓋更多的用戶,太低不利于發(fā)展,太高用戶基數(shù)少,官方文檔的建議是大于等于19,我這里選的是22,大家自行斟酌。
點(diǎn)擊Finish完成創(chuàng)建。
看到下圖的紅色箭頭了沒,這個(gè)是創(chuàng)建模擬器的選項(xiàng),在最初沒有模擬器時(shí)如紅色下劃線狀態(tài),這在官方文檔里最后運(yùn)行描述時(shí)一筆帶過,至于我為什么詳細(xì)描述,在后面我會(huì)給大家解釋。
點(diǎn)擊紅色箭頭選項(xiàng)。
點(diǎn)擊Create Virtual Device創(chuàng)建虛擬設(shè)備
在Phone欄里隨意選擇各種配置的模擬設(shè)備,如果你的電腦配置并不是多么好,建議挑選簡(jiǎn)單的比較容易加載,在這里我挑選了一個(gè)320×480的。點(diǎn)擊Next。
系統(tǒng)鏡像,自己選擇。點(diǎn)擊Next。
這個(gè)默認(rèn)就行,直接點(diǎn)擊Finish。
我們可以看到虛擬設(shè)備已經(jīng)創(chuàng)建完成,點(diǎn)擊右上角×直接退出此界面。
順著最左邊的箭頭,可以看到剛剛創(chuàng)建的虛擬設(shè)備標(biāo)識(shí),點(diǎn)擊右邊箭頭指向的選項(xiàng),運(yùn)行虛擬設(shè)備(也可直接在上圖中直接點(diǎn)擊Actions欄中最左邊的三角符號(hào)運(yùn)行。)
等待片刻,模擬器成功打開。
此時(shí)點(diǎn)擊紅色方框中"Run app"選項(xiàng)。
發(fā)現(xiàn)剛剛創(chuàng)建的Empty Activity項(xiàng)目成功跑起,這也就證明了你的AndroidStudio已經(jīng)配置好了。相對(duì)于5+APP和uni-app來說,AndroidStudio上手難,成效低,不少個(gè)人開發(fā)者轉(zhuǎn)向移動(dòng)APP開發(fā)時(shí)都沒有接觸過它,在初涉AndroidStudio時(shí),好多人在安裝配置方面往往報(bào)錯(cuò),我第一次也是如此。
在寫這篇教程時(shí)我是默認(rèn)你SDK、API等全配置好了的,如果你在這一步報(bào)錯(cuò),模擬器沒能打開或者沒能成功顯示下圖界面,就說明哪里仍存在問題,后續(xù)運(yùn)行和調(diào)試自己的項(xiàng)目時(shí)很有可能會(huì)報(bào)錯(cuò),建議大家配置完畢再往下進(jìn)行。AndroidStudio的配置我就不在贅述,如果有需要后面會(huì)考慮附加一篇配置教程。
第二步,APP離線SDK下載
下載安卓離線SDK包,網(wǎng)址如下:
https://nativesupport.dcloud.net.cn/AppDocs/download/android
這里要吐槽的一點(diǎn)是需要通過百度網(wǎng)盤下載...
下載好后在目錄
2.6.16\Android-SDK@2.6.16.80137_20200426\SDK\libs
下找到
lib.5plus.base-release.aar
android-gif-drawable-release@1.2.17.aar
miit_mdid_1.0.10.aar
三個(gè)文件,復(fù)制到自定義的新文件夾方便使用
在目錄
2.6.16\Android-SDK@2.6.16.80137_20200426\SDK\assets
下找到data文件夾,打開可以發(fā)現(xiàn)下圖幾個(gè)文件。
返回上一級(jí),復(fù)制data文件夾如上操作,為了方便與三個(gè)文件放到一起。
第三步,HBuilderX生成本地打包資源
如圖,在發(fā)行選項(xiàng)→原生APP-本地打包(L)中選擇生成本地打包App資源(R)。
顯示導(dǎo)出成功,順著路徑將自己項(xiàng)目id名的文件夾拷貝,放到上一步自定義的文件夾下,方便使用。這里我的項(xiàng)目id是H525CFE5C,就把它放到與上一步復(fù)制的文件一起。
所需資源整理完畢,我們開始進(jìn)行下一步操作。
第四步,安卓離線打包環(huán)境配置
切換到AndroidStudio,如果你第一步操作像我一樣只是測(cè)試用,那也可以在里面再創(chuàng)建一個(gè)Empty Activity項(xiàng)目或者No Activity,在最后我會(huì)提到No Activity,這里采用官方文檔的方式創(chuàng)建Empty Activity即可。
我們可以看到之前默認(rèn)的是“Android”展示形式,而官方文檔里是Project,為了契合我們把它換成下拉列表選項(xiàng)中最上面Project樣式。
如圖。
以5+APP舉例,如下圖將
lib.5plus.base-release.aar
android-gif-drawable-release@1.2.17.aar
miit_mdid_1.0.10.aar
三個(gè)文件復(fù)制粘貼到libs目錄下
點(diǎn)擊build.grade,下滑到底部資源引用頁面
如下圖添加引用資源,
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation 'com.github.bumptech.glide:glide:4.9.0' // 基座依賴
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
點(diǎn)擊紅色圈中的任一選項(xiàng)進(jìn)行同步處理。
同步完成(這跟后面在AndroidManifest.xml中application節(jié)點(diǎn)添加內(nèi)容相聯(lián)系,如果沒有添加依賴會(huì)報(bào)紅)。
在原頁面最上方配置app版本號(hào)。
applicationId為創(chuàng)建時(shí)的包名,compileSdkVersion為編譯版本,minSdkVersion為兼容最小的版本號(hào),targetSdkVersion為目標(biāo)版本,有興趣的可以百度一下三者之間的區(qū)別和聯(lián)系。注意,官方文檔中標(biāo)注“App離線SDK minSdkVersion最低支持19,小于19在部分4.4以下機(jī)型上將無法正常使用?!?/i>
versionCode需要設(shè)定一個(gè)數(shù)值,一般為1,每次更新版本時(shí)versionCode的值都要比前一個(gè)設(shè)置的值大,否則無法正常安裝,versionName一般填寫主版本號(hào)次版本號(hào)和修正號(hào),如圖中的“1.0”為最初版本號(hào),其余的可以自行查閱。
下面配置資源,你可能會(huì)奇怪我為什么跟官方文檔順序不一樣,官方文檔這一步是開始在strings.xml里修改應(yīng)用名。因?yàn)橘Y源導(dǎo)入的先后會(huì)影響使用和觀感,之前在HBuilderX中生成本地打包的app資源還沒引入怎么跟strings.xml里的應(yīng)用名比較呢。
我們?cè)趍ain文件夾下創(chuàng)建assets文件夾。
把剛剛轉(zhuǎn)移到自定義文件夾下的data文件夾拷貝到assets文件夾下。
官方文檔中說dcloud1.dat、dcloud2.dat為uni-app所需資源(2.7.0之后已不在需要,升級(jí)時(shí)需要?jiǎng)h除,可以減少apk大?。?,我演示的是5+App,所以不需要這兩個(gè)文件。
繼續(xù)在剛剛創(chuàng)建的assets文件夾下創(chuàng)建apps文件夾,把第三步中的文件(我的是H525CFE5C)拷貝到apps文件夾下。
自此資源引入完成,進(jìn)行下一步strings.xml操作。
在app→src→main→res→ values配置strings.xml文件,修改應(yīng)用名稱,與
剛剛引入本地打包資源的里的manifest.json文件(assets>apps>“應(yīng)用id名文件夾”>www下)比較,
發(fā)現(xiàn)不一致,遂將string.xml里的“Test2020”改為Mood。
在app→src→main下配置AndroidManifest.xml文件,
在將內(nèi)容添加到application節(jié)點(diǎn)之前,不知道大家發(fā)現(xiàn)沒,Application標(biāo)簽下紅色圈中內(nèi)部也有activity,它和即將添加的activity之間會(huì)不會(huì)有沖突呢。
實(shí)際上使用AndroidStudio開發(fā)軟件時(shí),一個(gè)activity的使用要在AndroidManifest.xml中聲明,我們?cè)诘谝徊侥┪策\(yùn)行時(shí)發(fā)現(xiàn)最后輸出了"Hello World!"字樣的界面。
仔細(xì)觀察圖中圈出的activity,作為"Run App"跑出來的頁面,它在AndroidManifest.xml文件中<intent-filter />標(biāo)簽內(nèi)做出了主頁聲明,如果你不考慮這點(diǎn)直接忽略它的話,在模擬器上跑時(shí)也許會(huì)生成兩個(gè)相同圖標(biāo)的app,分別打開后一個(gè)是“Hello World!”界面,一個(gè)是你項(xiàng)目自定義的首頁如index.html,也有一定可能無法正常運(yùn)行,所以最好的辦法是直接注釋掉。
然后繼續(xù)下一步,添加內(nèi)容到application節(jié)點(diǎn)(建議復(fù)制官方文檔里的,下面的復(fù)制粘貼后排版會(huì)比較亂)。
代碼
<activity? ? ?
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:name="io.dcloud.PandoraEntryActivity"
android:launchMode="singleTask"? ? ? android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"? ? ? 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>
如下圖。
下面是應(yīng)用圖標(biāo)和啟動(dòng)頁面的配置
官方文檔
icon.png為應(yīng)用的圖標(biāo),push.png為推送消息的圖標(biāo),splash.png為應(yīng)用啟動(dòng)頁的圖標(biāo),只要將icon.png、push.png、splash.png放置到drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi文件夾下,就會(huì)自動(dòng)引用,不同文件夾下對(duì)應(yīng)不同圖片尺寸,可參考
https://blog.csdn.net/xuaho0907/article/details/72848520
里面說的比較清楚,我就不多此一舉了,我舉另外的例子,通過AndroidStudio軟件修改應(yīng)用圖標(biāo)。
在應(yīng)用目錄內(nèi)部右鍵調(diào)出菜單(New→Image Asset),點(diǎn)擊。
出來應(yīng)用圖標(biāo)設(shè)置界面。
修改背景為紅色。
修改前景為文字M。
點(diǎn)擊Finish。
這樣一個(gè)簡(jiǎn)單的應(yīng)用圖標(biāo)就完成啦,有需求的可以網(wǎng)上詳細(xì)了解哦。
下面配置資源環(huán)境。
將assets下apps文件夾中的manifest.json文件和data文件夾中的dcloud_control.xml文件打開,確保manifest.json中的id和dcloud_control.xml中的appid一致。
自定義基座暫不考慮。
然后就可以愉快地調(diào)試程序啦,
Run~
圖標(biāo)
打開。
效果。
最后一步,離線打包
在菜單欄中選擇Build,點(diǎn)擊Generate Signed Bundle /APK...項(xiàng),進(jìn)入打包頁面。
選中APK,點(diǎn)擊Next。
打包需要簽名認(rèn)證,點(diǎn)擊Create new...創(chuàng)建。
如圖,第一行創(chuàng)建自定義jks文件,并確定路徑,我把它設(shè)置為Mood(這種其實(shí)是不符合jks格式的,最后生成時(shí)可能會(huì)有警告,點(diǎn)擊OK即可,一般為*-*-*jks,平時(shí)還是要多注意規(guī)范)。
填寫密鑰庫密碼和確定密鑰庫密碼,因?yàn)槭茄菔?,我把密碼設(shè)置為123456。
Alias為密鑰名稱,在這里把它設(shè)置mood,Password為密鑰密碼,仍設(shè)置為123456,Validity(years)為密鑰有效時(shí)間,按年算起,直接默認(rèn)。
下面First and Last Name為名字和姓氏 ,Organizational Unit為組織單位 ,Organization為組織,City or Locality為城市或地區(qū),State or Province為州或者省份,Country Code(XX)為國(guó)家 ,至少選填一種,這里我們直接填上國(guó)家China。
點(diǎn)擊OK。
跳轉(zhuǎn)到簽名界面,因?yàn)槎紟臀覀兲詈昧耍渣c(diǎn)擊Next即可。
這里要說一下V1和V2的選擇問題,V1屬于舊的驗(yàn)證方式,V2是在安卓版本7.0之后新的驗(yàn)證方式,只勾選V1在Android7.0以上不會(huì)使用更安全的驗(yàn)證方式,如果只勾選V2那么安卓版本7.0以下的手機(jī)將無法正常安裝,所以建議V1和V2同時(shí)勾選。
debug和release不用多說,一個(gè)是測(cè)試版一個(gè)是正式版,這里我直接選擇release,點(diǎn)擊Finish,等待打包完成。
完成打包,點(diǎn)擊locate或者直接進(jìn)入到AndroidStudio項(xiàng)目文件夾app>release下,
找到app-release.apk包,安裝。
打開。
教程結(jié)束。
總結(jié)
不知道大家發(fā)現(xiàn)沒有,上面都是在創(chuàng)建Empty Activity的基礎(chǔ)上進(jìn)行打包配置的,Empty Activity在app>src>main>java>自定義包名a.b.c的目錄下默認(rèn)生成MainActivity文件,這個(gè)文件又綁定了一個(gè)layout文件,默認(rèn)是在app>src>main>res>layout目錄下的activity_main.xml文件,在AndroidManifest.xml文件中做出activity聲明,最后我們還要把這個(gè)activity注釋或者刪除掉,這也就代表MainActivity文件和activity_main.xml文件沒有效用了,蚊子再小也是肉,刪掉還可以縮小點(diǎn)app體積。
其實(shí)沒必要后期刪除那么麻煩,大家只需在第一步創(chuàng)建Empty Activity項(xiàng)目用來測(cè)試AndroidStudio開發(fā)環(huán)境即可,在第四步開始時(shí),New>New Project創(chuàng)建No Activity用來打包自己的項(xiàng)目,點(diǎn)擊Next,下一頁同第一步一樣自定義,然后點(diǎn)擊Finish,這樣一個(gè)NoActivity項(xiàng)目就創(chuàng)建完畢啦。
在AndroidManifest.xml頁我們可以看到如下頁面:
只需把它修改為這樣。
再添加內(nèi)容。
后續(xù)步驟都是一樣的,這樣可以避免在AndroidManifest.xml中注釋或刪除默認(rèn)activity,也省去了刪除默認(rèn)文件的麻煩。
官方文檔中附加的內(nèi)容:
基座配置文檔:
https://ask.dcloud.net.cn/article/35482
安卓模塊及第三方SDK配置:
https://nativesupport.dcloud.net.cn/AppDocs/usemodule/android
Android注意事項(xiàng):
https://nativesupport.dcloud.net.cn/AppDocs/FAQ/android
最后