备份HBuilderX安卓离线打包教程全一览——5+app

<原创声明>本文首发于微信公众号,具有原创标识,秉着知识共享、互帮互助的原则欢迎大家的转载,但转载须有度,还请加出处请尊重别人的劳动成果,谢谢。

HBuilderX是一款不错的前端编辑器,它为使用者提供了云打包和离线打包两种形式,但云打包有着次数限制(可付费解锁)并且服务器繁忙时需要排队等候,不利于开发者的正常调试。从另一方面来看,尽管官方对于隐私保护极为重视,但还是无法让使用者打消代码上传泄露的疑虑,所以离线打包作为第二条打包途径理当重视。

HBuilderX安卓离线打包基于自身的SDK和AndroidStudio软件,AndroidStudio对于初学者来说较难掌握,而官方文档也过于简洁,初期打包可能各种报错,我在社区里看到不少离线打包失败的网友,本着知识共享的原则将HBuilderX安卓离线打包步骤一一演示,希望能帮助到大家。

第一步,AndroidStudio环境测试

首先要下载AndroidStudio软件,下面是官方网址:

https://developer.android.google.cn/studio/index.html

我们可以看到目前最新的版本是3.63,大家根据自己的电脑配置按照要求下载安装即可,如果想了解更多而自己的英文水平不是那么的好,可以私下里使用谷歌浏览器翻译了解。

AndroidStudio下载安装完成后打开,如下图所示选中Empty Activity,点击Next创建。

编辑应用名称、包名和保存位置,包名一般为com.***.*** 样式。我们注意到下方Minimum SDK有下拉列表框选项,这里简单解释一下,这份是用来选择API的,注意到下面的蓝色标记“Your app will run on approximately 92.3% of device”了没,代表安卓用户中有92.3%的用户手机版本大于等于这个数,也就是安卓5.1及以上版本的Android手机可以正常使用这个应用,而低于此版本的即使安装安装成功也会闪退黑屏等无法打开。

这就需要你做一个权衡,怎么才能让应用覆盖更多的用户,太低不利于发展,太高用户基数少,官方文档的建议是大于等于19,我这里选的是22,大家自行斟酌。

点击Finish完成创建。

看到下图的红色箭头了没,这个是创建模拟器的选项,在最初没有模拟器时如红色下划线状态,这在官方文档里最后运行描述时一笔带过,至于我为什么详细描述,在后面我会给大家解释。

点击红色箭头选项。

点击Create Virtual Device创建虚拟设备

在Phone栏里随意选择各种配置的模拟设备,如果你的电脑配置并不是多么好,建议挑选简单的比较容易加载,在这里我挑选了一个320×480的。点击Next。

系统镜像,自己选择。点击Next。

这个默认就行,直接点击Finish。

我们可以看到虚拟设备已经创建完成,点击右上角×直接退出此界面。

顺着最左边的箭头,可以看到刚刚创建的虚拟设备标识,点击右边箭头指向的选项,运行虚拟设备(也可直接在上图中直接点击Actions栏中最左边的三角符号运行。)

等待片刻,模拟器成功打开。

此时点击红色方框中"Run app"选项。

发现刚刚创建的Empty Activity项目成功跑起,这也就证明了你的AndroidStudio已经配置好了。相对于5+APP和uni-app来说,AndroidStudio上手难,成效低,不少个人开发者转向移动APP开发时都没有接触过它,在初涉AndroidStudio时,好多人在安装配置方面往往报错,我第一次也是如此。

在写这篇教程时我是默认你SDK、API等全配置好了的,如果你在这一步报错,模拟器没能打开或者没能成功显示下图界面,就说明哪里仍存在问题,后续运行和调试自己的项目时很有可能会报错,建议大家配置完毕再往下进行。AndroidStudio的配置我就不在赘述,如果有需要后面会考虑附加一篇配置教程。

第二步,APP离线SDK下载

下载安卓离线SDK包,网址如下:

https://nativesupport.dcloud.net.cn/AppDocs/download/android

这里要吐槽的一点是需要通过百度网盘下载...

下载好后在目录

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

三个文件,复制到自定义的新文件夹方便使用

