<原創(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)試玖瘸。從另一方面來(lái)看秸讹,盡管官方對(duì)于隱私保護(hù)極為重視,但還是無(wú)法讓使用者打消代碼上傳泄露的疑慮雅倒,所以離線打包作為第二條打包途徑理當(dāng)重視璃诀。
HBuilderX安卓離線打包基于自身的SDK和AndroidStudio軟件,AndroidStudio對(duì)于初學(xué)者來(lái)說(shuō)較難掌握蔑匣,而官方文檔也過(guò)于簡(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)單解釋一下萨西,這份是用來(lái)選擇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ì)閃退黑屏等無(wú)法打開。
這就需要你做一個(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í)一筆帶過(guò),至于我為什么詳細(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來(lái)說(shuō),AndroidStudio上手難窍帝,成效低,不少個(gè)人開發(fā)者轉(zhuǎn)向移動(dòng)APP開發(fā)時(shí)都沒有接觸過(guò)它诽偷,在初涉AndroidStudio時(shí)坤学,好多人在安裝配置方面往往報(bào)錯(cuò),我第一次也是如此报慕。
在寫這篇教程時(shí)我是默認(rèn)你SDK深浮、API等全配置好了的,如果你在這一步報(bào)錯(cuò)眠冈,模擬器沒能打開或者沒能成功顯示下圖界面飞苇,就說(shuō)明哪里仍存在問(wèn)題,后續(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)是需要通過(guò)百度網(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,下滑到底部資源引用頁(yè)面
如下圖添加引用資源,
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)紅)趴拧。
在原頁(yè)面最上方配置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ī)型上將無(wú)法正常使用挂谍。”
versionCode需要設(shè)定一個(gè)數(shù)值瞎饲,一般為1口叙,每次更新版本時(shí)versionCode的值都要比前一個(gè)設(shè)置的值大,否則無(wú)法正常安裝嗅战,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文件夾下鲁冯。
官方文檔中說(shuō)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"跑出來(lái)的頁(yè)面,它在AndroidManifest.xml文件中<intent-filter />標(biāo)簽內(nèi)做出了主頁(yè)聲明仇轻,如果你不考慮這點(diǎn)直接忽略它的話京痢,在模擬器上跑時(shí)也許會(huì)生成兩個(gè)相同圖標(biāo)的app,分別打開后一個(gè)是“Hello World!”界面篷店,一個(gè)是你項(xiàng)目自定義的首頁(yè)如index.html祭椰,也有一定可能無(wú)法正常運(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)頁(yè)面的配置
官方文檔
icon.png為應(yīng)用的圖標(biāo)你踩,push.png為推送消息的圖標(biāo),splash.png為應(yīng)用啟動(dòng)頁(yè)的圖標(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
里面說(shuō)的比較清楚,我就不多此一舉了穗慕,我舉另外的例子饿敲,通過(guò)AndroidStudio軟件修改應(yīng)用圖標(biāo)。
在應(yīng)用目錄內(nèi)部右鍵調(diào)出菜單(New→Image Asset)逛绵,點(diǎn)擊怀各。
出來(lái)應(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)入打包頁(yè)面。
選中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ī)范)。
填寫密鑰庫(kù)密碼和確定密鑰庫(kù)密碼韭畸,因?yàn)槭茄菔居钪牵野衙艽a設(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即可因谎。
這里要說(shuō)一下V1和V2的選擇問(wèn)題,V1屬于舊的驗(yàn)證方式颜懊,V2是在安卓版本7.0之后新的驗(yàn)證方式财岔,只勾選V1在Android7.0以上不會(huì)使用更安全的驗(yàn)證方式风皿,如果只勾選V2那么安卓版本7.0以下的手機(jī)將無(wú)法正常安裝,所以建議V1和V2同時(shí)勾選匠璧。
debug和release不用多說(shuō)桐款,一個(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)目用來(lái)測(cè)試AndroidStudio開發(fā)環(huán)境即可,在第四步開始時(shí)放棒,New>New Project創(chuàng)建No Activity用來(lái)打包自己的項(xiàng)目姻报,點(diǎn)擊Next,下一頁(yè)同第一步一樣自定義间螟,然后點(diǎn)擊Finish吴旋,這樣一個(gè)NoActivity項(xiàng)目就創(chuàng)建完畢啦。
在AndroidManifest.xml頁(yè)我們可以看到如下頁(yè)面:
只需把它修改為這樣厢破。
再添加內(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
最后