bool AndroidProjectGenerator::GenerateActivitySource() { ToolSystem* toolSystem = GetSubsystem<ToolSystem>(); Project* project = toolSystem->GetProject(); AndroidBuildSettings* settings = project->GetBuildSettings()->GetAndroidBuildSettings(); String packageName = settings->GetPackageName(); if (!packageName.Length()) { errorText_ = "Invalid App Package name. The general naming convention is com.company.appname"; return false; } Vector<String> elements = settings->GetPackageName().Split('.'); String path; path.Join(elements, "/"); path = buildPath_ + "/src/" + path; Poco::File dirs(path.CString()); dirs.createDirectories(); if (!dirs.exists()) { errorText_ = "Project generator unable to create dirs " + path; 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()) { errorText_ = "Project generator unable to open file " + path + "/AtomicGameEngine.java"; return false; } file.Write(source.CString(), source.Length()); return true; }
void BuildAndroid::RunADBStartActivity() { SubprocessSystem* subs = GetSubsystem<SubprocessSystem>(); String adbCommand = platformAndroid_->GetADBCommand(); ToolSystem* toolSystem = GetSubsystem<ToolSystem>(); Project* project = toolSystem->GetProject(); AndroidBuildSettings* settings = project->GetBuildSettings()->GetAndroidBuildSettings(); String stringArgs; const char* cpackage = settings->GetPackageName().CString(); stringArgs.AppendWithFormat("shell am start -n %s/%s.AtomicGameEngine",cpackage, cpackage); Vector<String> args = stringArgs.Split(' '); currentBuildPhase_ = ADBStartActivity; Subprocess* subprocess = subs->Launch(adbCommand, args, buildPath_); if (!subprocess) { FailBuild("StartActivity operation did not launch successfully."); return; } VariantMap buildOutput; buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Starting Android Activity</color>\n\n"; SendEvent(E_BUILDOUTPUT, buildOutput); SubscribeToEvent(subprocess, E_SUBPROCESSCOMPLETE, ATOMIC_HANDLER(BuildAndroid, HandleADBStartActivityComplete)); SubscribeToEvent(subprocess, E_SUBPROCESSOUTPUT, ATOMIC_HANDLER(BuildBase, HandleSubprocessOutputEvent)); }
bool AndroidProjectGenerator::GenerateAndroidManifest() { ToolSystem* toolSystem = GetSubsystem<ToolSystem>(); 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 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; manifest += "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n"; manifest.AppendWithFormat("package=\"%s\"\n", package.CString()); manifest += "android:versionCode=\"1\"\n"; manifest += "android:versionName=\"1.0\">\n"; manifest += "<uses-permission android:name=\"android.permission.INTERNET\" />\n"; manifest += "<uses-feature android:glEsVersion=\"0x00020000\" />\n"; manifest += "<uses-sdk android:targetSdkVersion=\"12\" android:minSdkVersion=\"10\" />\n"; manifest += "<application android:label=\"@string/app_name\" android:icon=\"@drawable/icon\">\n"; manifest.AppendWithFormat("<activity android:name=\".%s\"\n", activityName.CString()); manifest += "android:label=\"@string/app_name\"\n"; manifest += "android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"\n"; manifest += "android:configChanges=\"keyboardHidden|orientation\"\n"; manifest += "android:screenOrientation=\"landscape\">\n"; manifest += "<intent-filter>\n"; manifest += "<action android:name=\"android.intent.action.MAIN\" />\n"; manifest += "<category android:name=\"android.intent.category.LAUNCHER\" />\n"; manifest += "</intent-filter>\n"; manifest += "</activity>\n"; manifest += "</application>\n"; manifest += "</manifest>\n"; File file(context_, buildPath_ + "/AndroidManifest.xml", FILE_WRITE); if (!file.IsOpen()) return false; file.Write(manifest.CString(), manifest.Length()); return true; }