在目录

2.6.16\Android-SDK@2.6.16.80137_20200426\SDK\assets

下找到data文件夹,打开可以发现下图几个文件。

返回上一级,复制data文件夹如上操作,为了方便与三个文件放到一起。

第三步,HBuilderX生成本地打包资源

如图,在发行选项→原生APP-本地打包(L)中选择生成本地打包App资源(R)。

显示导出成功,顺着路径将自己项目id名的文件夹拷贝,放到上一步自定义的文件夹下,方便使用。这里我的项目id是H525CFE5C,就把它放到与上一步复制的文件一起。

所需资源整理完毕,我们开始进行下一步操作。

第四步,安卓离线打包环境配置

切换到AndroidStudio,如果你第一步操作像我一样只是测试用,那也可以在里面再创建一个Empty Activity项目或者No Activity,在最后我会提到No Activity,这里采用官方文档的方式创建Empty Activity即可。

我们可以看到之前默认的是“Android”展示形式,而官方文档里是Project,为了契合我们把它换成下拉列表选项中最上面Project样式。

如图。

以5+APP举例,如下图将

lib.5plus.base-release.aar

android-gif-drawable-release@1.2.17.aar

miit_mdid_1.0.10.aar

三个文件复制粘贴到libs目录下

点击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'

点击红色圈中的任一选项进行同步处理。

同步完成(这跟后面在AndroidManifest.xml中application节点添加内容相联系,如果没有添加依赖会报红)。

在原页面最上方配置app版本号。

applicationId为创建时的包名,compileSdkVersion为编译版本,minSdkVersion为兼容最小的版本号,targetSdkVersion为目标版本,有兴趣的可以百度一下三者之间的区别和联系。注意,官方文档中标注“App离线SDK minSdkVersion最低支持19,小于19在部分4.4以下机型上将无法正常使用。”

versionCode需要设定一个数值,一般为1,每次更新版本时versionCode的值都要比前一个设置的值大,否则无法正常安装,versionName一般填写主版本号次版本号和修正号,如图中的“1.0”为最初版本号,其余的可以自行查阅。

下面配置资源,你可能会奇怪我为什么跟官方文档顺序不一样,官方文档这一步是开始在strings.xml里修改应用名。因为资源导入的先后会影响使用和观感,之前在HBuilderX中生成本地打包的app资源还没引入怎么跟strings.xml里的应用名比较呢。

我们在main文件夹下创建assets文件夹。

把刚刚转移到自定义文件夹下的data文件夹拷贝到assets文件夹下。

官方文档中说dcloud1.dat、dcloud2.dat为uni-app所需资源(2.7.0之后已不在需要,升级时需要删除,可以减少apk大小),我演示的是5+App,所以不需要这两个文件。

继续在刚刚创建的assets文件夹下创建apps文件夹,把第三步中的文件(我的是H525CFE5C)拷贝到apps文件夹下。

自此资源引入完成,进行下一步strings.xml操作。

在app→src→main→res→ values配置strings.xml文件,修改应用名称,与

刚刚引入本地打包资源的里的manifest.json文件(assets>apps>“应用id名文件夹”>www下)比较,

发现不一致,遂将string.xml里的“Test2020”改为Mood。

在app→src→main下配置AndroidManifest.xml文件,

在将内容添加到application节点之前,不知道大家发现没,Application标签下红色圈中内部也有activity,它和即将添加的activity之间会不会有冲突呢。

实际上使用AndroidStudio开发软件时,一个activity的使用要在AndroidManifest.xml中声明,我们在第一步末尾运行时发现最后输出了"Hello World!"字样的界面。

仔细观察图中圈出的activity,作为"Run App"跑出来的页面,它在AndroidManifest.xml文件中<intent-filter />标签内做出了主页声明,如果你不考虑这点直接忽略它的话,在模拟器上跑时也许会生成两个相同图标的app,分别打开后一个是“Hello World!”界面,一个是你项目自定义的首页如index.html,也有一定可能无法正常运行,所以最好的办法是直接注释掉。

然后继续下一步,添加内容到application节点(建议复制官方文档里的,下面的复制粘贴后排版会比较乱)。

