build_native.py文件分析(2)

本文介绍了如何利用NDK和Cocos2D-X库进行Android游戏开发,包括环境配置、资源复制、构建流程及关键步骤解析。
def build(ndk_build_param,android_platform,build_mode):

    ////获取ndk_root -- NDK_ROOT = os.environ['NDK_ROOT']
    ndk_root = check_environment_variables() //获取ndk_root
    sdk_root = None
    select_toolchain_version() //选择编译工具版本
    
    //获取当前目录
    current_dir = os.path.dirname(os.path.realpath(__file__))

    //获取cocos_root库根目录,这个因为我们创建工程时拷贝了
    //库源码,所以cocos_root目录使用的是当前目录相对目录
    //如果我们的工程和库相对位置不是这样的,那我们只需要
    //把此处修改一些就可以了。
    //例如cocos_root = os.path.join("E:\otherpro\cocos2d-x-3.0\project\starGame\wipeStar\cocos2d")
    cocos_root = os.path.join(current_dir, "../cocos2d")

    //android 工程的根目录
    app_android_root = current_dir

    //拷贝资源文件,即把Resources -->> assets
    copy_resources(app_android_root)
    
    if android_platform is not None:
                                //获取SDK路径 --  SDK_ROOT = os.environ['ANDROID_SDK_ROOT']
				sdk_root = check_environment_variables_sdk()
				if android_platform.isdigit():
						android_platform = 'android-'+android_platform
				else:
						print 'please use vaild android platform'
						exit(1)
		
    if build_mode is None:
    	  build_mode = 'debug'
    elif build_mode != 'release':
        build_mode = 'debug'
    
    do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode)

    -->>do_build分析:

    def do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode):

            //得到NDK下ndk-build的路径
	    ndk_path = os.path.join(ndk_root, "ndk-build")

	    # windows should use ";" to seperate module paths
	    platform = sys.platform
	    //生成ndk_module_path参数,也就是执行ndk-build是需要NDK_MODULE_PATH路径,
	    //这里我们也可以根据自己的需求修改

	    if platform == 'win32':
		ndk_module_path = 'NDK_MODULE_PATH=%s;%s/external;%s/cocos' % (cocos_root, cocos_root, cocos_root)
	    else:
		ndk_module_path = 'NDK_MODULE_PATH=%s:%s/external:%s/cocos' % (cocos_root, cocos_root, cocos_root)
		
	    num_of_cpu = get_num_of_cpu()
		
	    //根据传进来的参数,生成编译命令,ndk_build_param(我们执行脚本时-n指定的参数)
	    //其实这个参数都是传给ndk-build命令的。
	    if ndk_build_param == None:
		command = '%s -j%d -C %s %s' % (ndk_path, num_of_cpu, app_android_root, ndk_module_path)
	    else:
		command = '%s -j%d -C %s %s %s' % (ndk_path, num_of_cpu, app_android_root, ''.join(str(e) for e in ndk_build_param), ndk_module_path)
	    if os.system(command) != 0:
		raise Exception("Build dynamic library for project [ " + app_android_root + " ] fails!")
	    elif android_platform is not None:
		  sdk_tool_path = os.path.join(sdk_root, "tools/android")
		  cocoslib_path = os.path.join(cocos_root, "cocos/2d/platform/android/java")
		  command = '%s update lib-project -t %s -p %s' % (sdk_tool_path,android_platform,cocoslib_path) 
		  if os.system(command) != 0:
			  raise Exception("update cocos lib-project [ " + cocoslib_path + " ] fails!")  	  
		  command = '%s update project -t %s -p %s -s' % (sdk_tool_path,android_platform,app_android_root)
		  if os.system(command) != 0:
			  raise Exception("update project [ " + app_android_root + " ] fails!")    	  	  
		  buildfile_path = os.path.join(app_android_root, "build.xml")
		  command = 'ant clean %s -f %s -Dsdk.dir=%s' % (build_mode,buildfile_path,sdk_root)
		  
		  //执行命令
		  os.system(command)

A module that was compiled using NumPy 1.x cannot be run in NumPy 2.2.6 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may need to rebuild instead e.g. with 'pybind11>=2.12'. If you are a user of the module, the easiest solution will be to downgrade to 'numpy<2' or try to upgrade the affected module. We expect that some modules will need time to support NumPy 2. Traceback (most recent call last): File "C:\Users\29631\Desktop\人工智能\人脸识别\人脸识别.py", line 2, in <module> import cv2 File "E:\Lib\site-packages\cv2\__init__.py", line 181, in <module> bootstrap() File "E:\Lib\site-packages\cv2\__init__.py", line 153, in bootstrap native_module = importlib.import_module("cv2") File "E:\Lib\importlib\__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) AttributeError: _ARRAY_API not found Traceback (most recent call last): File "C:\Users\29631\Desktop\人工智能\人脸识别\人脸识别.py", line 2, in <module> import cv2 File "E:\Lib\site-packages\cv2\__init__.py", line 181, in <module> bootstrap() ~~~~~~~~~^^ File "E:\Lib\site-packages\cv2\__init__.py", line 153, in bootstrap native_module = importlib.import_module("cv2") File "E:\Lib\importlib\__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ImportError: numpy.core.multiarray failed to import
最新发布
06-17
$ python Python 3.12.9 (main, Feb 4 2025, 22:30:28) [Clang 18.0.3 (https://android.googlesource.com/toolchain/llvm-project d8003a456 on linux Type "help", "copyright", "credits" or "license" for more information. >>> import akshare as ak Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/akshare/__init__.py", line 4642, in <module> from akshare.stock_feature.stock_a_pe_and_pb import ( File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/akshare/stock_feature/stock_a_pe_and_pb.py", line 320, in <module> js_functions = py_mini_racer.MiniRacer() ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/py_mini_racer.py", line 178, in __init__ self.__class__.ext = _build_ext_handle() ^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/py_mini_racer.py", line 125, in _build_ext_handle raise RuntimeError("Native library not available at {}".format(EXTENSION_PATH)) RuntimeError: Native library not available at /data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/libmini_racer.glibc.so >>> print(ak.__version__) Exception ignored in: <function MiniRacer.__del__ at 0x775999a520> Traceback (most recent call last): File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/py_mini_racer.py", line 315, in __del__ self.ext.mr_free_context(getattr(self, "ctx", None)) ^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'mr_free_context' Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'ak' is not defined
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值