crown-android.rb 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/ruby
  2. require 'optparse'
  3. require 'ostruct'
  4. require 'fileutils'
  5. $android_create = "android create project"
  6. $android_update = "android update project"
  7. $activity = "CrownActivity"
  8. $package = "crown.android"
  9. $engine_src = "../engine/."
  10. $android_src = "../engine/os/android/*.java"
  11. $manifest = "../engine/os/android/AndroidManifest.xml"
  12. $luajit = "../engine/third/ARMv7/luajit"
  13. #------------------------------------------------------------------------------
  14. def validate_command_line(args)
  15. if args.length != 6
  16. return false
  17. end
  18. if args[0] != "--target"
  19. return false
  20. end
  21. if args[2] != "--name"
  22. return false
  23. end
  24. if args[4] != "--path"
  25. return false
  26. end
  27. return true
  28. end
  29. #------------------------------------------------------------------------------
  30. def parse_command_line(args)
  31. banner = "Usage: crown-android.rb --target <android-target> --name <project-name> --path <project-path>\n"
  32. if not validate_command_line(args)
  33. print banner
  34. exit
  35. end
  36. options = OpenStruct.new
  37. OptionParser.new do |opts|
  38. opts.banner = banner
  39. opts.on("-t", "--target TARGET", "Android target") do |t|
  40. options.target = t
  41. end
  42. opts.on("-n", "--name NAME", "Android project name") do |n|
  43. options.name = n
  44. end
  45. opts.on("-p", "--path PATH", "Android project path") do |p|
  46. options.path = p
  47. end
  48. opts.on_tail("-h", "--help", "Show this message") do
  49. puts opts
  50. exit
  51. end
  52. end.parse!(args)
  53. return options
  54. end
  55. #------------------------------------------------------------------------------
  56. def create_android_project(target, name, path)
  57. engine_dest = path + "/jni"
  58. android_dest = path + "/src/crown/android"
  59. assets_dest = path + "/assets"
  60. # Creates path if not exists
  61. if not Dir.exists?(path)
  62. FileUtils.mkdir_p(path)
  63. end
  64. # Project path is empty
  65. if Dir[path + "/*"].empty?
  66. # Creates android project
  67. system($android_create + " --target " + target + " --name " + name + " --path " + path +
  68. " --activity " + $activity + " --package " + $package)
  69. else
  70. # Updates android project
  71. system($android_update + " --target " + target + " --name " + name + " --path " + path)
  72. end
  73. # if jni dir does not exists, create it!
  74. if not Dir.exists?(engine_dest)
  75. FileUtils.mkdir_p(engine_dest)
  76. print "Created directory " + engine_dest + "\n"
  77. end
  78. # if assets dir does not exists, create it!
  79. if not Dir.exists?(assets_dest)
  80. FileUtils.mkdir_p(assets_dest)
  81. print "Created directory " + assets_dest + "\n"
  82. end
  83. end
  84. #------------------------------------------------------------------------------
  85. def fill_android_project(path)
  86. engine_dest = path + "/jni"
  87. android_dest = path + "/src/crown/android"
  88. # Copy Engine files
  89. FileUtils.cp_r($engine_src, engine_dest, :remove_destination => true)
  90. print "Copied Engine to " + engine_dest + "\n"
  91. # Copy luajit dir
  92. FileUtils.cp_r($luajit, engine_dest, :remove_destination => true)
  93. print "Copied luajit dir to " + engine_dest + "\n"
  94. # Copy luajit lib
  95. FileUtils.cp($luajit + "/lib/libluajit-5.1.so.2.0.2", engine_dest + "/libluajit-5.1.so")
  96. print "Copied libluajit to " + engine_dest + "\n"
  97. # Copy Java files
  98. FileUtils.cp_r(Dir.glob($android_src), android_dest, :remove_destination => true)
  99. print "Copied Java files to " + android_dest + "\n"
  100. # Copy Android Manifest
  101. FileUtils.cp($manifest, path)
  102. print "Copied Android Manifest to " + path + "\n"
  103. end
  104. #------------------------------------------------------------------------------
  105. def build_android_project(path)
  106. # Move to root directory of Android project
  107. Dir.chdir(path)
  108. # Build libraries
  109. system("ndk-build")
  110. # Build apk
  111. system("ant debug")
  112. end
  113. #------------------------------------------------------------------------------
  114. opts = parse_command_line(ARGV)
  115. create_android_project(opts.target, opts.name, opts.path)
  116. fill_android_project(opts.path)
  117. build_android_project(opts.path)