print("Loading please wait...") package.path = "./?/init.lua;./?.lua;" package.cpath = "./?.dll;" local gd = require("gd") local bin = require("bin") function getInput(msg,list) io.write(msg or "") local dat = io.read() if list then for i=1,#list do if list[i]==dat then return dat end end print("Invalid input: "..dat) return getInput(msg,list) else return dat end end if not bin.fileExist("../game.love") or not bin.fileExist("../loveandroid.apk") then print("game.love and loveandroid.apk must be in the root directory!\nPress Enter to continue...") io.read() os.exit() end print("AutoLoveMaker V1.0.0\nEnsure that all your files are in the same directory as the program! game.love, and loveandroid.apk must be present with these filenames for the program to work!") name = getInput("Game Name: ") if not io.dirExists("dat") then io.mkDir("dat") end _o={l = "sensorLandscape",p = "portrait"} if not io.dirExists("love_decoded") then os.execute([[apktool d -s -o love_decoded ../loveandroid.apk]]) end if not io.dirExists("love_decoded/assets") then io.mkDir("love_decoded/assets") end bin.load("../game.love"):tofile("love_decoded/assets/game.love") function Work() print("We are going to manage Settings that affect your apk...") o = getInput("Svreep Orientation(p - portrait | l - landscape): ",{"o","p"}) packageName = "game."..name..".org" ver = getInput("Version Code(number): ") verN = getInput("Version Name(number.number): ") local file = bin.new() file:addBlock({ o = o, packageName = packageName, ver = ver, verN = verN, }) file:tofile("dat/"..name..".dat") end if bin.fileExist("dat/"..name..".dat") then b = getInput("You have compiled a game by this name before! Do you want to use the last build settings? (y/n): ",{"y","n"}) if b=="y" then local file = bin.load("dat/"..name..".dat") local dat = file:getBlock("t") o=dat.o packageName=dat.packageName ver=dat.ver verN=dat.verN else Work() end else Work() end if bin.fileExist("../game.png") then print("building icon") local icon = gd.createFromPng("../game.png") local i48 = gd.createFromPng("love_decoded/res/drawable-mdpi/love.png") local i96 = gd.createFromPng("love_decoded/res/drawable-xhdpi/love.png") local i144 = gd.createFromPng("love_decoded/res/drawable-xxhdpi/love.png") local i192 = gd.createFromPng("love_decoded/res/drawable-xxxhdpi/love.png") i48:copyResized(icon, 0, 0, 0, 0, 48, 48, 192, 192) i96:copyResized(icon, 0, 0, 0, 0, 96, 96, 192, 192) i144:copyResized(icon, 0, 0, 0, 0, 144, 144, 192, 192) i192:copyResized(icon, 0, 0, 0, 0, 192, 192, 192, 192) i48:pngEx("love_decoded/res/drawable-mdpi/love.png",0) i96:pngEx("love_decoded/res/drawable-xhdpi/love.png",0) i144:pngEx("love_decoded/res/drawable-xxhdpi/love.png",0) i192:pngEx("love_decoded/res/drawable-xxxhdpi/love.png",0) end bin.new([[ ]]):tofile("love_decoded/AndroidManifest.xml") temp = bin.load("love_decoded/apktool.yml") temp.data:gsub("minSdkVersion: '(%d%d)'","minSdkVersion: '16'") temp.data:gsub("targetSdkVersion: '(%d%d)'","targetSdkVersion: '16'") temp:tofile("love_decoded/apktool.yml") print("Building apk...") os.execute([[apktool b -o ]]..name..[[.apk love_decoded]]) print("Signing apk...") os.execute([[java -jar uber-apk-signer.jar -a ]]..name..[[.apk]]) f1 = bin.load(name.."-aligned-debugSigned.apk"):tofile("../"..name.."-Signed.apk") f2 = bin.load(name..".apk"):tofile("../"..name.."-Unsigned.apk") os.remove(name.."-aligned-debugSigned.apk") os.remove(name..".apk") io.write("Cleanup folder ") os.execute([[rmdir love_decoded /s]]) getInput("Press Enter to continue...")