因为项目二期需求的增加,一期采用vue开发,并通过HBuilder云打包的生成apk的方式已经不能满足我的需求了。因为我需要集成原生第三方的SDK。鉴于个人更熟悉原生端的写法,所以采用了Hbuilder本地打包,再集成到原生工程的方式。
因为网上资料的缺乏,其中各种艰辛就不说了。程序正常运转以后,却发现通过HBuilder的“启动图片(splash)配置”选项配置的启动页图片并不生效。
表现形式为先显示一张系统默认图片,就是项目名称+一个转圈的进度条,然后进入我的index.html文件。显然这并没达到我的预期效果,我设置的图片并没显示出来。
方案1:
排查问题第一步,去网上搜了搜,检查打包生成的资源文件下面manifest.json的配置
"splashscreen": {
"autoclose": true,/*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/
"waiting": true
},
官方文档的解释,autoclose设置为true表示应用程序渲染完毕以后,会自动关闭启动页,否则需要我们手动调用plus.navigator.closeSplashscreen()关闭启动页。
但我个人测试中,发现并非如此,不管我设置为true或false,在启动几秒钟以后,都会进入首页。
Waiting表示是否加载进度条,值为true时,可以显示一个转圈的进度条。
总之,这两个参数的设置,并不能解决我的问题,我的自定义启动页并没有成功展示。
方案2:
public class MyApplication extends DCloudApplication {
......
}
因为我自定义了一个MyApplication继承了DCloudApplication,怀疑是不是因为我自己的原因,导致启动设置不生效,于是我尝试在AndroidManifest.xml中仍然使用DCloudApplication,但启动页仍然不生效。
方案3:
按照我平时设置启动页面的方案,自定义一个主题,设置它的android:windowBackground属性。
<style name="AppTheme" parent="DCloudTheme">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@drawable/splash</item>
</style>
结果,程序的启动过程的展示直接分为两个阶段,先展示我通过android:windowBackground设置的图片,大约2秒以后,显示Hbuilder的默认启动页,最后才进入index.html页面。
方案3失败。
最终方案4
面对接二连三的打击,我已经黔驴技穷,一个几百万用户的框架,官方文档在处理一些关键细节的时候,几乎派不上什么用处。百度出来的答案也不能解决我这个问题的。最后,我又仔细观察了官方提供的demo, HBuilder-Integrate-AS,人家都是好好的,启动页显示的也是自己设置的图片。于是我去找这张图片,终于,找到了。。
官方Demo在资源文件drawable-xxhdpi目录下放了一张名为splash.png的图片,点击这张图片,显示的正是程序运行起来,启动页展示的图片。于是我尝试也在自己的工程中建了一个drawable-xxhdpi目录,并在下面放了一张名为splash.png的图片,点击运行。完美展示,终于解决了。
总结:处理方式是简单的,解决过程是曲折的,还好解决了~~