cocos creator全面屏无黑边处理方案 + 腾讯游戏多媒体引擎SDK接入

核心就是将targetSdkVersion升级到28 能让画布扩展到刘海那一块

cocoscreator处理:

因为cocoscreator新版本的安卓包targetSdkVersion和compileSdkVersion >= 28
所以就很舒服了


//在manifest添加。可以填充底部黑边
<meta-data android:name = "android.max_aspect"
    android:value="2.2" />

//屏幕适配核心 在AppActivity的onCreate添加  让画布扩充到刘海部分
if (Build.VERSION.SDK_INT >= 28) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    getWindow().setAttributes(lp);
}

到此cocoscreator的全部处理好了



cocos2d-x处理:

因为cocos2d-x太老了所以targetSdkVersion和compileSdkVersion 导致跟不上 但是还是有办法解决的
下面我会列出我在2d-x中碰到的所有问题和解决方案包括有些升级导致的安卓问题 我也全部踩了 大家出了啥问题就对着看 因该能很快的解决问题

/在manifest添加屏幕比例。可以填充底部黑边
<meta-data android:name="android.max_aspect"
    android:value="2.2" />

//在项目级的build.gradle中添加。因为提高API等级会导致找不到http的库
useLibrary 'org.apache.http.legacy'

//在项目级的build.gradle中添加。因为提高API等级会导致在编译中找不到junit
compile 'junit:junit:4.12'

//在manifest添加 是为了在兼容9.0以上的手机的http协议 如果不加编译报错
<uses-library
    android:name="org.apache.http.legacy"
    android:required="false"/>

//屏幕适配核心 在AppActivity的OnCreat添加  并且加上SDK版本判断  如果不加会导致低等级的手机无法打开App
if (Build.VERSION.SDK_INT >= 28) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    getWindow().setAttributes(lp);
}

// 修改AppActivity 中的Cocos2dxGLSurfaceView onCreateView()函数 因为安卓高版本获取设备ID的方式不一样。如果不改 必定报错
String deviceId ;
//android.telephony.TelephonyManager
TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT <= 23) {
    deviceId = mTelephony.getDeviceId();
} else {
    //android.provider.Settings;
    deviceId = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);
} https://www.cnblogs.com/lenkevin/p/7640691.html
可参考此链接的解决方法


此时 安卓9.0会因为http请求不安全 导致所有的http协议请求失败 所以 请参考
https://www.jianshu.com/p/518669631e01
此链接的解决方法

动态获取安卓9.0以上的权限。   如果不获取 可能会出问题。 获取方式参考 https://www.jb51.net/article/134767.htm
同时在项目级的build.gradle中添加
compile 'com.android.support:support-v4:26.0.0-alpha1'
compile 'com.android.support:appcompat-v7:26+' 如果通过继承AppActivity的方式无法实现  可以直接写在AppActivity里面

如果需要打包 则可以升级到4.4 
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

在后期遇到一个虚拟按键的屏蔽需求。在onCreate中加入
hideBottomUI(getWindow().getDecorView());
getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int arg0) {
        // TODO Auto-generated method stub
        hideBottomUI(getWindow().getDecorView());
    }
});


并且添加一个函数
public static  void  hideBottomUI(View view) {
        int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                | View.SYSTEM_UI_FLAG_FULLSCREEN; // hide status bar

        if( android.os.Build.VERSION.SDK_INT >= 19 ){
            uiFlags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;    //View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY: hide navigation bars - compatibility: building API level is lower thatn 19, use magic number directly for higher API target level
        } else {
            uiFlags |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
        }
        view.setSystemUiVisibility(uiFlags);
}
可参考https://www.jianshu.com/p/a98edc50f3ea
12赞

适配后:

适配前:

2赞

Lua桥接c++ 接入腾讯多媒体sdk

https://www.cnblogs.com/mingfuqishi/p/10077206.html android工程的
https://www.cnblogs.com/sanjin/p/3907391.html iOS工程
首先参考链接做好最基础的桥接工作
如果是第一次桥接。执行genbindings.py大概率会报错 因为你少几个东西 文章里mac和windows都有解决方案
因为都是文字容易忽略过去 所以就着重写出来

