#ifndef _Android_Android_h_ #define _Android_Android_h_ #include #include #include "Executables.h" #include "Devices.h" namespace Upp { class Android { public: static String GetScriptExt(); static String GetCmdExt(); static void NormalizeVersions(Vector& versions); static void RemoveVersionsNormalization(Vector& versions); private: static String FindVersionsPrefix(const Vector& versions); static String FindLongestVersion(const Vector& versions); private: Android(); Android(const Android&); Android& operator=(const Android&); virtual ~Android(); }; class AndroidSDK { public: static String GetDownloadUrl(); public: AndroidSDK(); AndroidSDK(const String& path, bool deduceValues = false); virtual ~AndroidSDK(); void DeducePathReleatedValues(); void DeducePlatform(); void DeduceBuildToolsRelease(); bool Validate() const; bool ValidatePlatform() const; bool ValidateBuildTools() const; Vector FindPlatforms() const; Vector FindBuildToolsReleases() const; String FindDefaultPlatform() const; String FindDefaultBuildToolsRelease() const; Vector FindDevices() const; Vector FindVirtualDevices() const; public: Adb MakeAdb() const { return Adb(AdbPath()); } public: String BuildToolsDir() const; String PlatformsDir() const; String ConcreteBuildToolsDir() const; String ConcretePlatformDir() const; String PlatformToolsDir() const; String ToolsDir() const; String AaptPath() const { return ConcreteBuildToolsDir() + DIR_SEPS + "aapt" + GetExeExt(); } String DxPath() const { return ConcreteBuildToolsDir() + DIR_SEPS + "dx" + Android::GetScriptExt(); } String ZipalignPath() const { return ConcreteBuildToolsDir() + DIR_SEPS + "zipalign" + GetExeExt(); } String AndroidJarPath() const { return ConcretePlatformDir() + DIR_SEPS + "android.jar"; } String AdbPath() const { return PlatformToolsDir() + DIR_SEPS + "adb" + GetExeExt(); } String AndroidPath() const { return ToolsDir() + DIR_SEPS + "android" + Android::GetScriptExt(); } String EmulatorPath() const { return ToolsDir() + DIR_SEPS + "emulator" + GetExeExt(); } String MonitorPath() const { return ToolsDir() + DIR_SEPS + "monitor" + Android::GetScriptExt(); } public: String GetLauchSDKManagerCmd() const { return NormalizeExePath(AndroidPath()) + " sdk"; } String GetLauchAVDManagerCmd() const { return NormalizeExePath(AndroidPath()) + " avd"; } public: String GetPath() const { return this->path; } String GetPlatform() const { return this->platform; } String GetBuildToolsRelease() const { return this->buildToolsRelease; } void SetPath(const String& path) { this->path = path; } void SetPlatform(const String& platform) { this->platform = platform; } void SetBuildToolsRelease(const String& buildToolsRelease) { this->buildToolsRelease = buildToolsRelease; } private: String path; String platform; String buildToolsRelease; }; class AndroidNDK { public: static String GetDownloadUrl(); public: AndroidNDK(); AndroidNDK(const String& path); virtual ~AndroidNDK(); bool Validate() const; String FindDefaultPlatform() const; String FindDefaultToolchain() const; String FindDefaultCppRuntime() const; Vector FindPlatforms() const; Vector FindToolchains() const; Vector FindCppRuntimes() const; public: String GetIncludeDir() const; String GetCppIncludeDir(const String& cppRuntime) const; String GetPlatformsDir() const { return path + DIR_SEPS + "platforms"; } String GetToolchainsDir() const { return path + DIR_SEPS + "toolchains"; } String GetSourcesDir() const { return path + DIR_SEPS + "sources"; } String GetNdkBuildPath() const { return path + DIR_SEPS + "ndk-build" + Android::GetCmdExt(); } String GetGdbPath() const { return path + DIR_SEPS + "ndk-gdb"; } public: String GetPath() const { return this->path; } void SetPath(const String& path) { this->path = path; } private: String path; }; class Apk { public: Apk(const String& path, const AndroidSDK& androidSDK); virtual ~Apk(); String FindPackageName() const; String FindLaunchableActivity() const; private: String FindValueInAndroidManifest(const String& badge, const String& tag) const; String FindBadgeTagValue(const String& badge, const String& tag) const; private: String path; AndroidSDK sdk; }; class AndroidManifest { public: AndroidManifest(); virtual ~AndroidManifest(); private: }; } #endif