Author: tberghammer Date: Wed Aug 12 06:10:19 2015 New Revision: 244737 URL: http://llvm.org/viewvc/llvm-project?rev=244737&view=rev Log: Fetch SDK version from PlatformAndroid
The SDK version implies the features supported by a given android device. This version number will be used in future changes to execute the right command on the device. Differential revision: http://reviews.llvm.org/D11935 Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp?rev=244737&r1=244736&r2=244737&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp (original) +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp Wed Aug 12 06:10:19 2015 @@ -13,6 +13,7 @@ #include "lldb/Core/Log.h" #include "lldb/Core/PluginManager.h" #include "lldb/Host/HostInfo.h" +#include "lldb/Host/StringConvert.h" #include "Utility/UriParser.h" // Project includes @@ -133,7 +134,8 @@ PlatformAndroid::CreateInstance (bool fo } PlatformAndroid::PlatformAndroid (bool is_host) : - PlatformLinux(is_host) + PlatformLinux(is_host), + m_sdk_version(0) { } @@ -257,3 +259,46 @@ PlatformAndroid::DownloadModuleSlice (co return GetFile (src_file_spec, dst_file_spec); } + +Error +PlatformAndroid::DisconnectRemote() +{ + Error error = PlatformLinux::DisconnectRemote(); + if (error.Success()) + { + m_device_id.clear(); + m_sdk_version = 0; + } + return error; +} + +uint32_t +PlatformAndroid::GetSdkVersion() +{ + if (!IsConnected()) + return 0; + + if (m_sdk_version != 0) + return m_sdk_version; + + int status = 0; + std::string version_string; + Error error = RunShellCommand("getprop ro.build.version.sdk", + GetWorkingDirectory(), + &status, + nullptr, + &version_string, + 1); + if (error.Fail() || status != 0 || version_string.empty()) + { + Log* log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_PLATFORM); + if (log) + log->Printf("Get SDK version failed. (status: %d, error: %s, output: %s)", + status, error.AsCString(), version_string.c_str()); + return 0; + } + version_string.erase(version_string.size() - 1); // Remove trailing new line + + m_sdk_version = StringConvert::ToUInt32(version_string.c_str()); + return m_sdk_version; +} Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h?rev=244737&r1=244736&r2=244737&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h (original) +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h Wed Aug 12 06:10:19 2015 @@ -73,6 +73,12 @@ namespace platform_android { const FileSpec& destination, uint32_t uid = UINT32_MAX, uint32_t gid = UINT32_MAX) override; + + uint32_t + GetSdkVersion(); + + Error + DisconnectRemote () override; protected: const char * @@ -86,6 +92,8 @@ namespace platform_android { private: std::string m_device_id; + uint32_t m_sdk_version; + DISALLOW_COPY_AND_ASSIGN (PlatformAndroid); }; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits