def main(): parser = ArgumentParser(description="Generate prebuilt engine for Cocos Engine.") parser.add_argument("-j", "--jobs", dest="jobs", type=int, help="how many thread for build") parser.add_argument("--proj-dir", dest="proj_dir", help="project dir .default is working dir") parser.add_argument("--ap", dest="android_platform", help="Specify the Android platform used for building Android apk.") parser.add_argument("--ndk-mode", dest="ndk_mode", help="Set the compiling mode of ndk-build, should be debug|release|none, native code will not be compiled when the value is none. Default is same value with '-m'.") parser.add_argument("--app-abi", dest="app_abi", help="Set the APP_ABI of ndk-build.Can be multi value separated with ':'. Sample : --app-aib armeabi:x86:mips. Default value is 'armeabi'.") parser.add_argument("--ndk-toolchain", dest="toolchain", help="Specify the NDK_TOOLCHAIN of ndk-build.") parser.add_argument("--ndk-cppflags", dest="cppflags", help="Specify the APP_CPPFLAGS of ndk-build.") parser.add_argument("--android-studio", dest="use_studio", action="store_true", help="Use the Android Studio project for Android platform.") parser.add_argument("--no-apk", dest="no_apk", action="store_true", help="Not generate the apk file.") parser.add_argument("--ndk-module-path", dest="ndk_module_path", help="ndk module path separated with ':'") (args, unknown) = parser.parse_known_args() using_studio = False if args.use_studio: using_studio=args.use_studio project_dir= os.path.abspath(os.getcwd()) if args.proj_dir: project_dir=args.proj_dir builder = AndroidBuilder(True, project_dir,True, None, using_studio) jobs=4 if args.jobs: jobs=args.jobs ndk_build_param = [ "-j%s" % jobs ] if args.ndk_module_path: builder.ndk_module_paths=args.ndk_module_path.split(":") if args.app_abi: abi_param = "APP_ABI=\"%s\"" % " ".join(args.app_abi.split(":")) ndk_build_param.append(abi_param) if args.toolchain: toolchain_param = "NDK_TOOLCHAIN=%s" % args.toolchain ndk_build_param.append(toolchain_param) builder.do_ndk_build(ndk_build_param, args.ndk_mode, None) '''
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode output_dir = self._output_dir if self._project._is_script_project(): if self._project._is_lua_project(): cocos_root = os.path.join(project_dir, 'frameworks', 'cocos2d-x') else: cocos_root = os.path.join( project_dir, 'frameworks', '%s-bindings' % self._project.get_language(), 'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'cocos2d') # check environment variable ant_root = cocos.check_environment_variable('ANT_ROOT') sdk_root = cocos.check_environment_variable('ANDROID_SDK_ROOT') project_android_dir = self._platforms.project_path() from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, cocos_root, project_android_dir, self._no_res, self._project) args_ndk_copy = self._custom_step_args.copy() target_platform = self._platforms.get_current_platform() if not self._project._is_script_project( ) or self._project._is_native_support(): if self._ndk_mode != "none": # build native code cocos.Logging.info("building native") ndk_build_param = "-j%s" % self._jobs self._project.invoke_custom_step_script( cocos_project.Project.CUSTOM_STEP_PRE_NDK_BUILD, target_platform, args_ndk_copy) builder.do_ndk_build(ndk_build_param, self._ndk_mode) self._project.invoke_custom_step_script( cocos_project.Project.CUSTOM_STEP_POST_NDK_BUILD, target_platform, args_ndk_copy) # build apk cocos.Logging.info("building apk") self.apk_path = builder.do_build_apk(sdk_root, ant_root, self._ap, build_mode, output_dir, self._custom_step_args) cocos.Logging.info("build succeeded.")
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode if self._project._is_script_project(): if build_mode == 'debug': output_dir = os.path.join( project_dir, CCPluginCompile.OUTPUT_DIR_SCRIPT_DEBUG, 'android') else: output_dir = os.path.join( project_dir, CCPluginCompile.OUTPUT_DIR_SCRIPT_RELEASE, 'android') if self._project._is_lua_project(): cocos_root = os.path.join(project_dir, 'frameworks', 'cocos2d-x') else: cocos_root = os.path.join( project_dir, 'frameworks', '%s-bindings' % self._project.get_language(), 'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'cocos2d') output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_NATIVE, build_mode, 'android') # check environment variable ant_root = cocos.check_environment_variable('ANT_ROOT') ndk_root = cocos.check_environment_variable('NDK_ROOT') sdk_root = cocos.check_environment_variable('ANDROID_SDK_ROOT') project_android_dir = self._platforms.project_path() from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, cocos_root, project_android_dir, self._no_res) # build native code cocos.Logging.info("building native") ndk_build_param = "-j%s" % self._jobs builder.do_ndk_build(ndk_root, ndk_build_param, build_mode) # build apk cocos.Logging.info("building apk") self.apk_path = builder.do_build_apk(sdk_root, ant_root, self._ap, build_mode, output_dir) cocos.Logging.info("build succeeded.")
def build_android(current_dir,configfile,ndk_build_param,android_platform,build_mode): cocos_root = os.path.join(current_dir, "../../cocos2d-x") # 需要用到的三个环境变量 ant_root = check_environment_variable('ANT_ROOT') ndk_root = check_environment_variable('NDK_ROOT') sdk_root = check_environment_variable('ANDROID_SDK_ROOT') print("ANT_ROOT:"+ant_root) print("NDK_ROOT:"+ndk_root) print("ANDROID_SDK_ROOT:"+sdk_root) app_android_root = current_dir if build_mode is None: build_mode = 'debug' elif build_mode != 'release': build_mode = 'debug' project_dir = app_android_root #输出目录 if build_mode == 'debug': output_dir = os.path.join(project_dir, OUTPUT_DIR_NATIVE, 'android') else: output_dir = os.path.join(project_dir, OUTPUT_DIR_SCRIPT_RELEASE, 'android') #导入编译模块 _no_res=False from build_android import AndroidBuilder builder = AndroidBuilder(configfile,cocos_root,app_android_root) # build native code print("start building native") builder.do_ndk_build(ndk_root,ndk_build_param, build_mode) # build apk print("start building apk:android_platform:",android_platform) if android_platform is not None: android_platform_int=int(android_platform) apk_path = builder.do_build_apk(sdk_root,ant_root,android_platform_int, build_mode, output_dir) print("build succeeded.")
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode output_dir = self._output_dir if self._project._is_script_project(): if self._project._is_lua_project(): cocos_root = os.path.join(project_dir, 'frameworks' ,'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'frameworks' ,'%s-bindings' % self._project.get_language(), 'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'cocos2d') # check environment variable ant_root = cocos.check_environment_variable('ANT_ROOT') sdk_root = cocos.check_environment_variable('ANDROID_SDK_ROOT') project_android_dir = self._platforms.project_path() from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, cocos_root, project_android_dir, self._no_res, self._project) args_ndk_copy = self._custom_step_args.copy() target_platform = self._platforms.get_current_platform() if not self._project._is_script_project() or self._project._is_native_support(): if self._ndk_mode != "none": # build native code cocos.Logging.info("building native") ndk_build_param = "-j%s" % self._jobs self._project.invoke_custom_step_script(cocos_project.Project.CUSTOM_STEP_PRE_NDK_BUILD, target_platform, args_ndk_copy) builder.do_ndk_build(ndk_build_param, self._ndk_mode) self._project.invoke_custom_step_script(cocos_project.Project.CUSTOM_STEP_POST_NDK_BUILD, target_platform, args_ndk_copy) # build apk cocos.Logging.info("building apk") self.apk_path = builder.do_build_apk(sdk_root, ant_root, self._ap, build_mode, output_dir, self._custom_step_args, self) cocos.Logging.info("build succeeded.")
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode if self._project._is_script_project(): if build_mode == 'debug': output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_SCRIPT_DEBUG, 'android') else: output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_SCRIPT_RELEASE, 'android') if self._project._is_lua_project(): cocos_root = os.path.join(project_dir, 'frameworks' ,'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'frameworks' ,'%s-bindings' % self._project.get_language(), 'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'cocos2d') output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_NATIVE, build_mode, 'android') # check environment variable ant_root = cocos.check_environment_variable('ANT_ROOT') ndk_root = cocos.check_environment_variable('NDK_ROOT') sdk_root = cocos.check_environment_variable('ANDROID_SDK_ROOT') project_android_dir = self._platforms.project_path() from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, cocos_root, project_android_dir, self._no_res) # build native code cocos.Logging.info("building native") ndk_build_param = "-j%s" % self._jobs builder.do_ndk_build(ndk_root, ndk_build_param, build_mode) # build apk cocos.Logging.info("building apk") self.apk_path = builder.do_build_apk(sdk_root, ant_root, self._ap, build_mode, output_dir) cocos.Logging.info("build succeeded.")
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode output_dir = self._output_dir if self._project._is_script_project(): if self._project._is_lua_project(): cocos_root = os.path.join(project_dir, 'frameworks', 'cocos2d-x') else: cocos_root = os.path.join( project_dir, 'frameworks', '%s-bindings' % self._project.get_language(), 'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'cocos2d') # check environment variable ant_root = cocos.check_environment_variable('ANT_ROOT') sdk_root = cocos.check_environment_variable('ANDROID_SDK_ROOT') project_android_dir = self._platforms.project_path() from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, cocos_root, project_android_dir, self._no_res, self._project) args_ndk_copy = self._custom_step_args.copy() target_platform = self._platforms.get_current_platform() # update the project with the android platform builder.update_project(sdk_root, self._ap) if not self._project._is_script_project( ) or self._project._is_native_support(): if self._ndk_mode != "none": # build native code cocos.Logging.info("building native") ndk_build_param = ["-j%s" % self._jobs] if self.app_abi: abi_param = "APP_ABI=\"%s\"" % self.app_abi ndk_build_param.append(abi_param) if self.ndk_toolchain: toolchain_param = "NDK_TOOLCHAIN=%s" % self.ndk_toolchain ndk_build_param.append(toolchain_param) self._project.invoke_custom_step_script( cocos_project.Project.CUSTOM_STEP_PRE_NDK_BUILD, target_platform, args_ndk_copy) modify_mk = False app_mk = os.path.join(project_android_dir, "jni/Application.mk") mk_content = None if self.cppflags and os.path.exists(app_mk): # record the content of Application.mk f = open(app_mk) mk_content = f.read() f.close() # Add cpp flags f = open(app_mk, "a") f.write("\nAPP_CPPFLAGS += %s" % self.cppflags) f.close() modify_mk = True try: builder.do_ndk_build(ndk_build_param, self._ndk_mode) except: raise cocos.CCPluginError("Ndk build failed!") finally: # roll-back the Application.mk if modify_mk: f = open(app_mk, "w") f.write(mk_content) f.close() self._project.invoke_custom_step_script( cocos_project.Project.CUSTOM_STEP_POST_NDK_BUILD, target_platform, args_ndk_copy) # build apk cocos.Logging.info("building apk") self.apk_path = builder.do_build_apk(sdk_root, ant_root, build_mode, output_dir, self._custom_step_args, self) cocos.Logging.info("build succeeded.")
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode output_dir = self._output_dir if self._project._is_script_project(): if self._project._is_lua_project(): cocos_root = os.path.join(project_dir, 'frameworks' ,'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'frameworks' ,'%s-bindings' % self._project.get_language(), 'cocos2d-x') else: cocos_root = os.path.join(project_dir, 'cocos2d') # check environment variable ant_root = cocos.check_environment_variable('ANT_ROOT') sdk_root = cocos.check_environment_variable('ANDROID_SDK_ROOT') project_android_dir = self._platforms.project_path() from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, cocos_root, project_android_dir, self._no_res, self._project) args_ndk_copy = self._custom_step_args.copy() target_platform = self._platforms.get_current_platform() # update the project with the android platform builder.update_project(sdk_root, self._ap) if not self._project._is_script_project() or self._project._is_native_support(): if self._ndk_mode != "none": # build native code cocos.Logging.info("building native") ndk_build_param = [ "-j%s" % self._jobs ] if self.app_abi: abi_param = "APP_ABI=\"%s\"" % self.app_abi ndk_build_param.append(abi_param) if self.ndk_toolchain: toolchain_param = "NDK_TOOLCHAIN=%s" % self.ndk_toolchain ndk_build_param.append(toolchain_param) self._project.invoke_custom_step_script(cocos_project.Project.CUSTOM_STEP_PRE_NDK_BUILD, target_platform, args_ndk_copy) modify_mk = False app_mk = os.path.join(project_android_dir, "jni/Application.mk") mk_content = None if self.cppflags and os.path.exists(app_mk): # record the content of Application.mk f = open(app_mk) mk_content = f.read() f.close() # Add cpp flags f = open(app_mk, "a") f.write("\nAPP_CPPFLAGS += %s" % self.cppflags) f.close() modify_mk = True try: builder.do_ndk_build(ndk_build_param, self._ndk_mode) except: raise cocos.CCPluginError("Ndk build failed!") finally: # roll-back the Application.mk if modify_mk: f = open(app_mk, "w") f.write(mk_content) f.close() self._project.invoke_custom_step_script(cocos_project.Project.CUSTOM_STEP_POST_NDK_BUILD, target_platform, args_ndk_copy) # build apk cocos.Logging.info("building apk") self.apk_path = builder.do_build_apk(sdk_root, ant_root, build_mode, output_dir, self._custom_step_args, self) cocos.Logging.info("build succeeded.")
def build_android(self): if not self._platforms.is_android_active(): return project_dir = self._project.get_project_dir() build_mode = self._mode output_dir = self._output_dir # get the android project path cfg_obj = self._platforms.get_current_config() project_android_dir = cfg_obj.proj_path ide_name = 'Android Studio' cocos.Logging.info( MultiLanguage.get_string('COMPILE_INFO_ANDROID_PROJPATH_FMT', (ide_name, project_android_dir))) # Check whether the gradle of the project is support ndk or not # Get the engine version of the project engine_version_num = self.get_engine_version_num() if engine_version_num is None: raise cocos.CCPluginError( MultiLanguage.get_string( 'COMPILE_ERROR_UNKNOWN_ENGINE_VERSION')) # Gradle supports NDK build from engine 3.15 main_ver = engine_version_num[0] minor_ver = engine_version_num[1] if main_ver > 3 or (main_ver == 3 and minor_ver >= 15): gradle_support_ndk = True from build_android import AndroidBuilder builder = AndroidBuilder(self._verbose, project_android_dir, self._no_res, self._project, self._mode, self._build_type, self.app_abi, gradle_support_ndk) args_ndk_copy = self._custom_step_args.copy() target_platform = self._platforms.get_current_platform() # update the project with the android platform builder.update_project(self._ap) if not self._project._is_script_project( ) or self._project._is_native_support(): if self._build_type != "none" and not gradle_support_ndk: # build native code cocos.Logging.info( MultiLanguage.get_string('COMPILE_INFO_BUILD_NATIVE')) ndk_build_param = ["-j%s" % self._jobs] if self.app_abi: abi_param = "APP_ABI=\"%s\"" % self.app_abi ndk_build_param.append(abi_param) if self.ndk_toolchain: toolchain_param = "NDK_TOOLCHAIN=%s" % self.ndk_toolchain ndk_build_param.append(toolchain_param) self._project.invoke_custom_step_script( cocos_project.Project.CUSTOM_STEP_PRE_NDK_BUILD, target_platform, args_ndk_copy) modify_mk = False app_mk = os.path.join(project_android_dir, "app/jni/Application.mk") mk_content = None if self.cppflags and os.path.exists(app_mk): # record the content of Application.mk f = open(app_mk) mk_content = f.read() f.close() # Add cpp flags f = open(app_mk, "a") f.write("\nAPP_CPPFLAGS += %s" % self.cppflags) f.close() modify_mk = True try: builder.do_ndk_build(ndk_build_param, self._mode, self._build_type, self) except Exception as e: if e.__class__.__name__ == 'CCPluginError': raise e else: raise cocos.CCPluginError( MultiLanguage.get_string( 'COMPILE_ERROR_NDK_BUILD_FAILED'), cocos.CCPluginError.ERROR_BUILD_FAILED) finally: # roll-back the Application.mk if modify_mk: f = open(app_mk, "w") f.write(mk_content) f.close() self._project.invoke_custom_step_script( cocos_project.Project.CUSTOM_STEP_POST_NDK_BUILD, target_platform, args_ndk_copy) # build apk if not self._no_apk: cocos.Logging.info( MultiLanguage.get_string('COMPILE_INFO_BUILD_APK')) self.apk_path = builder.do_build_apk(build_mode, self._no_apk, self._no_sign, output_dir, self._custom_step_args, self._ap, self) self.android_package, self.android_activity = builder.get_apk_info() cocos.Logging.info( MultiLanguage.get_string('COMPILE_INFO_BUILD_SUCCEED'))
def main(): parser = ArgumentParser( description="Generate prebuilt engine for Cocos Engine.") parser.add_argument("-j", "--jobs", dest="jobs", type=int, help="how many thread for build") parser.add_argument("--proj-dir", dest="proj_dir", help="project dir .default is working dir") parser.add_argument( "--ap", dest="android_platform", help="Specify the Android platform used for building Android apk.") parser.add_argument( "--ndk-mode", dest="ndk_mode", help= "Set the compiling mode of ndk-build, should be debug|release|none, native code will not be compiled when the value is none. Default is same value with '-m'." ) parser.add_argument( "--app-abi", dest="app_abi", help= "Set the APP_ABI of ndk-build.Can be multi value separated with ':'. Sample : --app-aib armeabi:x86:mips. Default value is 'armeabi'." ) parser.add_argument("--ndk-toolchain", dest="toolchain", help="Specify the NDK_TOOLCHAIN of ndk-build.") parser.add_argument("--ndk-cppflags", dest="cppflags", help="Specify the APP_CPPFLAGS of ndk-build.") parser.add_argument( "--android-studio", dest="use_studio", action="store_true", help="Use the Android Studio project for Android platform.") parser.add_argument("--no-apk", dest="no_apk", action="store_true", help="Not generate the apk file.") parser.add_argument("--ndk-module-path", dest="ndk_module_path", help="ndk module path separated with ':'") (args, unknown) = parser.parse_known_args() using_studio = False if args.use_studio: using_studio = args.use_studio project_dir = os.path.abspath(os.getcwd()) if args.proj_dir: project_dir = args.proj_dir builder = AndroidBuilder(True, project_dir, True, None, using_studio) jobs = 4 if args.jobs: jobs = args.jobs ndk_build_param = ["-j%s" % jobs] if args.ndk_module_path: builder.ndk_module_paths = args.ndk_module_path.split(":") if args.app_abi: abi_param = "APP_ABI=\"%s\"" % " ".join(args.app_abi.split(":")) ndk_build_param.append(abi_param) if args.toolchain: toolchain_param = "NDK_TOOLCHAIN=%s" % args.toolchain ndk_build_param.append(toolchain_param) builder.do_ndk_build(ndk_build_param, args.ndk_mode, None) '''