Cocos creator2.4.4 处理 16KB 问题

217 阅读4分钟

资料整理:

1:forum.cocos.org/t/topic/169… (-x版本3.7升级)

2:github.com/cocos/engin… (官方提供升级方案)

官方需要修改的内容我就不重复了,大家参照官方提供的 提交日志,下面是 android工程修改如下:

1:修改sdk版本 — 路径:/jsb-default/frameworks/runtime-src/proj.android-studio/gradle.properties

image.png

Android SDK version that will be used as the compile project

PROP_COMPILE_SDK_VERSION=36

Android SDK version that will be used as the earliest version of android this application can run on

PROP_MIN_SDK_VERSION=23

Android SDK version that will be used as the latest version of android this application has been tested on

PROP_TARGET_SDK_VERSION=36

Android Build Tools version that will be used as the compile project

PROP_BUILD_TOOLS_VERSION=36.0.0

#这里如果用了官方例子里面提供的 PROP_NDK_VERSION= 则需要手动注释掉 jsb-default/frameworks/runtime-src/proj.android-studio/local.properties  中的ndk.dir

PROP_NDK_VERSION=28.1.13356709

image.png

#删除 PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86:x86_64 中 x86 好像是后面提到的替换libuv库并不支持x86

PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86_64

image.png

2:ndk版本在:

image.png

image.png

3: classpath 'com.android.tools.build:gradle:8.10.1' 

4: distributionUrl=https://services.gradle.org/distributio…

5: 按照官方给的文档:github.com/cocos/engin… 工程里的配置相关代码,修改后我这里还需要一下代码(每个人的问题可能不一样,问下豆包)

(1)

遇到问题:/Users/linhao/Desktop/4000003/jsb-default-google/frameworks/cocos2d-x/external/sources/pvmp3dec/src/pvmp3_dct_16.cpp:176:49: error: implicit conversion from 'int' to 'float' changes value from 2147483647 to 2147483648 [-Werror,-Wimplicit-const-int-float-conversion]
176 |     tmp_o0 = fxp_mul32_Q32((vec[ 0] - vec[15]), Qfmt_31(0.50241928618816F));
|                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/linhao/Desktop/4000003/jsb-default-google/frameworks/cocos2d-x/external/sources/pvmp3dec/src/pv_mp3dec_fxd_op_c_equivalent.h:47:39: note: expanded from macro 'Qfmt_31'
47 | #define Qfmt_31(a)   (Int32)((float)a*0x7FFFFFFF)
|                                      ~^~~~~~~~~~
Ask Gemini

解决方案:

// pv_mp3dec_fxd_op_c_equivalent.h android 16kb修改

// #define Qfmt_31(a) (Int32)((float)a*0x7FFFFFFF) 修改为

#define Qfmt_31(x) ((int32)((x) * 2147483647.0))

 (2)

遇到问题:/Users/mac/Desktop/LuLinSdkForZip/1000051-az/LuLin/tw-applink-next/jsb-default/frameworks/cocos2d-x/external/sources/pvmp3dec/src/pvmp3_dct_9.cpp:140:48: error: implicit conversion from 'int' to 'float' changes value from 2147483647 to 2147483648 [-Werror,-Wimplicit-const-int-float-conversion] 140 | vec[8] = fxp_mac32_Q32(vec[8], tmp0 << 1, cos_4pi_9); | ^~~~~~~~~ /Users/mac/Desktop/LuLinSdkForZip/1000051-az/LuLin/tw-applink-next/jsb-default/frameworks/cocos2d-x/external/sources/pvmp3dec/src/pvmp3_dct_9.cpp:84:21: note: expanded from macro 'cos_4pi_9' 84 | #define cos_4pi_9 Qfmt31( 0.17364817766693f) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/mac/Desktop/LuLinSdkForZip/1000051-az/LuLin/tw-applink-next/jsb-default/frameworks/cocos2d-x/external/sources/pvmp3dec/src/pvmp3_dct_9.cpp:80:32: note: expanded from macro 'Qfmt31' 80 | #define Qfmt31(a) (int32)(a*(0x7FFFFFFF)) | ~ ^~~~~~~~~~ Ask Gemini

