cocoscreator + AndroidStudio笔记

时间:2024-05-20 12:27:11

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目录的。它是这样的

cocoscreator + AndroidStudio笔记

assets的正确目录,应该在src下新建文件夹main,将assets放进去就可以了。目录就会变成这样:

cocoscreator + AndroidStudio笔记

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打包的程序,后台挂起一个,再去打开另外一个,就会报错。但是只自己打开,又不会报错。报错信息:

cocoscreator + AndroidStudio笔记

解决办法是修改AppDelegate.cpp下的端口号为不一样的,默认统一为6086。

AppDelegate.cpp在jsb-link\frameworks\runtime-src\Classes目录下,将端口号改一个你喜欢的数字,就可以了。

cocoscreator + AndroidStudio笔记

 

4,AndroidStudio报错Error: Program type already present: okio.AsyncTimeout$Watchdog

  1. 手动删除libs下依赖的okio.jar包。
  2. 在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快速导入。