Lua脚本自动生成APK包

上次用了纯bat写了个脚本生成APK包,感觉bat扩展性和语法差的令人发指,这次用lua重写了一个脚本
可以根据需要自行扩展了。
使用前tool path 还有 target path的前两个还是需要自己设置下。
一些小的函数 jit_file copy_file 我就不贴了 比较简单,用来luajit 和 拷贝。

-- Authors: sails鸢@oschina
-- Date: 20th , August , 2014
-- Note:
-- This is used for Cocos2dx + Lua
-- This is a script to making .APK file for android platform
-- Make sure you have installed java, ant, android sdk, ndk, svn, jit
-- Also plz check and rewrite following paths before you use this script
-- Remarks:
-- The script will update your cocos engine directory and your Lua script which probably is Resources
-- then it should jit your Lua files , use ASMaker to encrypt your Lua-jit files
-- all files and resources will move to this folder proj.android/assets
-- finally it will make a .APK package with ANT
require('support')

--tools paths
local JAVA_HOME = 'C:\\Program Files\\Java\\jdk1.8.0_05'
local ANT_HOME = 'D:\\ProgramSoftware\\apache-ant-1.9.4'
local ANDROID_HOME = '"D:\\ProgramSoftware\\android sdk\\sdk"'
local NDK_HOME = 'D:\\ProgramSoftware\\android-ndk-r9d-windows-x86_64\\android-ndk-r9d'
local SVN_HOME = 'C:\\Program Files\\TortoiseSVN\\bin\\'

--target paths
local ENGINE_DIR = 'D:\\engine'
local WORK_DIR = 'D:\\engine\\projects\\XXXX\\proj.android'
local RESOURCES_DIR = WORK_DIR ..'\\..\\Resources'
local ASSETS_DIR = WORK_DIR ..'\\assets'

--function detect directory
local function dir_exist(dir)
  return os.execute(string.format('pushd "%s">nul 2>nul && popd', dir))
end

--remove old assets
if dir_exist(ASSETS_DIR) then
  rmdir(ASSETS_DIR)
end

--remove old APK
local old_apk , err = io.open(WORK_DIR..'\\bin\\XXXX-release.apk')
if err == nil then
  old_apk:close()
  delfile(WORK_DIR..'\\bin\\XXXX-release.apk')
end

--svn update
--check
--svn_up(ENGINE_DIR)
--svn_up(WORK_DIR..'\\..')

--luajit
--iter directory
local cmd = string.format("pushd %q &dir /b /s &popd" , RESOURCES_DIR)
local file_list = io.popen(cmd)
for line in file_list:lines() do
  line_to = string.gsub(line, 'Resources', 'Resources_jit')
  if dir_exist(line) then
    check_mk_path(line_to)
  else
    if(string.find(line,'.lua$')) then
      jit_file(WORK_DIR, line , line_to)
    else
      copy_file(line , line_to)
    end
  end
end
file_list:close()

--encryption with ASmaker
local enc_cmd = WORK_DIR..'\\ASmaker.exe'..' -i '..WORK_DIR..'\\..\\Resources_jit'.." -o "..ASSETS_DIR..' -f .lua -e .exe'
local enc_re = run_one_cmd(enc_cmd)
if enc_re:find ("失败") then
  print("ASmaker加密文件夹失败!",enc_re)
  os.exit(1)
end

--ndk build
local ndk_cmd = 'call '..NDK_HOME..'\\ndk-build'..' -C '..WORK_DIR..' '..'NDK_MODULE_PATH='..ENGINE_DIR..';'..ENGINE_DIR..'\\cocos2dx\\platform\\third_party\\android\\prebuilt'
local ndk_re = run_one_cmd(ndk_cmd)
if ndk_re:find ("error") then
  print("NDK build失败!",ndk_re)
  os.exit(1)
end

--android update
local and_cmd = 'call '..ANDROID_HOME..'\\tools\\android'..' update project -p '..WORK_DIR
local and_re = run_one_cmd(and_cmd)
and_cmd = 'call "'..ANDROID_HOME..'\\tools\\android"'..' update lib-project -p '..ENGINE_DIR..'\\cocos2dx\\platform\\android\\java'
and_re = run_one_cmd(and_cmd)

--ant
local ant_cmd = 'pushd '..WORK_DIR..'&call '..ANT_HOME..'\\bin\\ant release'
local ant_re = run_one_cmd(ant_cmd)
if ant_re:find ("failed") then
  print("生成APK失败!",ant_re)
  os.exit(1)
