// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved // Please see LICENSE.md in repository root for license information // https://github.com/AtomicGameEngine/AtomicGameEngine #include #include #include #include "../ToolSystem.h" #include "../ToolEnvironment.h" #include "../Project/Project.h" #include "../Project/ProjectBuildSettings.h" #include "BuildMac.h" #include "BuildSystem.h" #include "AndroidProjectGenerator.h" namespace ToolCore { AndroidProjectGenerator::AndroidProjectGenerator(Context* context) : Object(context) { } AndroidProjectGenerator::~AndroidProjectGenerator() { } bool AndroidProjectGenerator::Generate() { if (!GenerateAndroidManifest()) return false; if (!GenerateStringXML()) return false; if (!GenerateLocalProperties()) return false; if (!GenerateProjectProperties()) return false; if (!GenerateActivitySource()) return false; return true; } bool AndroidProjectGenerator::GenerateActivitySource() { ToolSystem* toolSystem = GetSubsystem(); Project* project = toolSystem->GetProject(); AndroidBuildSettings* settings = project->GetBuildSettings()->GetAndroidBuildSettings(); String packageName = settings->GetPackageName(); if (!packageName.Length()) { errorText_ = "Invalid Package Name"; return false; } Vector elements = settings->GetPackageName().Split('.'); String path; path.Join(elements, "/"); path = buildPath_ + "/src/" + path; Poco::File dirs(path.CString()); dirs.createDirectories(); if (!dirs.exists()) { errorText_ = "Unable to create "; return false; } String source; source.AppendWithFormat("package %s;\n", packageName.CString()); source += "import org.libsdl.app.SDLActivity;\n"; source += "public class AtomicGameEngine extends SDLActivity {\n"; source += "}\n"; File file(context_, path + "/AtomicGameEngine.java", FILE_WRITE); if (!file.IsOpen()) return false; file.Write(source.CString(), source.Length()); return true; } bool AndroidProjectGenerator::GenerateLocalProperties() { ToolEnvironment* tenv = GetSubsystem(); ToolPrefs* prefs = tenv->GetToolPrefs(); String sdkPath = prefs->GetAndroidSDKPath(); if (!sdkPath.Length()) { errorText_ = "Invalid Android SDK Path"; return false; } String props; props.AppendWithFormat("sdk.dir=%s", sdkPath.CString()); File file(context_, buildPath_ + "/local.properties", FILE_WRITE); if (!file.IsOpen()) return false; file.Write(props.CString(), props.Length()); return true; } bool AndroidProjectGenerator::GenerateProjectProperties() { ToolSystem* toolSystem = GetSubsystem(); Project* project = toolSystem->GetProject(); AndroidBuildSettings* settings = project->GetBuildSettings()->GetAndroidBuildSettings(); String apiString = settings->GetSDKVersion(); if (!apiString.Length()) { errorText_ = "Invalid Android API"; return false; } String props; props.AppendWithFormat("target=%s", apiString.CString()); File file(context_, buildPath_ + "/project.properties", FILE_WRITE); if (!file.IsOpen()) return false; file.Write(props.CString(), props.Length()); return true; } bool AndroidProjectGenerator::GenerateStringXML() { ToolSystem* toolSystem = GetSubsystem(); Project* project = toolSystem->GetProject(); AndroidBuildSettings* settings = project->GetBuildSettings()->GetAndroidBuildSettings(); String appName = settings->GetAppName(); if (!appName.Length()) { errorText_ = "Invalid App Name"; return false; } String strings = "\n"; strings += "\n"; strings.AppendWithFormat("%s\n", appName.CString()); strings += "\n"; File file(context_, buildPath_ + "/res/values/strings.xml", FILE_WRITE); if (!file.IsOpen()) return false; file.Write(strings.CString(), strings.Length()); return true; } bool AndroidProjectGenerator::GenerateAndroidManifest() { ToolSystem* toolSystem = GetSubsystem(); Project* project = toolSystem->GetProject(); AndroidBuildSettings* settings = project->GetBuildSettings()->GetAndroidBuildSettings(); String package = settings->GetPackageName(); if (!package.Length()) { errorText_ = "Invalid Package Name"; return false; } // TODO: from settings String activityName = "AtomicGameEngine"; if (!activityName.Length()) { errorText_ = "Invalid Activity Name"; return false; } String manifest = "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest.AppendWithFormat("\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; manifest += "\n"; File file(context_, buildPath_ + "/AndroidManifest.xml", FILE_WRITE); if (!file.IsOpen()) return false; file.Write(manifest.CString(), manifest.Length()); return true; } } /* */