1,适配挖孔屏。
挖孔屏这种设备,用cocoscreator获取到的visibleSize不是铺满了整个屏幕,会在孔的下方一条直线,导致了背景图不能铺满整个屏幕,也就是顶部会有黑边。
适配方法:将一下代码拷贝到AppActivity下的onCreate中,注意不能够加延时处理。
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; }
由于以上的api是android9.0的api,所以项目的编译sdk需要大于等于28,也就是build.grade下的CompileSdkVersion值要大于28,否则不能通过编译。
android { compileSdkVersion 28 ......... }
2,assets目录
在接入某些平台的sdk时,有可能会需要导入资源到assets目录下,但是用creator构建的as工程,是没有assets目录的。它是这样的
assets的正确目录,应该在src下新建文件夹main,将assets放进去就可以了。目录就会变成这样:
3,两个闪退问题。
打包之后运行报错,报错信息缺少 .so文件,部分机型上会闪退,也有正常的。
默认情况下,打包后会自动生成armeabi 到 x86的所有文件夹。这就有可能导致一些x86的设备因为在x86文件夹下找不到so文件而崩溃。
Android 设备的CPU类型(通常称为”ABIs”)
armeabi-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
x86: 平板、模拟器用得比较多。
x86_64: 64位的平板。
1.armeabi:默认选项,将创建以基于
ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI (二进制接口)
创建的二进制代码将可以在所有 ARM*
设备上运行。所以armeabi通用性很强。但是速度慢
2.armeabi-v7a:创建支持基于
ARM* v7 的设备的库,并将使用硬件 FPU 指令。armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。
3.x86:支持基于硬件的浮点运算的
IA-32 指令集。x86是可以兼容armeabi平台运行的,无论是armeabi-v7a还是armeabi,同时带来的也是性能上的损耗,
另外需要指出的是,打包出的x86的so,总会比armeabi平台的体积更小。
总结
如果项目只包含了 armeabi,那么在所有Android设备都可以运行;
如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行;
如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。
所以只要改为只支持armeabi-v7a,就不会报错了。在build.grade的defaultConfig下添加:
defaultConfig {
ndk {
abiFilters "armeabi-v7a"
}
}
还有一个莫名其妙闪退的,报错信息adress already inuse。导致这个报错的原因是,如果一个手机上装了两个creator打包的程序,后台挂起一个,再去打开另外一个,就会报错。但是只自己打开,又不会报错。报错信息:
解决办法是修改AppDelegate.cpp下的端口号为不一样的,默认统一为6086。
AppDelegate.cpp在jsb-link\frameworks\runtime-src\Classes目录下,将端口号改一个你喜欢的数字,就可以了。
4,AndroidStudio报错Error: Program type already present: okio.AsyncTimeout$Watchdog
- 手动删除libs下依赖的okio.jar包。
- 在build.grade的defaultConfig加上
configurations {
all*.exclude group: 'com.google.code.gson'
all*.exclude group: 'com.squareup.okio'
}
原因:1、通过在AS双击shift键盘,然后在输入框里面输入AsyncTimeout,发现是因为有两个okio.jar包
2、可以现在project删除bmob的okio
3、要想彻底解决,(在app下的build文件下的android里面添加如下语句)
configurations {
all*.exclude group: 'com.google.code.gson'
all*.exclude group: 'com.squareup.okio'
}
5,androidStudio报错:
Android resource linking failed
Output: error: resource style/Theme.AppCompat.Light.NoActionBar
build.grade添加依赖,
implementation 'com.android.support:appcompat-v7:26.0.0-alpha1'
重新编译就行了。
6,一点小问题
在vivo的广告sdk,targetSdkVersion设置为28拉取不到广告,百分百广告拉取失败,但是设置为26就正常了。奇怪。
在oppo的广告sdk中,demo里开屏页动态申请权限,拷贝过来后,第一次安装游戏进入游戏,动态申请权限后,sdk百分百初始化失败,第二次以后就正常了。后来将动态申请权限提前一个activity,申请完权限再进入闪屏,请求初始化广告sdk,第一次就拉取正常了。注意就好。
权限,代码示例什么的还是要参考demo的,因为文档里有可能是错的。
implements要继承所有的方法,不然会报错。可以用alt+enter快速导入。