end
(0)

相关推荐

  • Lua脚本自动生成APK包

    上次用了纯bat写了个脚本生成APK包,感觉bat扩展性和语法差的令人发指,这次用lua重写了一个脚本 可以根据需要自行扩展了. 使用前tool path 还有 target path的前两个还是需要自己设置下. 一些小的函数 jit_file copy_file 我就不贴了 比较简单,用来luajit 和 拷贝. -- Authors: sails鸢@oschina -- Date: 20th , August , 2014 -- Note: -- This is used for Cocos

  • lua脚本实现自动生成APK包

    可以根据需要自行扩展了. 使用前tool path 还有 target path的前两个还是需要自己设置下. 一些小的函数 jit_file copy_file 我就不贴了 比较简单,用来luajit 和 拷贝. 复制代码 代码如下: -- Authors: sails鸢@oschina -- Date: 20th , August , 2014 -- Note: -- This is used for Cocos2dx + Lua -- This is a script to making .

  • BAT批处理一键生成APK包脚本分享

    BAT批处理一键生成APK包脚本分享 将本bat放到cocos2dx目录下你的工程的project.android下(需修改变量). ASmaker 用来将Resources文件夹下的lua文件批量加密 算法参考我之前的rc4算法实现. 每次打包apk前 svn 最新的工程代码 和 cocos2dx引擎代码. @echo off rem 工具路径 set JAVA_HOME = "C:\Program Files\Java\jdk1.8.0_05" set ANT_HOME = &qu

  • 使用批处理脚本自动生成并上传NuGet包(操作方法)

    Hello 大家好,我是TANZAME,我们又见面了. NuGet是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自动上传到 NuGet.在实际项目开发过程中我们要上传自己的包,一般的步骤都是:nuget spec => nuget pack => nuget push,一个包都要至少重复三个动作,如果有 N个包那就要重复 N*3次,想想都不能忍,所以便有了今天的分享主题. 生成目录 既然是统一管理,生成的包自然

  • 详解python脚本自动生成需要文件实例代码

    python脚本自动生成需要文件 在工作中我们经常需要通过一个文件写出另外一个文件,然而既然是对应关系肯定可以总结规律让计算机帮我们完成,今天我们就通过一个通用文件生成的python脚本来实现这个功能,将大家从每日重复的劳动中解放! 定义一个函数 def produceBnf(infilename,outfilename): List=[] with open(infilename,'r') as inf: for line in inf.readlines(): List.append(re.

  • 如何通过shell脚本自动生成vue文件详解

    前言 最近在写nuxt项目时候每次新建页面都要去新建然后引入各种需要的依赖很是麻烦,所以想写一个脚本自动生成文件 省去手动新建 现写下实现方法 给大家参考 Mac下可直接运行 Windows下需要安装Cygwin类软件且配置环境变量后运行 使用方法 1.需要修改package.json 的scrpts 加一条create 或者自定义名字 主要是为了我们在terminal中输入指令后运行对应的脚本 package.json 2.在项目根目录新建一个template文件夹放自己的模板文件 文件内容根

  • 使用python脚本自动生成K8S-YAML的方法示例

    1.生成 servie.yaml 1.1.yaml转json service模板yaml apiVersion: v1 kind: Service metadata: name: ${jarName} labels: name: ${jarName} version: v1 spec: ports: - port: ${port} targetPort: ${port} selector: name: ${jarName} 转成json的结构 { "apiVersion": "

  • android studio生成aar包并在其他工程引用aar包的方法

    1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 2.生成aar包步骤: ①.用android studio打开一个工程,然后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操作 ②.新建Module 类型为android Library 后如下图所示 ③.在新建的Module中编写完代码后,接下来编

  • Golang使用lua脚本实现redis原子操作

    目录 [redis 调用Lua脚本](#redis 调用Lua脚本) [redis+lua 实现评分排行榜实时更新](#redis+lua 实现评分排行榜实时更新) [lua 脚本](#lua 脚本) Golang调用redis+lua示例 byte切片与string的转换优化 redis 调用Lua脚本 EVAL命令 redis调用Lua脚本需要使用EVAL命令. redis EVAL命令格式: redis 127.0.0.1:6379> EVAL script numkeys key [ke

  • mybatis-generator自动生成dao、mapping、bean配置操作

    我就废话不多说了,大家还是直接看代码吧~ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_

随机推荐