Beispiel #1
0
    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(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'))
Beispiel #5
0
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)
    '''