cocos打包安卓原生工程时、由于各种各样的特殊原因,需要把cocos嵌入到安卓原生工程中。但是会出现各种兼容性问题。
可以利用android的activity来妥善处理(兼容android和androidx工程!!!)
ActivityViewHelper.java 文件 封装好的工具类
import android.app.LocalActivityManager;import android.content.Intent;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import androidx.appcompat.app.AppCompatActivity;public class ActivityViewHelper {/*** 启动指定Activity并将其DecorView添加到给定的ViewGroup中* @param activity 当前的AppCompatActivity* @param container 用来显示目标Activity视图的容器* @param targetActivity 目标Activity类*/public static void addActivityToView(AppCompatActivity activity, ViewGroup container, Class<?> targetActivity) {LocalActivityManager mgr = new LocalActivityManager(activity, false);mgr.dispatchCreate(activity.getIntent());Intent intent = new Intent(activity, targetActivity);View decorView = mgr.startActivity("gm", intent).getDecorView();container.removeAllViews();container.addView(decorView);}}
使用:
import android.os.Bundle;import android.widget.FrameLayout;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取容器视图(假设这是一个FrameLayout)FrameLayout container = findViewById(R.id.container);// 使用封装的Helper方法将目标Activity的DecorView添加到容器中ActivityViewHelper.addActivityToView(this, container, AppActivity.class);}}
AppActivity.class是cocos工程的类名称
后记:由于题主的目的是支持androidx,所以也可以对cocos引擎部分做一些修改、使其兼容androidx。