代码

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

如下图。

下面是应用图标和启动页面的配置

官方文档

icon.png为应用的图标,push.png为推送消息的图标,splash.png为应用启动页的图标,只要将icon.png、push.png、splash.png放置到drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi文件夹下,就会自动引用,不同文件夹下对应不同图片尺寸,可参考

https://blog.csdn.net/xuaho0907/article/details/72848520

里面说的比较清楚,我就不多此一举了,我举另外的例子,通过AndroidStudio软件修改应用图标。

在应用目录内部右键调出菜单(New→Image Asset),点击。

出来应用图标设置界面。

修改背景为红色。

修改前景为文字M。

点击Finish。

这样一个简单的应用图标就完成啦,有需求的可以网上详细了解哦。

下面配置资源环境。

将assets下apps文件夹中的manifest.json文件和data文件夹中的dcloud_control.xml文件打开,确保manifest.json中的id和dcloud_control.xml中的appid一致。

自定义基座暂不考虑。

然后就可以愉快地调试程序啦,

Run~

图标

打开。

效果。

最后一步,离线打包

在菜单栏中选择Build,点击Generate Signed Bundle /APK...项,进入打包页面。

选中APK,点击Next。

打包需要签名认证,点击Create new...创建。

如图,第一行创建自定义jks文件,并确定路径,我把它设置为Mood(这种其实是不符合jks格式的,最后生成时可能会有警告,点击OK即可,一般为*-*-*jks,平时还是要多注意规范)。

填写密钥库密码和确定密钥库密码,因为是演示,我把密码设置为123456。

Alias为密钥名称,在这里把它设置mood,Password为密钥密码,仍设置为123456,Validity(years)为密钥有效时间,按年算起,直接默认。

下面First and Last Name为名字和姓氏 ,Organizational Unit为组织单位 ,Organization为组织,City or Locality为城市或地区,State or Province为州或者省份,Country Code(XX)为国家 ,至少选填一种,这里我们直接填上国家China。

点击OK。

跳转到签名界面,因为都帮我们填好了,所以点击Next即可。

这里要说一下V1和V2的选择问题,V1属于旧的验证方式,V2是在安卓版本7.0之后新的验证方式,只勾选V1在Android7.0以上不会使用更安全的验证方式,如果只勾选V2那么安卓版本7.0以下的手机将无法正常安装,所以建议V1和V2同时勾选。

debug和release不用多说,一个是测试版一个是正式版,这里我直接选择release,点击Finish,等待打包完成。

完成打包,点击locate或者直接进入到AndroidStudio项目文件夹app>release下,

找到app-release.apk包,安装。

打开。

教程结束。

总结

不知道大家发现没有,上面都是在创建Empty Activity的基础上进行打包配置的,Empty Activity在app>src>main>java>自定义包名a.b.c的目录下默认生成MainActivity文件,这个文件又绑定了一个layout文件,默认是在app>src>main>res>layout目录下的activity_main.xml文件,在AndroidManifest.xml文件中做出activity声明,最后我们还要把这个activity注释或者删除掉,这也就代表MainActivity文件和activity_main.xml文件没有效用了,蚊子再小也是肉,删掉还可以缩小点app体积。

其实没必要后期删除那么麻烦,大家只需在第一步创建Empty Activity项目用来测试AndroidStudio开发环境即可,在第四步开始时,New>New Project创建No Activity用来打包自己的项目,点击Next,下一页同第一步一样自定义,然后点击Finish,这样一个NoActivity项目就创建完毕啦。

在AndroidManifest.xml页我们可以看到如下页面:

只需把它修改为这样。

再添加内容。

后续步骤都是一样的,这样可以避免在AndroidManifest.xml中注释或删除默认activity,也省去了删除默认文件的麻烦。

官方文档中附加的内容

基座配置文档:

https://ask.dcloud.net.cn/article/35482

安卓模块及第三方SDK配置:

https://nativesupport.dcloud.net.cn/AppDocs/usemodule/android

Android注意事项:

https://nativesupport.dcloud.net.cn/AppDocs/FAQ/android

最后

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