解决方法:

// pvmp3_dct_9.cpp android 16kb修改

// #define Qfmt31(a) (int32)(a*(0x7FFFFFFF)) 修改为

#define Qfmt31(a) (int32)(a * (float)0x7FFFFFFF)

(3)

遇到问题:C/C++: fcntl(): Bad file descriptor C/C++: /Users/mac/Desktop/LuLinSdkForZip/1000051-az/LuLin/tw-applink-next/jsb-default/frameworks/cocos2d-x/external/sources/pvmp3dec/src/pvmp3_alias_reduction.cpp:172:70: error: implicit conversion from 'int' to 'float' changes value from 2147483647 to 2147483648 [-Werror,-Wimplicit-const-int-float-conversion] C/C++: 172 | used_freq_lines = fxp_mul32_Q32( used_freq_lines << 16, (int32)(0x7FFFFFFF / (float)18 - 1.0f)) >> 15; C/C++: | ^~~~~~~~~~ ~ C/C++: 1 error generated.

 解决方法:

// pvmp3_alias_reduction.cpp android 16kb修改

// used_freq_lines = fxp_mul32_Q32( used_freq_lines << 16, (int32)(0x7FFFFFFF / (float)18 - 1.0f)) >> 15; 修改为

used_freq_lines = fxp_mul32_Q32( used_freq_lines << 16, (int32)((float)0x7FFFFFFF / 18.0f - 1.0f)) >> 15;

 (4) 

  我这使用的sdk 有删除东西需要再 jsb-default/frameworks/runtime-src/proj.android-studio/app/proguard-rules.pro  增加 (这个是我这需要增加的处理不一定大家都需要)

android 16kb修改

-dontwarn com.kanxd.emulator.jni.KxdEmulatorChecker

-dontwarn kotlinx.parcelize.Parcelize

6:好像是说之前的写法不能用了,需要把package移动个位置

 (1)修改后原始工程下中jsb-default/frameworks/runtime-src/proj.android-studio/app/AndroidManifest.xml 

image.png 标红处需要移动到:jsb-default/frameworks/runtime-src/proj.android-studio/app/build.gradle  

image.png

(2)修改 jsb-default/frameworks/cocos2d-x/cocos/platform/android/libcocos2dx/AndroidManifest.xml 

image.png

标红处移动到:jsb-default/frameworks/cocos2d-x/cocos/platform/android/libcocos2dx/build.gradle 

image.png

(3)如果遇到 jsb-default/frameworks/runtime-src/proj.android-studio/instantapp/AndroidManifest.xml  的提示,同理

7:打包后遇到 问题

 ld.lld: error: relocation R_AARCH64_PREL64 cannot be used against symbol 'OPENSSL_armcap_P'; recompile with -fPIC >>> defined in /Users/mac/Desktop/LuLinSdkForZip/1000051-az/LuLin/tw-applink-next/jsb-default/frameworks/cocos2d-x/external/android/arm64-v8a/libcrypto.a(armcap.o) >>> referenced by sha256-armv8.o:(.text+0xF48) in archive

解决方法:这里需要从 github.com/KDAB/androi…  下载 ssl_1.1的库 

image.png

然后使用库里面所带的 libcrypto.a和libssl.a

image.png

替换项目中的 jsb-default/frameworks/cocos2d-x/external/android

image.png 8: 继续打包会遇到:libuv.a 编译不过 `ld.lld: error: undefined hidden symbol: __stack_chk_fail_local

解决方法:这里需要把 直接使用cocos creator 3.8.1版本的Creator\3.8.1\resources\resources\3d\engine-native\external\android中的 libuv.a 替换咱们本地的文件既可。

9: 打包后bugly 不是支持16kb问题。

解决方案:bugly 需要更新至: implementation "com.tencent.bugly_16kb:bugly-pro:4.4.6.2

image.png 10:验证工具:LibCheckerhttps://apt.izzysoft.de/fdroid/inde…

image.png