您的位置:首页 > 产品设计 > UI/UE

build_native.py文件分析(2)

2015-07-31 17:31 537 查看
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)


来自:http://blog.csdn.net/tianxiawuzhei/article/details/44984217
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: