1 #ifndef _Android_Android_h_
2 #define _Android_Android_h_
3 
4 #include <Core/Core.h>
5 #include <ide/Core/Core.h>
6 
7 #include "Executables.h"
8 #include "Devices.h"
9 
10 namespace Upp {
11 
12 class Android {
13 public:
14 	static String GetScriptExt();
15 	static String GetCmdExt();
16 
17 	static void NormalizeVersions(Vector<String>& versions);
18 	static void RemoveVersionsNormalization(Vector<String>& versions);
19 
20 private:
21 	static String FindVersionsPrefix(const Vector<String>& versions);
22 	static String FindLongestVersion(const Vector<String>& versions);
23 
24 private:
25 	Android();
26 	Android(const Android&);
27 	Android& operator=(const Android&);
28 	virtual ~Android();
29 };
30 
31 class AndroidSDK {
32 public:
33 	static String GetDownloadUrl();
34 
35 public:
36 	AndroidSDK();
37 	AndroidSDK(const String& path, bool deduceValues = false);
38 	virtual ~AndroidSDK();
39 
40 	void DeducePathReleatedValues();
41 	void DeducePlatform();
42 	void DeduceBuildToolsRelease();
43 
44 	bool Validate() const;
45 	bool ValidatePlatform() const;
46 	bool ValidateBuildTools() const;
47 
48 	Vector<String> FindPlatforms() const;
49 	Vector<String> FindBuildToolsReleases() const;
50 	String         FindDefaultPlatform() const;
51 	String         FindDefaultBuildToolsRelease() const;
52 
53 	Vector<AndroidDevice>        FindDevices() const;
54 	Vector<AndroidVirtualDevice> FindVirtualDevices() const;
55 
56 public:
MakeAdb()57 	Adb MakeAdb() const { return Adb(AdbPath()); }
58 
59 public:
60 	String BinDir() const;
61 	String BuildToolsDir() const;
62 	String PlatformsDir() const;
63 	String ConcreteBuildToolsDir() const;
64 	String ConcretePlatformDir() const;
65 	String PlatformToolsDir() const;
66 	String ToolsDir() const;
67 
AaptPath()68 	String AaptPath() const       { return ConcreteBuildToolsDir() + DIR_SEPS + "aapt" + GetExeExt(); }
DxPath()69 	String DxPath() const         { return ConcreteBuildToolsDir() + DIR_SEPS + "dx" + Android::GetScriptExt(); }
ZipalignPath()70 	String ZipalignPath() const   { return ConcreteBuildToolsDir() + DIR_SEPS + "zipalign" + GetExeExt(); }
AndroidJarPath()71 	String AndroidJarPath() const { return ConcretePlatformDir() + DIR_SEPS + "android.jar"; }
AdbPath()72 	String AdbPath() const        { return PlatformToolsDir() + DIR_SEPS + "adb" + GetExeExt(); }
AndroidPath()73 	String AndroidPath() const    { return ToolsDir() + DIR_SEPS + "android" + Android::GetScriptExt(); }
EmulatorPath()74 	String EmulatorPath() const   { return ToolsDir() + DIR_SEPS + "emulator" + GetExeExt(); }
MonitorPath()75 	String MonitorPath() const    { return ToolsDir() + DIR_SEPS + "monitor" + Android::GetScriptExt(); }
76 
77 public:
GetLauchSDKManagerCmd()78 	String GetLauchSDKManagerCmd() const { return NormalizeExePath(AndroidPath()) + " sdk"; }
GetLauchAVDManagerCmd()79 	String GetLauchAVDManagerCmd() const { return NormalizeExePath(AndroidPath()) + " avd"; }
80 
81 public:
GetPath()82 	String GetPath() const              { return this->path; }
GetPlatform()83 	String GetPlatform() const          { return this->platform; }
GetBuildToolsRelease()84 	String GetBuildToolsRelease() const { return this->buildToolsRelease; }
85 
SetPath(const String & path)86 	void SetPath(const String& path)                           { this->path = path; }
SetPlatform(const String & platform)87 	void SetPlatform(const String& platform)                   { this->platform = platform; }
SetBuildToolsRelease(const String & buildToolsRelease)88 	void SetBuildToolsRelease(const String& buildToolsRelease) { this->buildToolsRelease = buildToolsRelease; }
89 
90 private:
91 	String path;
92 	String platform;
93 	String buildToolsRelease;
94 };
95 
96 class AndroidNDK {
97 public:
98 	static String GetDownloadUrl();
99 
100 public:
101 	AndroidNDK();
102 	AndroidNDK(const String& path);
103 	virtual ~AndroidNDK();
104 
105 	bool Validate() const;
106 
107 	String FindDefaultPlatform() const;
108 	String FindDefaultToolchain() const;
109 	String FindDefaultCppRuntime() const;
110 
111 	Vector<String> FindPlatforms() const;
112 	Vector<String> FindToolchains() const;
113 	Vector<String> FindCppRuntimes() const;
114 
115 public:
116 	String GetIncludeDir() const;
117 	String GetCppIncludeDir(const String& cppRuntime) const;
118 
GetPlatformsDir()119 	String GetPlatformsDir() const  { return path + DIR_SEPS + "platforms"; }
GetToolchainsDir()120 	String GetToolchainsDir() const { return path + DIR_SEPS + "toolchains"; }
GetSourcesDir()121 	String GetSourcesDir() const    { return path + DIR_SEPS + "sources"; }
122 
GetNdkBuildPath()123 	String GetNdkBuildPath() const  { return path + DIR_SEPS + "ndk-build" + Android::GetCmdExt(); }
GetGdbPath()124 	String GetGdbPath() const       { return path + DIR_SEPS + "ndk-gdb"; }
125 
126 public:
GetPath()127 	String GetPath() const { return this->path; }
128 
SetPath(const String & path)129 	void SetPath(const String& path) { this->path = path; }
130 
131 private:
132 	String path;
133 };
134 
135 class Apk {
136 public:
137 	Apk(const String& path, const AndroidSDK& androidSDK);
138 	virtual ~Apk();
139 
140 	String FindPackageName() const;
141 	String FindLaunchableActivity() const;
142 
143 private:
144 	String FindValueInAndroidManifest(const String& badge, const String& tag) const;
145 	String FindBadgeTagValue(const String& badge, const String& tag) const;
146 
147 private:
148 	String path;
149 	AndroidSDK sdk;
150 };
151 
152 class AndroidManifest {
153 public:
154 	AndroidManifest();
155 	virtual ~AndroidManifest();
156 
157 private:
158 
159 };
160 
161 }
162 
163 #endif
164