然后再编译proj.android (记得在proj.android/jin/android.mk里加好你的 .cpp. .c .h文件 不然编译不过 ) 编译并不需生成apk 在 libs/armeabi 中能看到libcocos2dlua.so文件生成就可以了
如果编译失败可以尝试删掉libs和obj 之后每次重新绑定编译的时候就不用删了

然后在lua工程测试函数是否成功调用 其中 改写cpp中的函数内的代码不需要再次绑定 但是添加函数或者改变参数类型需要重新绑定

如果没问题 能成功调用 那么接下来就在proj.android的jni中改写android.mk文件

android.mk 注解。 下面的GmeSDK文件夹是我自己创建的 放在Classes下面的

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../Classes)

LOCAL_MODULE := cocos2dlua_shared
——————————————————————————————————————————
LOCAL_SHARED_LIBRARIES的作用是会生成依赖关系,当库不存在时会去编译这个库
下面4个都是腾讯的库 因为接的是cocos2d的 所以桥接c++必须要有 不然编译不出so文件

这里腾讯sdk里面没有给armeabi架构 所以我把-v7a的复制粘贴一份改名
因为TARGET_ARCH_ABI老是找armeabi 所以没办法 只能这么搞了

LOCAL_SHARED_LIBRARIES += Pre_GMESDK
LOCAL_SHARED_LIBRARIES += Pre_TRAE
LOCAL_SHARED_LIBRARIES += Pre_PTT
LOCAL_SHARED_LIBRARIES += Pre_MP3

LOCAL_MODULE_FILENAME := libcocos2dlua
——————————————————————————————————————————
————————————这里添加Classes目录下的cpp和c—————————————
LOCAL_SRC_FILES := \
../../Classes/AppDelegate.cpp \
../../Classes/GmeSDK/GmeSDK.cpp \
../../Classes/GmeSDK/lua_GmeSDK_auto.cpp \
hellolua/main.cpp            
——————————————————————————————————————————
———————————————添加目录里的头文件——————————————————
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../Classes/GmeSDK \
——————————————————————————————————————————


# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END

LOCAL_STATIC_LIBRARIES := cocos2d_lua_static
LOCAL_STATIC_LIBRARIES += cocos2d_simulator_static
LOCAL_STATIC_LIBRARIES += gafplayer_static

# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END

include $(BUILD_SHARED_LIBRARY)


——————————————————————————————————————————
这里的GmeSDK对应的是Classes的子目录。可以找到对应的子工程的android.mk文件
腾讯sdk里叫 preBuild.mk 我把它改成android.mk丢在GmeSDK里面了


$(call import-module,scripting/lua-bindings/proj.android)
$(call import-module,tools/simulator/libsimulator/proj.android)
$(call import-module,.)
$(call import-module,GmeSDK)
$(call import-module,GAFPlayer)
——————————————————————————————————————————



# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END

做完以上所有步骤之后 然后再编译一次 我们就可以获得一个libcocos2dlua.so文件了。这是最重要的

工程配置别忘了
https://cloud.tencent.com/document/product/607/15216
因为我之前配置了一次 然后手抖把安卓工程删了 第二次卡了2天 然后又重新看文档 才知道自己没做工程配置

然后就是c++的问题了。我会直接把我的工程丢上来 免去大家一部分时间 里面的jar和so都被我替换了 只保留代码和目录结构
gme.zip (38.6 KB)

2赞

腾讯的那个sdk 可以理解为吃鸡手游的小队语音 是实时通讯的

1赞

大佬:ox::beer:

mark. 以后需要在看

支持大佬

大佬nb

mark

mark

大佬666

大佬,有qq吗,我creator 添加了之后 还是有黑边

mark

服务面板里面有个 Agora 语音,一样的功能,可以试试:grin:

mark一下

Agora太贵了

mark

还是有一点点的小黑边,有没有解决好了的

小黑边是你的背景图没有填充满,你可以做个试验性测试,改成3000x3000的试试。

1赞

近期 Cocos Service 服务面板也会上线腾讯云的相关服务,可以期待一下:wink:

1赞