From 791de640743e377eb12e05772f3f4e9fcd707883 Mon Sep 17 00:00:00 2001 From: klugier Date: Sun, 6 Mar 2016 13:22:47 +0000 Subject: [PATCH] IDE now can launch apk on Android Virtual Devices git-svn-id: svn://ultimatepp.org/upp/trunk@9576 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ide/Android/AndroidSDK.cpp | 27 +++++++++++---------- uppsrc/ide/Android/Devices.h | 5 +++- uppsrc/ide/Builders/AndroidBuilder.icpp | 10 +++++++- uppsrc/ide/Debug.cpp | 32 ++++++++++++++++--------- uppsrc/ide/ide.lay | 3 ++- 5 files changed, 50 insertions(+), 27 deletions(-) diff --git a/uppsrc/ide/Android/AndroidSDK.cpp b/uppsrc/ide/Android/AndroidSDK.cpp index cbfbf0040..fca2c94fc 100644 --- a/uppsrc/ide/Android/AndroidSDK.cpp +++ b/uppsrc/ide/Android/AndroidSDK.cpp @@ -101,20 +101,21 @@ Vector AndroidSDK::FindDevices() const Vector elements = Split(lines[i], " "); for(int j = 0; j < elements.GetCount(); j++) { - if(j == 0) { + if(j == 0) device.SetSerial(elements[j]); - continue; - } - - Vector element = Split(elements[j], ":"); - if(element.GetCount() == 2) { - String tag = element[0]; - String data = element[1]; - if(tag == "usb") - device.SetUsb(data); - else - if(tag == "model") - device.SetModel(data); + else if(j == 1) + device.SetState(elements[j]); + else { + Vector element = Split(elements[j], ":"); + if(element.GetCount() == 2) { + String tag = element[0]; + String data = element[1]; + if(tag == "usb") + device.SetUsb(data); + else + if(tag == "model") + device.SetModel(data); + } } } devices.Add(device); diff --git a/uppsrc/ide/Android/Devices.h b/uppsrc/ide/Android/Devices.h index 8b0b6d882..0ca4957ff 100644 --- a/uppsrc/ide/Android/Devices.h +++ b/uppsrc/ide/Android/Devices.h @@ -12,19 +12,22 @@ public: public: String GetSerial() const { return serial; } + String GetState() const { return state; } String GetUsb() const { return usb; } String GetModel() const { return model; } void SetSerial(const String& serial) { this->serial = serial; } + void SetState(const String& state) { this->state = state; } void SetUsb(const String& usb) { this->usb = usb; } void SetModel(const String& model) { this->model = model; } public: - bool IsEmulator() const { return model.IsEmpty(); } + bool IsEmulator() const { return !usb.IsEmpty(); } bool IsPhysicalDevice() const { return !IsEmulator(); } private: String serial; + String state; String usb; String model; }; diff --git a/uppsrc/ide/Builders/AndroidBuilder.icpp b/uppsrc/ide/Builders/AndroidBuilder.icpp index 7a8ff2043..3369e21c2 100644 --- a/uppsrc/ide/Builders/AndroidBuilder.icpp +++ b/uppsrc/ide/Builders/AndroidBuilder.icpp @@ -504,6 +504,12 @@ bool AndroidBuilder::SignApk(const String& target, const String& unsignedApkPath DeleteFile(signedApkPath); String jarsignerCmd; jarsignerCmd << NormalizeExePath(jdk.GetJarsignerPath()); + + // Up to Java 6.0 below alogirms was by default + // (In Java 7.0 and above we need to manually specific this algorithms) + jarsignerCmd << " -sigalg SHA1withRSA"; + jarsignerCmd << " -digestalg SHA1"; + jarsignerCmd << " -keystore " + keystorePath; jarsignerCmd << " -storepass android"; jarsignerCmd << " -keypass android"; @@ -547,7 +553,9 @@ bool AndroidBuilder::GenerateDebugKey(const String& keystorePath) keytoolCmd << NormalizeExePath(jdk.GetKeytoolPath()); keytoolCmd << " -genkeypair -alias androiddebugkey -keypass android"; keytoolCmd << " -keystore " << keystorePath; - keytoolCmd << " -storepass android -dname \"CN=Android Debug,O=Android,C=US\" -validity 100000"; + keytoolCmd << " -storepass android -dname \"CN=Android Debug,O=Android,C=US\""; + keytoolCmd << " -keyalg RSA"; + keytoolCmd << " -validity 100000"; //PutConsole(keytoolCmd); if(Execute(keytoolCmd, ss) != 0) { PutConsole(ss.GetResult()); diff --git a/uppsrc/ide/Debug.cpp b/uppsrc/ide/Debug.cpp index 988b22671..b44c12963 100644 --- a/uppsrc/ide/Debug.cpp +++ b/uppsrc/ide/Debug.cpp @@ -152,7 +152,9 @@ public: String GetSelectedSerial() const; private: - void LoadPhysicalDevices(); + void LoadDevices(); + + void OnRefresh(); private: AndroidSDK* sdk; @@ -163,33 +165,41 @@ SelectAndroidDeviceDlg::SelectAndroidDeviceDlg(AndroidSDK* sdk) : { CtrlLayoutOKCancel(*this, "Android device selection"); - devicesArray.AddColumn("Device/Model"); - devicesArray.AddColumn("Serial"); + devicesArray.AddColumn("Serial Number"); + devicesArray.AddColumn("State"); - LoadPhysicalDevices(); + refresh <<= THISBACK(OnRefresh); + + LoadDevices(); } String SelectAndroidDeviceDlg::GetSelectedSerial() const { int row = devicesArray.IsCursor() ? devicesArray.GetCursor() : 0; - return devicesArray.GetCount() ? devicesArray.Get(row, 1) : ""; + return devicesArray.GetCount() ? devicesArray.Get(row, 0) : ""; } -void SelectAndroidDeviceDlg::LoadPhysicalDevices() +void SelectAndroidDeviceDlg::LoadDevices() { Vector devices = sdk->FindDevices(); for(int i = 0; i < devices.GetCount(); i++) { - if(devices[i].IsPhysicalDevice()) { - devicesArray.Add(devices[i].GetModel(), devices[i].GetSerial()); - } + devicesArray.Add(devices[i].GetSerial(), devices[i].GetState()); } - if(devicesArray.GetCount()) - devicesArray.Select(0); + if(devicesArray.GetCount()) { + devicesArray.GoBegin(); + ok.Enable(); + } else ok.Disable(); } +void SelectAndroidDeviceDlg::OnRefresh() +{ + devicesArray.Clear(); + LoadDevices(); +} + void Ide::ExecuteApk() { AndroidSDK sdk(GetAndroidSdkPath(), true); diff --git a/uppsrc/ide/ide.lay b/uppsrc/ide/ide.lay index 075e81b90..bcecc6d37 100644 --- a/uppsrc/ide/ide.lay +++ b/uppsrc/ide/ide.lay @@ -777,9 +777,10 @@ LAYOUT(JumpLayout, 692, 496) END_LAYOUT LAYOUT(SelectAndroidDeviceLayout, 432, 228) - ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(72, 64).BottomPosZ(4, 24)) + ITEM(Button, refresh, SetLabel(t_("Refresh")).LeftPosZ(4, 64).BottomPosZ(4, 24)) ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(4, 24)) ITEM(ArrayCtrl, devicesArray, AutoHideSb(true).HSizePosZ(4, 4).TopPosZ(4, 192)) + ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(72, 64).BottomPosZ(4, 24)) END_LAYOUT LAYOUT(RenamePackageLayout, 228, 100)