From 0a0448ab97c9eade2fc72683d2e967227a9bfc32 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 16:58:37 +0530 Subject: [PATCH 01/44] Android Emulator client --- .../pom.xml | 0 .../pom.xml | 57 ++ .../Constants.java | 39 + .../org.carbon.android.emulator/TryIt.java | 858 ++++++++++++++++++ .../TryItEmulator.java | 75 ++ .../src/assembly/src.xml | 5 +- .../main/resources/android-tryit/README.md | 6 +- .../src/main/resources/android-tryit/start | 244 ----- .../resources/android-tryit/startEmulator.bat | 18 + .../resources/android-tryit/startEmulator.sh | 24 + 10 files changed, 1077 insertions(+), 249 deletions(-) delete mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java delete mode 100755 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.analytics/pom.xml deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml new file mode 100644 index 000000000..31e87f5cb --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml @@ -0,0 +1,57 @@ + + + + + + android-plugin + org.wso2.carbon.devicemgt-plugins + 4.0.2-SNAPSHOT + ../pom.xml + + + 4.0.0 + org.wso2.carbon.device.mgt.mobile.android.emulator + AndroidTryIt Emulator + Android Virtual Device + + + EmulatorJava + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + true + lib/ + org.carbon.android.emulator.TryIt + + + ../org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit + + + + + + diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java new file mode 100644 index 000000000..c3ccaabb9 --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* WSO2 Inc. licenses this file to you under the Apache License, +* Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +package org.carbon.android.emulator; + +/** + * This class has the constant strings used and the system properties. + */ +class Constants { + static final String OS_NAME_PROPERTY = "os.name"; + static final String USER_HOME_PROPERTY = "user.home"; + static final String USER_DIRECTORY_PROPERTY = "user.dir"; + static final String MAC_OS = "macosx"; + static final String WINDOWS_OS = "windows"; + static final String WINDOWS_EXTENSION_EXE = ".exe"; + static final String WINDOWS_EXTENSION_BAT = ".bat"; + static final String NAME = "name="; + static final String SDK_TOOLS_URL = "sdk_tools_url"; + static final String PLATFORM_TOOLS_URL = "platform_tools_url"; + static final String BUILD_TOOL_URL = "build_tools_url"; + static final String PLATFORM_URL = "platform_url"; + static final String SYSTEM_IMAGE_URL = "sys_img_url"; + static final String HAXM_URL = "haxm_url"; +} diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java new file mode 100644 index 000000000..3dbe0cbbc --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -0,0 +1,858 @@ +/* +* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* WSO2 Inc. licenses this file to you under the Apache License, +* Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +package org.carbon.android.emulator; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Scanner; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * This class creates an Android TryIt Emulator to be used as virtual device to connect to WSO2 IOT Cloud + * or Product-iot. + */ +public class TryIt { + private String osSuffix; + private String androidSdkHome; + private String userHome; + private String workingDirectory; + private File sdkLocationFile; // file in which SDK location is written + private String adbLocation; // location of executable file abd + private String emulatorLocation; // location of executable file emulator + + /** + * This method gets the system specific variables. + */ + private TryIt() { + osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY).toLowerCase(); + userHome = System.getProperty(Constants.USER_HOME_PROPERTY); + workingDirectory = System.getProperty(Constants.USER_DIRECTORY_PROPERTY); + + if (osSuffix.contains(Constants.WINDOWS_OS)) { + osSuffix = Constants.WINDOWS_OS; + } + if (osSuffix.contains("mac")) { + osSuffix = Constants.MAC_OS; + } + System.out.println("Detected OS " + osSuffix); + } + + /** + * This method creates an android virtual device. + * + * @param args commandline arguments. + */ + public static void main(String[] args) { + + TryIt tryIt = new TryIt(); + tryIt.setAndroidSDK(); + tryIt.checkBuildTools(); + + try { + tryIt.startAVD(); + } catch (IOException e) { + tryIt.handleException("Unable to start AVD", e); + } + + try { + tryIt.checkEmulatorBoot(); + } catch (IOException e) { + tryIt.handleException("Emulator boot process failure", e); + } + + String[] agents = new String[2]; + + try { + agents = tryIt.checkForAgent(); + } catch (IOException ignored) { + // can continue installing agent again + } + System.out.println("Starting Agent ..."); + try { + tryIt.startPackage(agents); + } catch (IOException e) { + tryIt.handleException("Unable to start WSO2 package", e); + } + Process startShell = null; + ProcessBuilder startShellProcessBuilder = new ProcessBuilder(tryIt.adbLocation, "shell"); + try { + startShellProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); + startShellProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); + startShell = startShellProcessBuilder.start(); + } catch (IOException ignored) { + //can continue + } + System.out.println("Connected to device shell"); + try { + if (startShell != null) { + startShell.waitFor(); + } + } catch (InterruptedException ignored) { + // Interrupted if AVD is closed only. + } + System.out.println("Good Bye!"); + } + + /** + * This method downloads the files. + * + * @param path - the URL to download from. + * @param folderName - the folder location to download the files to. + */ + private void downloadArtifacts(String path, String folderName) { + ReadableByteChannel rbc = null; + FileOutputStream fos = null; + URL url = null; + + try { + url = new URL(path); + } catch (MalformedURLException e) { + handleException("Downloading " + folderName + " failed.", e); + } + + try { + if (url != null) { + rbc = Channels.newChannel(url.openStream()); + } + fos = new FileOutputStream(folderName); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + } catch (IOException e) { + if (!new File(folderName).delete()) { + System.out.println("Delete " + folderName + " and try again"); + } + handleException("Downloading " + folderName + " failed.", e); + } finally { + try { + if (fos != null) { + fos.close(); + } + if (rbc != null) { + rbc.close(); + } + } catch (IOException ignored) { + // File close exception ignored + } + } + } + + + /** + * This method validates the Android SDK location provided by the user and write it to the file + * sdkLocationFile. + */ + private void setSDKPath() { + System.out.println("Please provide android SDK location"); + String response = new Scanner(System.in, "UTF-8").next(); + String emulatorLocationPath = response + File.separator + "tools" + File.separator + "emulator"; + + if (osSuffix.equals(Constants.WINDOWS_OS)) { // windows emulator location ends with .bat + emulatorLocationPath += Constants.WINDOWS_EXTENSION_BAT; + } + + if (new File(emulatorLocationPath).exists()) { + Writer writer = null; + try { + writer = new OutputStreamWriter(new FileOutputStream(sdkLocationFile), StandardCharsets.UTF_8); + } catch (FileNotFoundException e) { + System.out.println("Unable to write the sdkLocation to file "); + } + try { + if (writer != null) { + writer.write(response); + } + } catch (IOException e) { + androidSdkHome = response; + System.out.println("Unable to write the sdkLocation to file "); + e.printStackTrace(); + } finally { + try { + if (writer != null) { + writer.close(); + } + } catch (IOException ignored) { + // writer close + } + } + } else { + System.out.println("Invalid SDK location"); + setSDKPath(); + } + } + + + /** + * This method creates a folder named android-sdk and downloads the minimum tools for SDK + * and write the sdk-location to the file sdkLocationFile. + */ + private void getAndroidSDK() { + String androidSdkFolderName = "android-sdk"; + + //noinspection ResultOfMethodCallIgnored + new File(workingDirectory + File.separator + androidSdkFolderName).mkdir(); + + androidSdkHome = workingDirectory + File.separator + androidSdkFolderName; + + getTools(System.getProperty(Constants.SDK_TOOLS_URL), "_Android-sdk-tools.zip"); + + getTools(System.getProperty(Constants.PLATFORM_TOOLS_URL), "_Android-platform-tools.zip"); + + Writer writer = null; + try { + writer = new OutputStreamWriter(new FileOutputStream(sdkLocationFile), StandardCharsets.UTF_8); + } catch (FileNotFoundException e) { + System.out.println("Unable to write the sdkLocation to file "); + } + try { + if (writer != null) { + writer.write(androidSdkHome); + } + } catch (IOException e) { + System.out.println("Unable to write the sdkLocation to file "); + e.printStackTrace(); + } finally { + try { + if (writer != null) { + writer.close(); + } + } catch (IOException ignored) { + // writes close + } + } + } + + /** + * This method downloads and extracts the tools. + * + * @param url - the URL to download from. + * @param folderName - the folder name where to download. + */ + private void getTools(String url, String folderName) { + System.out.println("Downloading " + folderName); + downloadArtifacts(url, androidSdkHome + File.separator + folderName); + System.out.println("Configuring " + folderName); + extractFolder(androidSdkHome + File.separator + folderName); + } + + /** + * This method starts the AVD specified by the user. + * + * @throws IOException process throws if an I/O error occurs. + */ + private void startAVD() throws IOException { + String wso2AvdLocation = userHome + File.separator + ".android" + File.separator + "avd" + File.separator + + "WSO2_AVD.avd"; + + checkForPlatform(); + checkForSystemImages(); + + if (!new File(wso2AvdLocation).isDirectory()) { + Scanner read = new Scanner(System.in, "UTF-8"); + System.out.println("Do you want to create WSO2_AVD with default configs (Y/n)?: "); + if (read.next().toLowerCase().matches("y")) { + createAVD(); + return; + } + } + + System.out.println("+----------------------------------------------------------------+"); + System.out.println("| WSO2 Android TryIt |"); + System.out.println("+----------------------------------------------------------------+"); + + emulatorLocation = androidSdkHome + File.separator + "tools" + File.separator + "emulator"; + + if (osSuffix.equals(Constants.WINDOWS_OS)) { + emulatorLocation += Constants.WINDOWS_EXTENSION_EXE; + } + setExecutePermission(emulatorLocation); + + ProcessBuilder listAVDsProcessBuilder = new ProcessBuilder(emulatorLocation, "-list-avds"); + Process listAVDsProcess = listAVDsProcessBuilder.start(); + + ArrayList devices = new ArrayList<>(); + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream() + , StandardCharsets.UTF_8)); + String readLine; + while ((readLine = reader.readLine()) != null) { + devices.add(readLine); + } + } finally { + if (reader != null) { + reader.close(); + } + } + + if (devices.size() == 0) { + System.out.println("No AVDs available in the system "); + startAVD(); + } else if (devices.size() == 1) { + runEmulator(devices.get(0)); + } else { + System.out.println("\nAvailable AVDs in the system\n"); + int count = 1; + for (String device : devices) { + System.out.println(count + " - - " + device); + count++; + } + System.out.print("\nEnter AVD number to start (eg: 1) :"); + Scanner read = new Scanner(System.in, "UTF-8"); + int avdNo = read.nextInt(); + runEmulator(devices.get(--avdNo)); + } + } + + /** + * This method creates WSO2_AVD with the specific configurations. + * + * @throws IOException process throws if an I/O error occurs. + */ + private void createAVD() throws IOException { + String avdManagerPath = androidSdkHome + File.separator + "tools" + File.separator + "bin" + + File.separator + "avdmanager"; + String androidPath = androidSdkHome + File.separator + "tools" + File.separator + "android"; + String configFileLocation = workingDirectory + File.separator + "resources" + File.separator + "config.ini"; + String wso2ConfigFile = userHome + File.separator + ".android" + File.separator + "avd" + File.separator + + "WSO2_AVD.avd" + File.separator + "config.ini"; + + if (osSuffix.equals(Constants.WINDOWS_OS)) { + avdManagerPath += Constants.WINDOWS_EXTENSION_BAT; + } + if (osSuffix.equals(Constants.WINDOWS_OS)) { + androidPath += Constants.WINDOWS_EXTENSION_BAT; + } + setExecutePermission(androidPath); + + System.out.println("Creating a new AVD device"); + + if (new File(avdManagerPath).exists()) { + setExecutePermission(avdManagerPath); + ProcessBuilder createAvdProcessBuilder = new ProcessBuilder(avdManagerPath, "create", "avd", "-k", + "system-images;android-23;default;x86", "-n", "WSO2_AVD"); + + createAvdProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); + createAvdProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); + + Process createAvdProcess = createAvdProcessBuilder.start(); + + try { + createAvdProcess.waitFor(); + } catch (InterruptedException e) { + handleException("Unable to create new AVD", e); + } + } else { + ProcessBuilder createAvd = new ProcessBuilder(androidPath, "create", "avd", "-n", "WSO2_AVD", + "-t", "android-23"); + + createAvd.redirectInput(ProcessBuilder.Redirect.INHERIT); + createAvd.redirectOutput(ProcessBuilder.Redirect.INHERIT); + + Process createAvdProcess = createAvd.start(); + + try { + createAvdProcess.waitFor(); + } catch (InterruptedException e) { + handleException("Unable to create new AVD", e); + } + } + Files.copy(Paths.get(configFileLocation), Paths.get(wso2ConfigFile), StandardCopyOption.REPLACE_EXISTING); + startAVD(); + } + + /** + * This method runs the Android Emulator for the name specified by deviceId. + * + * @param deviceId String name of the device. + * @throws IOException process start throws if an I/O error occurs. + */ + private void runEmulator(String deviceId) throws IOException { + + // mac os and windows needs hardware_Accelerated_execution_Manager + if (osSuffix.equals(Constants.MAC_OS) || osSuffix.equals(Constants.WINDOWS_OS)) { + installHAXM(); + } + System.out.println("Starting : " + deviceId); + startEmulator(deviceId); + checkCacheImg(deviceId); + } + + /** + * This method checks for the availability of android build tools in SDK location to run the AVD. + */ + private void checkBuildTools() { + File buildTools = new File(androidSdkHome + File.separator + "build-tools" + + File.separator + "25.0.2"); + + if (!buildTools.exists()) { + getTools(System.getProperty(Constants.BUILD_TOOL_URL), "_Android-build-tool.zip"); + + File buildTool = new File(androidSdkHome + File.separator + "android-7.1.1"); + + //noinspection ResultOfMethodCallIgnored + new File(androidSdkHome + File.separator + "build-tools").mkdir(); + //noinspection ResultOfMethodCallIgnored + buildTool.renameTo(new File(androidSdkHome + File.separator + "build-tools" + + File.separator + "25.0.2")); + } + } + + /** + * This method halts the system until the emulator is fully booted + * if boot process is not completed successfully, rest of the tasks won't be continued. + * + * @throws IOException process throws if an I/O error occurs. + */ + private void checkEmulatorBoot() throws IOException { + BufferedReader reader; + String readLine; + Boolean sysBootComplete = false; + + do { + ProcessBuilder systemBoot = new ProcessBuilder(adbLocation, "shell", "getprop", + "sys.boot_completed"); + Process systemBootProcess = systemBoot.start(); + try { + systemBootProcess.waitFor(); + } catch (InterruptedException e) { + handleException("System boot process interuppted", e); + } + reader = new BufferedReader(new InputStreamReader(systemBootProcess.getInputStream(), + StandardCharsets.UTF_8)); + while ((readLine = reader.readLine()) != null) { + // if boot process is success the process gives 1 as output + if (readLine.contains("1")) { + sysBootComplete = true; + } + } + System.out.print("."); + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + // ignored + } finally { + reader.close(); + } + } while (!sysBootComplete); + System.out.println(); + } + + /** + * This method gets the Android SDK location if available and sets the SDK path else downloads the SDK. + */ + private void setAndroidSDK() { + sdkLocationFile = new File("sdkLocation"); + + if (!(sdkLocationFile.exists() && !sdkLocationFile.isDirectory())) { + Scanner read = new Scanner(System.in, "UTF-8"); + System.out.println("Do you have an Android SDK installed on your computer (y/N)?: "); + String response = read.next().toLowerCase(); + if (response.matches("y")) { + setSDKPath(); + } else { + getAndroidSDK(); + } + } + // writes the Android SDK location to sdkLocationFile file + Scanner scanner = null; + try { + scanner = new Scanner(sdkLocationFile, "UTF-8"); + androidSdkHome = scanner.useDelimiter("\\Z").next(); + } catch (FileNotFoundException ignored) { + System.out.println("sdkLocation file not found"); + // already written to androidSdkHome + } finally { + if (scanner != null) { + scanner.close(); + } + } + + adbLocation = androidSdkHome + File.separator + "platform-tools" + File.separator + "adb"; + if (osSuffix.equals(Constants.WINDOWS_OS)) { + adbLocation += Constants.WINDOWS_EXTENSION_EXE; + } + setExecutePermission(adbLocation); + } + + /** + * this method prints the exception and terminate the program. + * + * @param message -exception method to be printed + * @param ex - exception caught + */ + private void handleException(String message, Exception ex) { + System.out.println(message); + ex.printStackTrace(); + System.exit(0); + } + + /** + * This method check for the android agent in the specified AVD and installs it if not available. + * + * @return package name and act name. + * @throws IOException process throws if an I/O error occurs. + */ + private String[] checkForAgent() throws IOException { + String apkFileLocation = workingDirectory + File.separator + "resources" + File.separator + "android-agent.apk"; + String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator + "25.0.2" + + File.separator + "aapt"; + + if (osSuffix.equals(Constants.WINDOWS_OS)) { + aaptLocation += Constants.WINDOWS_EXTENSION_EXE; + } + setExecutePermission(aaptLocation); + + //process to get the name of package and launchable-activity available in android agent apk file + ProcessBuilder badgingApkFileProcessBuilder = new ProcessBuilder(aaptLocation, "d", "badging", + apkFileLocation); + Process badgingApkFileProcess = badgingApkFileProcessBuilder.start(); + + String pkg = null; + String activity = null; + Boolean hasAgent = false; + String readLine; + BufferedReader reader = null; + + try { + reader = new BufferedReader(new InputStreamReader(badgingApkFileProcess.getInputStream(), + StandardCharsets.UTF_8)); + + + while ((readLine = reader.readLine()) != null) { + if (readLine.contains("package")) { + pkg = readLine.substring(readLine.indexOf(Constants.NAME) + 6).substring(0, + readLine.substring(readLine.indexOf(Constants.NAME) + + 6).indexOf("'")); + } + if (readLine.contains("launchable-activity")) { + activity = readLine.substring(readLine.indexOf(Constants.NAME) + 6).substring(0, + readLine.substring(readLine.indexOf(Constants.NAME) + + 6).indexOf("'")); + } + } + } finally { + if (reader != null) { + reader.close(); + } + } + + ProcessBuilder listPackages = new ProcessBuilder(adbLocation, "shell", "pm", "list", "packages"); + Process listPackagesProcess = listPackages.start(); + try { + listPackagesProcess.waitFor(); + } catch (InterruptedException e) { + System.out.println("Unable to read available packages in the current AVD"); + } + + try { + reader = new BufferedReader(new InputStreamReader(listPackagesProcess.getInputStream(), + StandardCharsets.UTF_8)); + + while ((readLine = reader.readLine()) != null) { + if (readLine.contains("package:" + pkg)) { + hasAgent = true; + } + } + } finally { + reader.close(); + } + + + if (!hasAgent) { + installAgent(); + } + return new String[]{pkg, activity}; + } + + /** + * This method installs the Android Agent ( WSO2 iot agent ). + * + * @throws IOException process start throws if an I/O error occurs. + */ + private void installAgent() throws IOException { + String androidAgentLocation = workingDirectory + File.separator + "resources" + File.separator + + "android-agent.apk"; + + System.out.println("Installing agent ..."); + ProcessBuilder installAgentProcessBuilder = new ProcessBuilder(adbLocation, "install", + androidAgentLocation); + Process installAgentProcess = installAgentProcessBuilder.start(); + + try { + installAgentProcess.waitFor(); + } catch (InterruptedException e) { + System.out.println("WSO2 Agent installation failed"); + installAgent(); + } + } + + /** + * This method starts the package (wso2.iot.agent). + * + * @param agents package name and launchable activity name. + * @throws IOException process throws if an I/O error occurs. + */ + private void startPackage(String[] agents) throws IOException { + String pkg = agents[0]; + String activity = agents[1]; + + ProcessBuilder pkgStartProcessBuilder = new ProcessBuilder(adbLocation, "shell", "am", "start", + "-n", pkg + "/" + activity); + Process pkgStartProcess = pkgStartProcessBuilder.start(); + + try { + pkgStartProcess.waitFor(); + } catch (InterruptedException e) { + handleException("Package start process interuptted", e); + } + } + + /** + * This method checks for the availability of Android Platform in SDK and if not available downloads it. + */ + private void checkForPlatform() { + File platform = new File(androidSdkHome + File.separator + "platforms" + File.separator + "android-23"); + + if (!platform.isDirectory()) { + getTools(System.getProperty(Constants.PLATFORM_URL), "_Android-platforms.zip"); + //noinspection ResultOfMethodCallIgnored + new File(androidSdkHome + File.separator + "platforms").mkdir(); + //noinspection ResultOfMethodCallIgnored + new File(androidSdkHome + File.separator + "android-6.0").renameTo(new File(androidSdkHome + + File.separator + "platforms" + File.separator + "android-23")); + } + } + + /** + * This method checks for the system images in the Android SDK and downloads if not available. + */ + private void checkForSystemImages() { + File systemImages = new File(androidSdkHome + File.separator + "system-images" + + File.separator + "android-23" + File.separator + "default"); + + if (!systemImages.isDirectory()) { + getTools(System.getProperty(Constants.SYSTEM_IMAGE_URL), "_sys-images.zip"); + //noinspection ResultOfMethodCallIgnored + new File(androidSdkHome + File.separator + "system-images" + File.separator + + "android-23" + File.separator + "default").mkdirs(); + //noinspection ResultOfMethodCallIgnored + new File(androidSdkHome + File.separator + "x86").renameTo(new File(androidSdkHome + + File.separator + "system-images" + File.separator + "android-23" + File.separator + + "default" + File.separator + "x86")); + } + } + + /** + * This method install Hardware_Accelerated Execution_Manager in mac and windows os. + */ + @SuppressWarnings("ResultOfMethodCallIgnored") + private void installHAXM() { + String haxmLocation = androidSdkHome + File.separator + "extras" + File.separator + "intel" + + File.separator + "Hardware_Accelerated_Execution_Manager"; + + if (!new File(haxmLocation).isDirectory()) { + System.out.println("Downloading intel HAXM..."); + + new File(haxmLocation).mkdirs(); + String folderName = "_haxm.zip"; + + downloadArtifacts(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator + + folderName); + System.out.println("Configuring HAXM..."); + extractFolder(haxmLocation + File.separator + folderName); + + String haxmInstaller = haxmLocation + File.separator + "silent_install"; + + if (osSuffix.equals(Constants.WINDOWS_OS)) { + haxmInstaller += Constants.WINDOWS_EXTENSION_BAT; + } else { + haxmInstaller += ".sh"; + } + setExecutePermission(haxmInstaller); + + ProcessBuilder processBuilder = new ProcessBuilder(haxmInstaller, "-m", "2048", "-log", + workingDirectory + File.separator + "haxmSilentRun.log"); + processBuilder.directory(new File(haxmLocation)); + processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); + processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); + Process process = null; + try { + process = processBuilder.start(); + } catch (IOException e) { + handleException("HAXM installation failed", e); + } + try { + if (process != null) { + process.waitFor(); + } + } catch (InterruptedException e) { + handleException("HAXM installation failed", e); + } + System.out.println("Please restart your machine and run again."); + System.exit(0); + } + } + + /** + * This method starts the Android emulator for specific device name. + * + * @param deviceId - name of the device to start the emulator. + */ + private void startEmulator(String deviceId) { + String qemuSystemFileLocation = androidSdkHome + File.separator + "tools" + File.separator + + "qemu" + File.separator; + + switch (osSuffix) { + case Constants.MAC_OS: + qemuSystemFileLocation += "darwin" + "-x86_64" + File.separator + "qemu-system-i386"; + break; + case Constants.WINDOWS_OS: + qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386.exe"; + break; + default: + qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386"; + } + setExecutePermission(qemuSystemFileLocation); + ExecutorService service = Executors.newSingleThreadExecutor(); + service.execute(new TryItEmulator(deviceId, emulatorLocation)); + } + + /** + * This method halts the system the cache.img file is created for the particular AVD started. + * + * @param deviceId - name of the AVD. + */ + private void checkCacheImg(String deviceId) { + File cacheImg = new File(userHome + File.separator + ".android" + + File.separator + "avd" + File.separator + deviceId + ".avd" + File.separator + "cache.img"); + + while (!cacheImg.exists()) { + System.out.print("."); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + handleException("Virtual device not loaded properly, process interuptted", e); + } + } + System.out.println(); + } + + /** + * This method sets the executable permission for the specified file, + * if the files are not the executable, the process cannot be continued. + * + * @param fileName name of the file to set execution permission. + */ + private void setExecutePermission(String fileName) { + if (!new File(fileName).canExecute()) { + if (!new File(fileName).setExecutable(true)) { + System.out.println("Set the Execute permission of : " + fileName + " to continue"); + System.exit(0); // if can't execute, unable to proceed + } + } + } + + /** + * This method extracts the zip folder. + * + * @param zipFile -Name of zip to extract + */ + private void extractFolder(String zipFile) { + int BUFFER = 2048; + File file = new File(zipFile); + ZipFile zip; + try { + zip = new ZipFile(file); + String newPath = zipFile.substring(0, zipFile.lastIndexOf(File.separator)); + + //noinspection ResultOfMethodCallIgnored + new File(newPath).mkdirs(); + + Enumeration zipFileEntries = zip.entries(); + + while (zipFileEntries.hasMoreElements()) { + // grab a zip file entry + ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); + String currentEntry = entry.getName(); + File destFile = new File(newPath, currentEntry); + File destinationParent = destFile.getParentFile(); + + if (destinationParent == null) { + destFile.mkdirs(); + continue; + } else { + //noinspection ResultOfMethodCallIgnored + destinationParent.mkdirs(); + } + + if (!entry.isDirectory()) { + BufferedInputStream is; + try { + is = new BufferedInputStream(zip.getInputStream(entry)); + int currentByte; + // establish buffer for writing file + byte data[] = new byte[BUFFER]; + + // write the current file to disk + FileOutputStream fos = new FileOutputStream(destFile); + BufferedOutputStream dest = new BufferedOutputStream(fos, + BUFFER); + + // read and write until last byte is encountered + while ((currentByte = is.read(data, 0, BUFFER)) != -1) { + dest.write(data, 0, currentByte); + } + dest.flush(); + dest.close(); + is.close(); + } catch (IOException e) { + e.printStackTrace(); + System.exit(0); + } + } + } + zip.close(); + } catch (IOException e) { + handleException("Extraction of " + zipFile + " failed", e); + } + if (!new File(zipFile).delete()) { + System.out.println("Downloaded zip : " + zipFile + " - not deleted"); + } + } +} diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java new file mode 100644 index 000000000..28fc0032f --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* WSO2 Inc. licenses this file to you under the Apache License, +* Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +package org.carbon.android.emulator; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; + +/** + * This class starts the Emulator with the name ID specified and log the output to emulator.log. + */ +public class TryItEmulator implements Runnable { + private String deviceId; // name of the AVD to start + private String emulatorLocation; // location of the executable file emulator + + TryItEmulator(String id, String emulator) { + deviceId = id; + emulatorLocation = emulator; + } + + public void run() { + String readLine; + BufferedReader reader = null; + Writer writer = null; + ProcessBuilder processBuilder = new ProcessBuilder(emulatorLocation, "-avd", deviceId); + try { + Process process = processBuilder.start(); + reader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8)); + writer = new OutputStreamWriter(new FileOutputStream(new File("emulator.log")), StandardCharsets.UTF_8); + while ((readLine = reader.readLine()) != null) { + writer.append(readLine); + writer.append(readLine); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ignored) { + // reader close exception ignored + } + } + if (writer != null) { + try { + writer.close(); + } catch (IOException ignored) { + // writer close exception ignored + } + } + + } + } +} diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml index 579924f81..32ddb83e1 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml @@ -43,13 +43,14 @@ true + ${basedir}/target/android-tryit.ZIP - /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ + /devicemgt/app/units/itcdmf.unit.device.type.android.type-view/public/assets/ 755 - \ No newline at end of file + diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md index e9c1f1123..51b790fb9 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md @@ -1,12 +1,12 @@ Prerequisites =============== -1. You should have curl in your computer. -2. Java 7 or higher. +1. Java 8. Instructions ================= -1. Run 'start' script in your terminal. +1. Run 'startEmulator' script in your terminal. + For windows run startEmulator.bat 2. If you already have android sdk in your computer, please provide location of the sdk. Otherwise this tool will download and install minimum SDK components which needs to run the emulator. This is a one time process. diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start deleted file mode 100755 index 86f26699e..000000000 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/start +++ /dev/null @@ -1,244 +0,0 @@ -#!/bin/bash - -#Make sure we have got everything we need -command -v curl >/dev/null || { echo "curl is not installed. Aborting." >&2; exit 1; } -command -v unzip >/dev/null || { echo "unzip is not installed. Aborting." >&2; exit 1; } - -SCRIPT_HOME=$PWD - -OS_SUFFIX="linux" -if [[ "$OSTYPE" == "darwin"* ]]; then - OS_SUFFIX="macosx" -fi - -downloadArtifacts() { - curl -D headers -O $1 - httpStatus=$(head -1 headers | awk '{print $2}') - [ "$httpStatus" != "200" ] && { echo "Download failed. Aborting." ; exit 1 ;} - rm headers - echo -} - -setSDKPath () { - echo -n "Please provide Android SDK location (ex: /mnt/tools/android-sdk):" - read answer - emulator="$answer/tools/emulator" - if [ -f "$emulator" ]; then - echo "$answer" > sdklocation - else - echo "Invalid SDK location" - setSDKPath - fi -} - -getAndroidSDK() { - echo - echo "Downloading Android SDK tools..." - mkdir android-sdk - cd android-sdk - - downloadArtifacts "https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip" - echo -n "Configuring Android SDK tools..." - unzip -q tools_r25.2.5-$OS_SUFFIX.zip - rm tools_r25.2.5-$OS_SUFFIX.zip - echo " Done!" - - echo - echo "Downloading Android platform tools..." - downloadArtifacts "http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip" - - echo -n "Configuring Android platform tools..." - unzip -q platform-tools_r25.0.3-$OS_SUFFIX.zip - rm platform-tools_r25.0.3-$OS_SUFFIX.zip - cd .. - echo "$PWD/android-sdk" > sdklocation - echo " Done!" -} - -createAVD() { - if [ ! -d "$ANDROID_TRYIT_SDK_HOME/platforms/android-23" ]; then - echo - echo "Downloading Android platform..." - cd $ANDROID_TRYIT_SDK_HOME - downloadArtifacts "https://dl.google.com/android/repository/platform-23_r03.zip" - echo -n "Configuring Android platform..." - unzip -q platform-23_r03.zip - mkdir -p platforms/android-23 - mv android-6.0/* platforms/android-23/ - rm -r android-6.0 - rm platform-23_r03.zip - cd .. - echo " Done!" - fi - if [ ! -d "$ANDROID_TRYIT_SDK_HOME/system-images/android-23/default" ]; then - echo "Downloading Android system image..." - cd $ANDROID_TRYIT_SDK_HOME - downloadArtifacts "https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip" - echo -n "Configuring Android system image..." - unzip -q x86-23_r09.zip - mkdir -p system-images/android-23/default - mv x86 system-images/android-23/default - rm x86-23_r09.zip - cd .. - echo " Done!" - fi - echo "Creating a new AVD device" - if [ -f "$ANDROID_TRYIT_SDK_HOME/tools/bin/avdmanager" ]; then - $ANDROID_TRYIT_SDK_HOME/tools/bin/avdmanager create avd -k 'system-images;android-23;default;x86' -n WSO2_AVD - else - $ANDROID_TRYIT_SDK_HOME/tools/android create avd -n WSO2_AVD -t android-23 - fi - rm $HOME/.android/avd/WSO2_AVD.avd/config.ini - cp $SCRIPT_HOME/resources/config.ini $HOME/.android/avd/WSO2_AVD.avd/ - startAVD -} - -startAVD() { - if [ ! -d "$HOME/.android/avd/WSO2_AVD.avd" ]; then - echo -n "Looks you don't have the WSO2_AVD. Do you want to create WSO2_AVD with default configs (Y/n)?: " - read answer - if ! echo "$answer" | grep -iq "^n" ;then - createAVD - return - fi - fi - echo - echo "------------------------------" - echo "Available AVDs in the system:" - echo "------------------------------" - devices=() - count=0 - if [ ! -f "mypipe" ]; then - mkfifo mypipe - fi - $ANDROID_TRYIT_SDK_HOME/tools/emulator -list-avds > mypipe & - while IFS= read -r line - do - let count++ - echo "$count) $line" - devices+=($line) - done < mypipe - rm mypipe - echo "------------------------------" - echo - if [ $count = 0 ]; then - echo -n "No AVDs found on your system. Do you want to create new AVD (Y/n)?: " - read answer - if echo "$answer" | grep -iq "^n" ;then - exit; - else - createAVD - fi - elif [ $count = 1 ]; then - runEmulator ${devices[0]} - else - echo -n "Enter AVD number to start (eg: 1): " - read answer - let answer-- - runEmulator ${devices[$answer]} - fi -} - -runEmulator(){ - if [ $OS_SUFFIX = "macosx" -a ! -d $ANDROID_TRYIT_SDK_HOME/extras/intel/Hardware_Accelerated_Execution_Manager ]; then - cd $ANDROID_TRYIT_SDK_HOME - echo "Downloading intel HAXM..." - mkdir -p extras/intel/Hardware_Accelerated_Execution_Manager - cd extras/intel/Hardware_Accelerated_Execution_Manager - downloadArtifacts "https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip" - echo -n "Configuring HAXM..." - unzip -q haxm-macosx_r6_0_5.zip - rm haxm-macosx_r6_0_5.zip - ./"HAXM installation" -m 2048 -log $SCRIPT_HOME/haxm_silent_run.log - echo " Done!" - echo "Please restart your computer and run this script again." - exit - fi - cd $SCRIPT_HOME - $ANDROID_TRYIT_SDK_HOME/platform-tools/adb kill-server - echo "Starting AVD $1" - $ANDROID_TRYIT_SDK_HOME/tools/emulator -avd $1 > emulator.log & - while [ ! -f "$HOME/.android/avd/$1.avd/cache.img" ] - do - sleep 1 - echo -n "." - done - count=0 - while [ $count -lt 5 ] - do - sleep 1 - echo -n "." - let count++ - done - echo -} - -echo "+----------------------------------------------------------------+" -echo "| WSO2 Android Tryit |" -echo "+----------------------------------------------------------------+" -echo "Detected OS: " $OSTYPE -if [ ! -f "sdklocation" ]; then - echo -n "Do you have an Android SDK installed on your computer (y/N)?: " - read answer - if echo "$answer" | grep -iq "^y" ;then - setSDKPath - else - getAndroidSDK - fi -fi -export ANDROID_TRYIT_SDK_HOME=$( mypipe & -while IFS= read -r line -do - if [ $line = "package:$pkg" ]; then - let hasAgent=true - fi -done < mypipe -rm mypipe - -if [ $hasAgent = false ]; then - echo - echo "Installing agent..." - cd $SCRIPT_HOME/resources - $ANDROID_TRYIT_SDK_HOME/platform-tools/adb install android-agent.apk -fi - -echo -echo "Staring agent..." -$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell am start -n $pkg/$act -echo -echo "Connected to device shell" -$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell -echo -echo "Good bye!" diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat new file mode 100644 index 000000000..2cccdcdee --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat @@ -0,0 +1,18 @@ +echo Welcome + +SET sdk_tools_url="https://dl.google.com/android/repository/tools_r25.2.5-windows.zip" +SET platform_tools_url="http://dl.google.com/android/repository/platform-tools_r25.0.3-windows.zip" +SET build_tools_url="https://dl.google.com/android/repository/build-tools_r25.0.2-windows.zip" +SET platform_url="https://dl.google.com/android/repository/platform-23_r03.zip" +SET sys_img_url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip" +SET haxm_url="https://dl.google.com/android/repository/extras/intel/haxm-windows_r6_0_5.zip" + +java\ + -Dsdk_tools_url=%sdk_tools_url%\ + -Dplatform_tools_url=%platform_tools_url%\ + -Dbuild_tools_url=%build_tools_url%\ + -Dplatform_url=%platform_url%\ + -Dsys_img_url=%sys_img_url%\ + -Dhaxm_url=%haxm_url%\ + -jar EmulatorJava.jar +echo diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh new file mode 100644 index 000000000..e8eb396e9 --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh @@ -0,0 +1,24 @@ +#!/bin/bash +echo Welcome + +OS_SUFFIX="linux" +if [[ "$OSTYPE" == "darwin"* ]]; then + OS_SUFFIX="macosx" +fi + +sdk_tools_url="https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip" +platform_tools_url="http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip" +build_tools_url="https://dl.google.com/android/repository/build-tools_r25.0.2-$OS_SUFFIX.zip" +platform_url="https://dl.google.com/android/repository/platform-23_r03.zip" +sys_img_url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip" +haxm_url="https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip" + +java\ + -Dsdk_tools_url=$sdk_tools_url\ + -Dplatform_tools_url=$platform_tools_url\ + -Dbuild_tools_url=$build_tools_url\ + -Dplatform_url=$platform_url\ + -Dsys_img_url=$sys_img_url\ + -Dhaxm_url=$haxm_url\ + -jar EmulatorJava.jar +echo From eee153eee9a6e3c6bc63bf0da0e59c73943b9d36 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 17:00:35 +0530 Subject: [PATCH 02/44] Adding org.wso2.carbon.device.mgt.mobile.android.emulator module --- components/mobile-plugins/android-plugin/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/components/mobile-plugins/android-plugin/pom.xml b/components/mobile-plugins/android-plugin/pom.xml index 90a1bb15d..70e139ba4 100644 --- a/components/mobile-plugins/android-plugin/pom.xml +++ b/components/mobile-plugins/android-plugin/pom.xml @@ -36,6 +36,7 @@ org.wso2.carbon.device.mgt.mobile.android org.wso2.carbon.device.mgt.mobile.android.api org.wso2.carbon.device.mgt.mobile.android.ui + org.wso2.carbon.device.mgt.mobile.android.emulator From 424a02fa20ef5e0b63fb6bfa3ecb0e9f6c89c556 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 17:07:04 +0530 Subject: [PATCH 03/44] edits --- .../src/assembly/src.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml index 32ddb83e1..e8bf7799b 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml @@ -49,7 +49,7 @@ ${basedir}/target/android-tryit.ZIP - /devicemgt/app/units/itcdmf.unit.device.type.android.type-view/public/assets/ + /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ 755 From 9569b0bba7d224f3d64a25c4f67ddc50c6e99251 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 17:42:51 +0530 Subject: [PATCH 04/44] correction --- .../src/assembly/src.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml index e8bf7799b..ff67664da 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml @@ -43,7 +43,6 @@ true - From f70cc79590963cbf28a6863950f06b30b255bb28 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 17:57:57 +0530 Subject: [PATCH 05/44] correction --- .../src/assembly/src.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml index ff67664da..d2b65b091 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml @@ -48,7 +48,8 @@ ${basedir}/target/android-tryit.ZIP - /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ + /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ + 755 From 603ec856a689721240cbced4c64e92f6d59a2a52 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 17:59:47 +0530 Subject: [PATCH 06/44] type corrections --- .../src/assembly/src.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml index d2b65b091..ff67664da 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml @@ -48,8 +48,7 @@ ${basedir}/target/android-tryit.ZIP - /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ - + /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ 755 From 5e7a0c73ec4323514ffe61265e4a400e48a383ba Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 18:04:57 +0530 Subject: [PATCH 07/44] Edits in README --- .../src/main/resources/android-tryit/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md index 51b790fb9..a1ca1df99 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md @@ -5,7 +5,7 @@ Prerequisites Instructions ================= -1. Run 'startEmulator' script in your terminal. +1. Run 'startEmulator.sh' script in your terminal from the current directory. For windows run startEmulator.bat 2. If you already have android sdk in your computer, please provide location of the sdk. Otherwise this tool will download and install minimum SDK components which needs to run the emulator. @@ -17,5 +17,5 @@ Instructions Troubleshooting ================== -1. If your exisitng SDK doen't work or giving any errors, delete 'sdklocation' file and try agin without selecting the existing SDK path. +1. If your existing SDK does not work or giving any errors, delete 'sdkLocation' file and try again without selecting the existing SDK path. 2. If your emulator does not start correctly, please remove all files and directories in $HOME/.android/avd/ directory. Then try again with a new emulator. From 1e10d3180175a43431085cb8ec245b740e949cb0 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 18:14:41 +0530 Subject: [PATCH 08/44] README changes --- .../src/main/resources/android-tryit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md index a1ca1df99..e14a8186d 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md @@ -1,6 +1,6 @@ Prerequisites =============== -1. Java 8. +1. Java 7 or higher. Instructions ================= From 7c5c0de4ee4f004260623aac28ea99273a0bdf32 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 18:19:24 +0530 Subject: [PATCH 09/44] README changes --- .../src/main/resources/android-tryit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md index e14a8186d..a1ca1df99 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md @@ -1,6 +1,6 @@ Prerequisites =============== -1. Java 7 or higher. +1. Java 8. Instructions ================= From b1e86877518ed6bfa0c4bd19f733c48abc6dc304 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Mon, 19 Jun 2017 22:30:39 +0530 Subject: [PATCH 10/44] Code clean up --- .../main/java/org.carbon.android.emulator/TryIt.java | 12 ++++-------- .../org.carbon.android.emulator/TryItEmulator.java | 7 +++++-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 3dbe0cbbc..f911a2812 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -308,8 +308,8 @@ public class TryIt { ArrayList devices = new ArrayList<>(); BufferedReader reader = null; try { - reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream() - , StandardCharsets.UTF_8)); + reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream(), + StandardCharsets.UTF_8)); String readLine; while ((readLine = reader.readLine()) != null) { devices.add(readLine); @@ -403,7 +403,6 @@ public class TryIt { * @throws IOException process start throws if an I/O error occurs. */ private void runEmulator(String deviceId) throws IOException { - // mac os and windows needs hardware_Accelerated_execution_Manager if (osSuffix.equals(Constants.MAC_OS) || osSuffix.equals(Constants.WINDOWS_OS)) { installHAXM(); @@ -552,8 +551,6 @@ public class TryIt { try { reader = new BufferedReader(new InputStreamReader(badgingApkFileProcess.getInputStream(), StandardCharsets.UTF_8)); - - while ((readLine = reader.readLine()) != null) { if (readLine.contains("package")) { pkg = readLine.substring(readLine.indexOf(Constants.NAME) + 6).substring(0, @@ -613,7 +610,6 @@ public class TryIt { ProcessBuilder installAgentProcessBuilder = new ProcessBuilder(adbLocation, "install", androidAgentLocation); Process installAgentProcess = installAgentProcessBuilder.start(); - try { installAgentProcess.waitFor(); } catch (InterruptedException e) { @@ -715,14 +711,14 @@ public class TryIt { try { process = processBuilder.start(); } catch (IOException e) { - handleException("HAXM installation failed", e); + System.out.println("HAXM installation failed, install HAXM and try again"); } try { if (process != null) { process.waitFor(); } } catch (InterruptedException e) { - handleException("HAXM installation failed", e); + System.out.println("HAXM installation failed, install HAXM and try again"); } System.out.println("Please restart your machine and run again."); System.exit(0); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java index 28fc0032f..a86f533cc 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -46,13 +46,16 @@ public class TryItEmulator implements Runnable { ProcessBuilder processBuilder = new ProcessBuilder(emulatorLocation, "-avd", deviceId); try { Process process = processBuilder.start(); - reader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8)); - writer = new OutputStreamWriter(new FileOutputStream(new File("emulator.log")), StandardCharsets.UTF_8); + reader = new BufferedReader(new InputStreamReader(process.getInputStream(), + StandardCharsets.UTF_8)); + writer = new OutputStreamWriter(new FileOutputStream(new File("emulator.log")), + StandardCharsets.UTF_8); while ((readLine = reader.readLine()) != null) { writer.append(readLine); writer.append(readLine); } } catch (IOException e) { + System.out.println("Error in starting " + deviceId); e.printStackTrace(); } finally { if (reader != null) { From d786b7d839219155556fda4181188927701c9103 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 10:52:16 +0530 Subject: [PATCH 11/44] Edits --- .../java/org.carbon.android.emulator/TryIt.java | 2 +- .../resources/android-tryit/startEmulator.bat | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index f911a2812..e3e100c4d 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -329,7 +329,7 @@ public class TryIt { System.out.println("\nAvailable AVDs in the system\n"); int count = 1; for (String device : devices) { - System.out.println(count + " - - " + device); + System.out.println(count + ") " + device); count++; } System.out.print("\nEnter AVD number to start (eg: 1) :"); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat index 2cccdcdee..c6f82114f 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat @@ -1,3 +1,4 @@ +@echo off echo Welcome SET sdk_tools_url="https://dl.google.com/android/repository/tools_r25.2.5-windows.zip" @@ -7,12 +8,12 @@ SET platform_url="https://dl.google.com/android/repository/platform-23_r03.zip" SET sys_img_url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip" SET haxm_url="https://dl.google.com/android/repository/extras/intel/haxm-windows_r6_0_5.zip" -java\ - -Dsdk_tools_url=%sdk_tools_url%\ - -Dplatform_tools_url=%platform_tools_url%\ - -Dbuild_tools_url=%build_tools_url%\ - -Dplatform_url=%platform_url%\ - -Dsys_img_url=%sys_img_url%\ - -Dhaxm_url=%haxm_url%\ +java^ + -Dsdk_tools_url=%sdk_tools_url%^ + -Dplatform_tools_url=%platform_tools_url%^ + -Dbuild_tools_url=%build_tools_url%^ + -Dplatform_url=%platform_url%^ + -Dsys_img_url=%sys_img_url%^ + -Dhaxm_url=%haxm_url%^ -jar EmulatorJava.jar echo From 702287e09ba593735c4815ea32ecd8b55e314135 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 11:01:27 +0530 Subject: [PATCH 12/44] Adding kill-server method --- .../org.carbon.android.emulator/TryIt.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index e3e100c4d..440308b9e 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -744,11 +744,32 @@ public class TryIt { default: qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386"; } + killServer(); + setExecutePermission(qemuSystemFileLocation); ExecutorService service = Executors.newSingleThreadExecutor(); service.execute(new TryItEmulator(deviceId, emulatorLocation)); } + /** + * This method ensures device properly starts. + */ + private void killServer() { + ProcessBuilder processBuilderKillServer = new ProcessBuilder(adbLocation, "kill-server"); + Process processKillServer = null; + + try { + processKillServer = processBuilderKillServer.start(); + } catch (IOException ignored) { + // process works if restarted + } + try { + processKillServer.waitFor(); + } catch (InterruptedException ignored) { + // can be continued + } + } + /** * This method halts the system the cache.img file is created for the particular AVD started. * From 6acf7c4225afa6e7cf95b142e36fb20823e02895 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 11:12:31 +0530 Subject: [PATCH 13/44] edits in print messages in kilServer Method --- .../src/main/java/org.carbon.android.emulator/TryIt.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 440308b9e..0ed6007ed 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -761,12 +761,14 @@ public class TryIt { try { processKillServer = processBuilderKillServer.start(); } catch (IOException ignored) { - // process works if restarted + System.out.println("If the device doesn't start properly, stop running the script and restart again"); } try { - processKillServer.waitFor(); + if (processKillServer != null) { + processKillServer.waitFor(); + } } catch (InterruptedException ignored) { - // can be continued + System.out.println("If the device doesn't start properly, stop running the script and restart again"); } } From 944a28aae0bba69cc45dce8b0f07334299b75ba7 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 20:28:58 +0530 Subject: [PATCH 14/44] Adding correction --- .../org.carbon.android.emulator/TryIt.java | 531 +++++++++--------- 1 file changed, 250 insertions(+), 281 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 0ed6007ed..dc6ac8245 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -41,6 +41,8 @@ import java.util.Enumeration; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -53,9 +55,9 @@ public class TryIt { private String androidSdkHome; private String userHome; private String workingDirectory; - private File sdkLocationFile; // file in which SDK location is written private String adbLocation; // location of executable file abd private String emulatorLocation; // location of executable file emulator + private File sdkConfigFile; // file in which SDK location is written /** * This method gets the system specific variables. @@ -68,7 +70,7 @@ public class TryIt { if (osSuffix.contains(Constants.WINDOWS_OS)) { osSuffix = Constants.WINDOWS_OS; } - if (osSuffix.contains("mac")) { + if (osSuffix.contains(Constants.MAC)) { osSuffix = Constants.MAC_OS; } System.out.println("Detected OS " + osSuffix); @@ -80,52 +82,23 @@ public class TryIt { * @param args commandline arguments. */ public static void main(String[] args) { - TryIt tryIt = new TryIt(); tryIt.setAndroidSDK(); tryIt.checkBuildTools(); - - try { - tryIt.startAVD(); - } catch (IOException e) { - tryIt.handleException("Unable to start AVD", e); - } - - try { - tryIt.checkEmulatorBoot(); - } catch (IOException e) { - tryIt.handleException("Emulator boot process failure", e); - } - - String[] agents = new String[2]; - - try { - agents = tryIt.checkForAgent(); - } catch (IOException ignored) { - // can continue installing agent again - } + tryIt.startAVD(); + tryIt.checkEmulatorBoot(); + String[] agents = tryIt.checkForAgent(); System.out.println("Starting Agent ..."); - try { - tryIt.startPackage(agents); - } catch (IOException e) { - tryIt.handleException("Unable to start WSO2 package", e); - } - Process startShell = null; + tryIt.startPackage(agents); ProcessBuilder startShellProcessBuilder = new ProcessBuilder(tryIt.adbLocation, "shell"); try { startShellProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); startShellProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); - startShell = startShellProcessBuilder.start(); - } catch (IOException ignored) { - //can continue - } - System.out.println("Connected to device shell"); - try { - if (startShell != null) { - startShell.waitFor(); - } - } catch (InterruptedException ignored) { - // Interrupted if AVD is closed only. + Process startShell = startShellProcessBuilder.start(); + System.out.println("Connected to device shell"); + startShell.waitFor(); + } catch (IOException | InterruptedException ignored) { + // script can continue without this process } System.out.println("Good Bye!"); } @@ -137,22 +110,16 @@ public class TryIt { * @param folderName - the folder location to download the files to. */ private void downloadArtifacts(String path, String folderName) { - ReadableByteChannel rbc = null; - FileOutputStream fos = null; - URL url = null; - + ReadableByteChannel readableByteChannel = null; + FileOutputStream fileOutputStream = null; try { - url = new URL(path); + URL url = new URL(path); + readableByteChannel = Channels.newChannel(url.openStream()); + fileOutputStream = new FileOutputStream(folderName); + fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE); } catch (MalformedURLException e) { - handleException("Downloading " + folderName + " failed.", e); - } - - try { - if (url != null) { - rbc = Channels.newChannel(url.openStream()); - } - fos = new FileOutputStream(folderName); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + System.out.println("Error in download URL of " + folderName); + System.out.println("URL provided " + path); } catch (IOException e) { if (!new File(folderName).delete()) { System.out.println("Delete " + folderName + " and try again"); @@ -160,103 +127,80 @@ public class TryIt { handleException("Downloading " + folderName + " failed.", e); } finally { try { - if (fos != null) { - fos.close(); + if (fileOutputStream != null) { + fileOutputStream.close(); } - if (rbc != null) { - rbc.close(); + if (readableByteChannel != null) { + readableByteChannel.close(); } } catch (IOException ignored) { - // File close exception ignored + // Exception in finally block } } } - /** * This method validates the Android SDK location provided by the user and write it to the file - * sdkLocationFile. + * sdkConfigFile. */ private void setSDKPath() { - System.out.println("Please provide android SDK location"); + System.out.println("Please provide android SDK location : "); String response = new Scanner(System.in, "UTF-8").next(); String emulatorLocationPath = response + File.separator + "tools" + File.separator + "emulator"; - - if (osSuffix.equals(Constants.WINDOWS_OS)) { // windows emulator location ends with .bat + if (osSuffix.equals(Constants.WINDOWS_OS)) { emulatorLocationPath += Constants.WINDOWS_EXTENSION_BAT; } - if (new File(emulatorLocationPath).exists()) { - Writer writer = null; - try { - writer = new OutputStreamWriter(new FileOutputStream(sdkLocationFile), StandardCharsets.UTF_8); - } catch (FileNotFoundException e) { - System.out.println("Unable to write the sdkLocation to file "); - } - try { - if (writer != null) { - writer.write(response); - } - } catch (IOException e) { - androidSdkHome = response; - System.out.println("Unable to write the sdkLocation to file "); - e.printStackTrace(); - } finally { - try { - if (writer != null) { - writer.close(); - } - } catch (IOException ignored) { - // writer close - } - } + androidSdkHome = response; + writeToSdkConfigFile(response); } else { System.out.println("Invalid SDK location"); setSDKPath(); } } - /** - * This method creates a folder named android-sdk and downloads the minimum tools for SDK - * and write the sdk-location to the file sdkLocationFile. + * This method writes the SDK location to a file sdkConfigFile for future use. + * + * @param string - SDK location. */ - private void getAndroidSDK() { - String androidSdkFolderName = "android-sdk"; - - //noinspection ResultOfMethodCallIgnored - new File(workingDirectory + File.separator + androidSdkFolderName).mkdir(); - - androidSdkHome = workingDirectory + File.separator + androidSdkFolderName; - - getTools(System.getProperty(Constants.SDK_TOOLS_URL), "_Android-sdk-tools.zip"); - - getTools(System.getProperty(Constants.PLATFORM_TOOLS_URL), "_Android-platform-tools.zip"); - + private void writeToSdkConfigFile(String string) { Writer writer = null; try { - writer = new OutputStreamWriter(new FileOutputStream(sdkLocationFile), StandardCharsets.UTF_8); - } catch (FileNotFoundException e) { - System.out.println("Unable to write the sdkLocation to file "); - } - try { - if (writer != null) { - writer.write(androidSdkHome); - } + writer = new OutputStreamWriter(new FileOutputStream(sdkConfigFile), StandardCharsets.UTF_8); + writer.write(string); } catch (IOException e) { - System.out.println("Unable to write the sdkLocation to file "); - e.printStackTrace(); + System.out.println("Writing to " + sdkConfigFile.toString() + " failed."); } finally { try { if (writer != null) { writer.close(); } } catch (IOException ignored) { - // writes close + // } } } + + /** + * This method creates a folder named android-sdk and downloads the minimum tools for SDK + * and write the sdk-location to the file sdkConfigFile. + */ + private void getAndroidSDK() { + String androidSdkFolderName = "android-sdk"; + if (!new File(workingDirectory + File.separator + androidSdkFolderName).exists()) { + if (!new File(workingDirectory + File.separator + androidSdkFolderName).mkdir()) { + System.out.println("Unable to make folder named " + androidSdkFolderName + " in " + workingDirectory); + System.exit(1); + } + } + androidSdkHome = workingDirectory + File.separator + androidSdkFolderName; + getTools(System.getProperty(Constants.SDK_TOOLS_URL), "_Android-sdk-tools.zip"); + getTools(System.getProperty(Constants.PLATFORM_TOOLS_URL), "_Android-platform-tools.zip"); + writeToSdkConfigFile(androidSdkHome); + } + /** * This method downloads and extracts the tools. * @@ -272,19 +216,17 @@ public class TryIt { /** * This method starts the AVD specified by the user. - * - * @throws IOException process throws if an I/O error occurs. */ - private void startAVD() throws IOException { + private void startAVD() { String wso2AvdLocation = userHome + File.separator + ".android" + File.separator + "avd" + File.separator - + "WSO2_AVD.avd"; + + Constants.WSO2_AVD_NAME + ".avd"; checkForPlatform(); checkForSystemImages(); if (!new File(wso2AvdLocation).isDirectory()) { Scanner read = new Scanner(System.in, "UTF-8"); - System.out.println("Do you want to create WSO2_AVD with default configs (Y/n)?: "); + System.out.print("Do you want to create WSO2_AVD with default configs (Y/n)?: "); if (read.next().toLowerCase().matches("y")) { createAVD(); return; @@ -296,30 +238,50 @@ public class TryIt { System.out.println("+----------------------------------------------------------------+"); emulatorLocation = androidSdkHome + File.separator + "tools" + File.separator + "emulator"; - if (osSuffix.equals(Constants.WINDOWS_OS)) { emulatorLocation += Constants.WINDOWS_EXTENSION_EXE; } setExecutePermission(emulatorLocation); - ProcessBuilder listAVDsProcessBuilder = new ProcessBuilder(emulatorLocation, "-list-avds"); - Process listAVDsProcess = listAVDsProcessBuilder.start(); + listAVDs(); + } + + /** + * This method gets the available AVDs' name from the system. + */ + private void listAVDs() { ArrayList devices = new ArrayList<>(); BufferedReader reader = null; try { + ProcessBuilder listAVDsProcessBuilder = new ProcessBuilder(emulatorLocation, "-list-avds"); + Process listAVDsProcess = listAVDsProcessBuilder.start(); reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream(), StandardCharsets.UTF_8)); String readLine; while ((readLine = reader.readLine()) != null) { devices.add(readLine); } + selectAVD(devices); + } catch (IOException e) { + //TODO } finally { - if (reader != null) { - reader.close(); + try { + if (reader != null) { + reader.close(); + } + } catch (IOException ignored) { + // exception in finally block } } + } + /** + * This method enables the user to select an AVD form available AVDs. + * + * @param devices - list of available AVDs. + */ + private void selectAVD(ArrayList devices) { if (devices.size() == 0) { System.out.println("No AVDs available in the system "); startAVD(); @@ -341,69 +303,66 @@ public class TryIt { /** * This method creates WSO2_AVD with the specific configurations. - * - * @throws IOException process throws if an I/O error occurs. */ - private void createAVD() throws IOException { + private void createAVD() { String avdManagerPath = androidSdkHome + File.separator + "tools" + File.separator + "bin" + File.separator + "avdmanager"; String androidPath = androidSdkHome + File.separator + "tools" + File.separator + "android"; - String configFileLocation = workingDirectory + File.separator + "resources" + File.separator + "config.ini"; - String wso2ConfigFile = userHome + File.separator + ".android" + File.separator + "avd" + File.separator - + "WSO2_AVD.avd" + File.separator + "config.ini"; if (osSuffix.equals(Constants.WINDOWS_OS)) { avdManagerPath += Constants.WINDOWS_EXTENSION_BAT; - } - if (osSuffix.equals(Constants.WINDOWS_OS)) { androidPath += Constants.WINDOWS_EXTENSION_BAT; } setExecutePermission(androidPath); System.out.println("Creating a new AVD device"); - - if (new File(avdManagerPath).exists()) { - setExecutePermission(avdManagerPath); - ProcessBuilder createAvdProcessBuilder = new ProcessBuilder(avdManagerPath, "create", "avd", "-k", - "system-images;android-23;default;x86", "-n", "WSO2_AVD"); - - createAvdProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); - createAvdProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); - - Process createAvdProcess = createAvdProcessBuilder.start(); - - try { + try { + if (new File(avdManagerPath).exists()) { + setExecutePermission(avdManagerPath); + ProcessBuilder createAvdProcessBuilder = new ProcessBuilder(avdManagerPath, "create", "avd", "-k", + "system-images;android-23;default;x86", "-n", Constants.WSO2_AVD_NAME); + createAvdProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); + createAvdProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); + Process createAvdProcess = createAvdProcessBuilder.start(); createAvdProcess.waitFor(); - } catch (InterruptedException e) { - handleException("Unable to create new AVD", e); - } - } else { - ProcessBuilder createAvd = new ProcessBuilder(androidPath, "create", "avd", "-n", "WSO2_AVD", - "-t", "android-23"); - - createAvd.redirectInput(ProcessBuilder.Redirect.INHERIT); - createAvd.redirectOutput(ProcessBuilder.Redirect.INHERIT); - Process createAvdProcess = createAvd.start(); - - try { + } else { + ProcessBuilder createAvd = new ProcessBuilder(androidPath, "create", "avd", "-n", + Constants.WSO2_AVD_NAME, "-t", "android-23"); + createAvd.redirectInput(ProcessBuilder.Redirect.INHERIT); + createAvd.redirectOutput(ProcessBuilder.Redirect.INHERIT); + Process createAvdProcess = createAvd.start(); createAvdProcess.waitFor(); - } catch (InterruptedException e) { - handleException("Unable to create new AVD", e); } + } catch (IOException e) { + handleException("Unable to create " + Constants.WSO2_AVD_NAME, e); + } catch (InterruptedException ignored) { + // interruption in main thread } - Files.copy(Paths.get(configFileLocation), Paths.get(wso2ConfigFile), StandardCopyOption.REPLACE_EXISTING); + copyDefaultWSO2Configs(); startAVD(); } + /** + * This method replaces the default configurations provided in the resources to the WSoO2 AVD created + */ + private void copyDefaultWSO2Configs() { + String configFileLocation = workingDirectory + Constants.WSO2_CONFIG_LOCATION; + String wso2ConfigFile = userHome + File.separator + ".android" + File.separator + "avd" + File.separator + + Constants.WSO2_AVD_NAME + ".avd" + File.separator + "config.ini"; + try { + Files.copy(Paths.get(configFileLocation), Paths.get(wso2ConfigFile), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException ignored) { + System.out.println("Failed to have WSO2 default AVD configurations"); + } + } + /** * This method runs the Android Emulator for the name specified by deviceId. * * @param deviceId String name of the device. - * @throws IOException process start throws if an I/O error occurs. */ - private void runEmulator(String deviceId) throws IOException { - // mac os and windows needs hardware_Accelerated_execution_Manager + private void runEmulator(String deviceId) { if (osSuffix.equals(Constants.MAC_OS) || osSuffix.equals(Constants.WINDOWS_OS)) { installHAXM(); } @@ -417,56 +376,57 @@ public class TryIt { */ private void checkBuildTools() { File buildTools = new File(androidSdkHome + File.separator + "build-tools" - + File.separator + "25.0.2"); + + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION)); if (!buildTools.exists()) { getTools(System.getProperty(Constants.BUILD_TOOL_URL), "_Android-build-tool.zip"); - File buildTool = new File(androidSdkHome + File.separator + "android-7.1.1"); + File buildTool = new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_BUILD_TOOL_NAME)); //noinspection ResultOfMethodCallIgnored new File(androidSdkHome + File.separator + "build-tools").mkdir(); //noinspection ResultOfMethodCallIgnored buildTool.renameTo(new File(androidSdkHome + File.separator + "build-tools" - + File.separator + "25.0.2")); + + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION))); } } /** * This method halts the system until the emulator is fully booted * if boot process is not completed successfully, rest of the tasks won't be continued. - * - * @throws IOException process throws if an I/O error occurs. */ - private void checkEmulatorBoot() throws IOException { - BufferedReader reader; + private void checkEmulatorBoot() { + BufferedReader reader = null; String readLine; Boolean sysBootComplete = false; do { ProcessBuilder systemBoot = new ProcessBuilder(adbLocation, "shell", "getprop", "sys.boot_completed"); - Process systemBootProcess = systemBoot.start(); try { + Process systemBootProcess = systemBoot.start(); systemBootProcess.waitFor(); - } catch (InterruptedException e) { - handleException("System boot process interuppted", e); - } - reader = new BufferedReader(new InputStreamReader(systemBootProcess.getInputStream(), - StandardCharsets.UTF_8)); - while ((readLine = reader.readLine()) != null) { - // if boot process is success the process gives 1 as output - if (readLine.contains("1")) { - sysBootComplete = true; + reader = new BufferedReader(new InputStreamReader(systemBootProcess.getInputStream(), + StandardCharsets.UTF_8)); + while ((readLine = reader.readLine()) != null) { + // if boot process is success the process gives 1 as output + if (readLine.contains("1")) { + sysBootComplete = true; + } } - } - System.out.print("."); - try { + System.out.print("."); Thread.sleep(1000); + } catch (IOException e) { + System.out.println("Unable to check boot process"); } catch (InterruptedException ignored) { - // ignored + //interruption in main thread } finally { - reader.close(); + try { + if (reader != null) { + reader.close(); + } + } catch (IOException ignored) { + } } } while (!sysBootComplete); System.out.println(); @@ -476,29 +436,28 @@ public class TryIt { * This method gets the Android SDK location if available and sets the SDK path else downloads the SDK. */ private void setAndroidSDK() { - sdkLocationFile = new File("sdkLocation"); + sdkConfigFile = new File("sdkLocation"); - if (!(sdkLocationFile.exists() && !sdkLocationFile.isDirectory())) { + if (!(sdkConfigFile.exists() && !sdkConfigFile.isDirectory())) { Scanner read = new Scanner(System.in, "UTF-8"); - System.out.println("Do you have an Android SDK installed on your computer (y/N)?: "); + System.out.print("Do you have an Android SDK installed on your computer (y/N) ? : "); String response = read.next().toLowerCase(); if (response.matches("y")) { setSDKPath(); } else { getAndroidSDK(); } - } - // writes the Android SDK location to sdkLocationFile file - Scanner scanner = null; - try { - scanner = new Scanner(sdkLocationFile, "UTF-8"); - androidSdkHome = scanner.useDelimiter("\\Z").next(); - } catch (FileNotFoundException ignored) { - System.out.println("sdkLocation file not found"); - // already written to androidSdkHome - } finally { - if (scanner != null) { - scanner.close(); + } else { + Scanner scanner = null; + try { + scanner = new Scanner(sdkConfigFile, "UTF-8"); + androidSdkHome = scanner.useDelimiter("\\Z").next(); + } catch (FileNotFoundException ignored) { + // already checked + } finally { + if (scanner != null) { + scanner.close(); + } } } @@ -518,103 +477,121 @@ public class TryIt { private void handleException(String message, Exception ex) { System.out.println(message); ex.printStackTrace(); - System.exit(0); + System.exit(1); } /** * This method check for the android agent in the specified AVD and installs it if not available. * * @return package name and act name. - * @throws IOException process throws if an I/O error occurs. */ - private String[] checkForAgent() throws IOException { - String apkFileLocation = workingDirectory + File.separator + "resources" + File.separator + "android-agent.apk"; - String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator + "25.0.2" + private String[] checkForAgent() { + String pkg = null; + String activity = null; + String readLine; + BufferedReader reader = null; + String apkFileLocation = workingDirectory + Constants.APK_LOCATION; + String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION) + File.separator + "aapt"; - if (osSuffix.equals(Constants.WINDOWS_OS)) { aaptLocation += Constants.WINDOWS_EXTENSION_EXE; } setExecutePermission(aaptLocation); - - //process to get the name of package and launchable-activity available in android agent apk file ProcessBuilder badgingApkFileProcessBuilder = new ProcessBuilder(aaptLocation, "d", "badging", apkFileLocation); - Process badgingApkFileProcess = badgingApkFileProcessBuilder.start(); - - String pkg = null; - String activity = null; - Boolean hasAgent = false; - String readLine; - BufferedReader reader = null; - try { + Process badgingApkFileProcess = badgingApkFileProcessBuilder.start(); reader = new BufferedReader(new InputStreamReader(badgingApkFileProcess.getInputStream(), StandardCharsets.UTF_8)); while ((readLine = reader.readLine()) != null) { if (readLine.contains("package")) { - pkg = readLine.substring(readLine.indexOf(Constants.NAME) + 6).substring(0, - readLine.substring(readLine.indexOf(Constants.NAME) - + 6).indexOf("'")); + Pattern pattern = Pattern.compile("'(.*?)'"); + Matcher matcher = pattern.matcher(readLine); + if (matcher.find()) { + pkg = matcher.group(1); + } } if (readLine.contains("launchable-activity")) { - activity = readLine.substring(readLine.indexOf(Constants.NAME) + 6).substring(0, - readLine.substring(readLine.indexOf(Constants.NAME) - + 6).indexOf("'")); + Pattern pattern = Pattern.compile("'(.*?)'"); + Matcher matcher = pattern.matcher(readLine); + if (matcher.find()) { + activity = matcher.group(1); + } } } + } catch (IOException ignored) { + // } finally { if (reader != null) { - reader.close(); + try { + reader.close(); + } catch (IOException ignored) { + // + } } } + if (!checkForPackage(pkg)) { + installAgent(); + } + return new String[]{pkg, activity}; + } + /** + * This method check whether the package is available in the AVD. + * + * @param pkg - name og package to check for. + * @return - available or not. + */ + private boolean checkForPackage(String pkg) { + String readLine; + BufferedReader reader = null; + Boolean hasAgent = false; ProcessBuilder listPackages = new ProcessBuilder(adbLocation, "shell", "pm", "list", "packages"); - Process listPackagesProcess = listPackages.start(); - try { - listPackagesProcess.waitFor(); - } catch (InterruptedException e) { - System.out.println("Unable to read available packages in the current AVD"); - } try { + Process listPackagesProcess = listPackages.start(); + listPackagesProcess.waitFor(); reader = new BufferedReader(new InputStreamReader(listPackagesProcess.getInputStream(), StandardCharsets.UTF_8)); - while ((readLine = reader.readLine()) != null) { if (readLine.contains("package:" + pkg)) { hasAgent = true; } } + } catch (IOException | InterruptedException ignored) { + //TODO } finally { - reader.close(); - } - - - if (!hasAgent) { - installAgent(); + try { + if (reader != null) { + reader.close(); + } + } catch (IOException ignored) { + //TODO + } } - return new String[]{pkg, activity}; + return hasAgent; } /** * This method installs the Android Agent ( WSO2 iot agent ). - * - * @throws IOException process start throws if an I/O error occurs. */ - private void installAgent() throws IOException { - String androidAgentLocation = workingDirectory + File.separator + "resources" + File.separator - + "android-agent.apk"; + private void installAgent() { + String androidAgentLocation = workingDirectory + Constants.APK_LOCATION; System.out.println("Installing agent ..."); + ProcessBuilder installAgentProcessBuilder = new ProcessBuilder(adbLocation, "install", androidAgentLocation); - Process installAgentProcess = installAgentProcessBuilder.start(); try { + Process installAgentProcess = installAgentProcessBuilder.start(); installAgentProcess.waitFor(); - } catch (InterruptedException e) { + } catch (Exception e) { System.out.println("WSO2 Agent installation failed"); - installAgent(); + Scanner read = new Scanner(System.in, "UTF-8"); + System.out.println("Do you want to install agent again (Y/N) ? "); + if (read.next().toLowerCase().matches("y")) { + installAgent(); + } } } @@ -622,20 +599,20 @@ public class TryIt { * This method starts the package (wso2.iot.agent). * * @param agents package name and launchable activity name. - * @throws IOException process throws if an I/O error occurs. */ - private void startPackage(String[] agents) throws IOException { + private void startPackage(String[] agents) { String pkg = agents[0]; String activity = agents[1]; ProcessBuilder pkgStartProcessBuilder = new ProcessBuilder(adbLocation, "shell", "am", "start", "-n", pkg + "/" + activity); - Process pkgStartProcess = pkgStartProcessBuilder.start(); - try { + Process pkgStartProcess = pkgStartProcessBuilder.start(); pkgStartProcess.waitFor(); - } catch (InterruptedException e) { - handleException("Package start process interuptted", e); + } catch (InterruptedException ignored) { + // TODO + } catch (IOException e) { + handleException("Unable to start WSO2 package", e); } } @@ -643,15 +620,17 @@ public class TryIt { * This method checks for the availability of Android Platform in SDK and if not available downloads it. */ private void checkForPlatform() { - File platform = new File(androidSdkHome + File.separator + "platforms" + File.separator + "android-23"); + File platform = new File(androidSdkHome + File.separator + "platforms" + File.separator + + System.getProperty(Constants.TARGET_VERSION)); if (!platform.isDirectory()) { getTools(System.getProperty(Constants.PLATFORM_URL), "_Android-platforms.zip"); //noinspection ResultOfMethodCallIgnored new File(androidSdkHome + File.separator + "platforms").mkdir(); //noinspection ResultOfMethodCallIgnored - new File(androidSdkHome + File.separator + "android-6.0").renameTo(new File(androidSdkHome - + File.separator + "platforms" + File.separator + "android-23")); + new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_PLATFORM_NAME)). + renameTo(new File(androidSdkHome + File.separator + "platforms" + + File.separator + System.getProperty(Constants.TARGET_VERSION))); } } @@ -660,17 +639,17 @@ public class TryIt { */ private void checkForSystemImages() { File systemImages = new File(androidSdkHome + File.separator + "system-images" - + File.separator + "android-23" + File.separator + "default"); + + File.separator + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default"); if (!systemImages.isDirectory()) { getTools(System.getProperty(Constants.SYSTEM_IMAGE_URL), "_sys-images.zip"); //noinspection ResultOfMethodCallIgnored new File(androidSdkHome + File.separator + "system-images" + File.separator - + "android-23" + File.separator + "default").mkdirs(); + + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default").mkdirs(); //noinspection ResultOfMethodCallIgnored - new File(androidSdkHome + File.separator + "x86").renameTo(new File(androidSdkHome - + File.separator + "system-images" + File.separator + "android-23" + File.separator - + "default" + File.separator + "x86")); + new File(androidSdkHome + File.separator + System.getProperty(Constants.OS_TARGET)).renameTo(new File(androidSdkHome + + File.separator + "system-images" + File.separator + System.getProperty(Constants.TARGET_VERSION) + File.separator + + "default" + File.separator + System.getProperty(Constants.OS_TARGET))); } } @@ -683,22 +662,21 @@ public class TryIt { + File.separator + "Hardware_Accelerated_Execution_Manager"; if (!new File(haxmLocation).isDirectory()) { - System.out.println("Downloading intel HAXM..."); - + //System.out.println("Downloading intel HAXM..."); new File(haxmLocation).mkdirs(); String folderName = "_haxm.zip"; - - downloadArtifacts(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator + getTools(Constants.HAXM_URL, haxmLocation + File.separator + folderName); - System.out.println("Configuring HAXM..."); - extractFolder(haxmLocation + File.separator + folderName); - +// downloadArtifacts(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator +// + folderName); +// System.out.println("Configuring HAXM..."); +// extractFolder(haxmLocation + File.separator + folderName); String haxmInstaller = haxmLocation + File.separator + "silent_install"; if (osSuffix.equals(Constants.WINDOWS_OS)) { haxmInstaller += Constants.WINDOWS_EXTENSION_BAT; } else { - haxmInstaller += ".sh"; + haxmInstaller += Constants.MAC_HAXM_EXTENSION; } setExecutePermission(haxmInstaller); @@ -707,17 +685,10 @@ public class TryIt { processBuilder.directory(new File(haxmLocation)); processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); - Process process = null; - try { - process = processBuilder.start(); - } catch (IOException e) { - System.out.println("HAXM installation failed, install HAXM and try again"); - } try { - if (process != null) { - process.waitFor(); - } - } catch (InterruptedException e) { + Process process = processBuilder.start(); + process.waitFor(); + } catch (IOException | InterruptedException e) { System.out.println("HAXM installation failed, install HAXM and try again"); } System.out.println("Please restart your machine and run again."); @@ -736,7 +707,7 @@ public class TryIt { switch (osSuffix) { case Constants.MAC_OS: - qemuSystemFileLocation += "darwin" + "-x86_64" + File.separator + "qemu-system-i386"; + qemuSystemFileLocation += Constants.MAC_DARWIN + "-x86_64" + File.separator + "qemu-system-i386"; break; case Constants.WINDOWS_OS: qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386.exe"; @@ -745,7 +716,6 @@ public class TryIt { qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386"; } killServer(); - setExecutePermission(qemuSystemFileLocation); ExecutorService service = Executors.newSingleThreadExecutor(); service.execute(new TryItEmulator(deviceId, emulatorLocation)); @@ -757,7 +727,6 @@ public class TryIt { private void killServer() { ProcessBuilder processBuilderKillServer = new ProcessBuilder(adbLocation, "kill-server"); Process processKillServer = null; - try { processKillServer = processBuilderKillServer.start(); } catch (IOException ignored) { @@ -785,8 +754,8 @@ public class TryIt { System.out.print("."); try { Thread.sleep(1000); - } catch (InterruptedException e) { - handleException("Virtual device not loaded properly, process interuptted", e); + } catch (InterruptedException ignored) { + // } } System.out.println(); From 414af3339e449b4d94a80e24bad0ffb19745e032 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 20:29:40 +0530 Subject: [PATCH 15/44] Givins as system properties --- .../resources/android-tryit/startEmulator.bat | 26 +++++++++---------- .../resources/android-tryit/startEmulator.sh | 24 ++++++++--------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat index c6f82114f..a5816993a 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat @@ -1,19 +1,17 @@ @echo off echo Welcome -SET sdk_tools_url="https://dl.google.com/android/repository/tools_r25.2.5-windows.zip" -SET platform_tools_url="http://dl.google.com/android/repository/platform-tools_r25.0.3-windows.zip" -SET build_tools_url="https://dl.google.com/android/repository/build-tools_r25.0.2-windows.zip" -SET platform_url="https://dl.google.com/android/repository/platform-23_r03.zip" -SET sys_img_url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip" -SET haxm_url="https://dl.google.com/android/repository/extras/intel/haxm-windows_r6_0_5.zip" - java^ - -Dsdk_tools_url=%sdk_tools_url%^ - -Dplatform_tools_url=%platform_tools_url%^ - -Dbuild_tools_url=%build_tools_url%^ - -Dplatform_url=%platform_url%^ - -Dsys_img_url=%sys_img_url%^ - -Dhaxm_url=%haxm_url%^ - -jar EmulatorJava.jar + -Dsdk.tools.url="https://dl.google.com/android/repository/tools_r25.2.5-windows.zip"^ + -Dplatform.tools.url="http://dl.google.com/android/repository/platform-tools_r25.0.3-windows.zip"^ + -Dbuild.tools.url="https://dl.google.com/android/repository/build-tools_r25.0.2-windows.zip"^ + -Dplatform.url="https://dl.google.com/android/repository/platform-23_r03.zip"^ + -Dsys.img.url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"^ + -Dhaxm.url="https://dl.google.com/android/repository/extras/intel/haxm-windows_r6_0_5.zip"^ + -Ddownloaded.build.tool.name="android-7.1.1"^ + -Dbuild.tool.version="25.0.2"^ + -Ddownloaded.platform.name="android-6.0"^ + -Dtarget.version="android-23"^ + -Dos.target="x86"^ + -jar EmulatorJava.jar echo diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh index e8eb396e9..882de8abf 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh @@ -6,19 +6,17 @@ if [[ "$OSTYPE" == "darwin"* ]]; then OS_SUFFIX="macosx" fi -sdk_tools_url="https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip" -platform_tools_url="http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip" -build_tools_url="https://dl.google.com/android/repository/build-tools_r25.0.2-$OS_SUFFIX.zip" -platform_url="https://dl.google.com/android/repository/platform-23_r03.zip" -sys_img_url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip" -haxm_url="https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip" - java\ - -Dsdk_tools_url=$sdk_tools_url\ - -Dplatform_tools_url=$platform_tools_url\ - -Dbuild_tools_url=$build_tools_url\ - -Dplatform_url=$platform_url\ - -Dsys_img_url=$sys_img_url\ - -Dhaxm_url=$haxm_url\ + -Dsdk.tools.url="https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip"\ + -Dplatform.tools.url="http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip"\ + -Dbuild.tools.url="https://dl.google.com/android/repository/build-tools_r25.0.2-$OS_SUFFIX.zip"\ + -Dplatform.url="https://dl.google.com/android/repository/platform-23_r03.zip"\ + -Dsys.img.url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"\ + -Dhaxm.url="https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip"\ + -Ddownloaded.build.tool.name="android-7.1.1"\ + -Dbuild.tool.version="25.0.2"\ + -Ddownloaded.platform.name="android-6.0"\ + -Dtarget.version="android-23"\ + -Dos.target="x86"\ -jar EmulatorJava.jar echo From ad09d0d21f4c16cc5df4da7d24870e17b92b32ed Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 20:30:12 +0530 Subject: [PATCH 16/44] adding constants --- .../Constants.java | 34 +++++++++++++++---- .../TryItEmulator.java | 15 ++------ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java index c3ccaabb9..278b0d9d7 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java @@ -18,6 +18,8 @@ package org.carbon.android.emulator; +import java.io.File; + /** * This class has the constant strings used and the system properties. */ @@ -26,14 +28,34 @@ class Constants { static final String USER_HOME_PROPERTY = "user.home"; static final String USER_DIRECTORY_PROPERTY = "user.dir"; static final String MAC_OS = "macosx"; + static final String MAC = "mac"; static final String WINDOWS_OS = "windows"; static final String WINDOWS_EXTENSION_EXE = ".exe"; static final String WINDOWS_EXTENSION_BAT = ".bat"; static final String NAME = "name="; - static final String SDK_TOOLS_URL = "sdk_tools_url"; - static final String PLATFORM_TOOLS_URL = "platform_tools_url"; - static final String BUILD_TOOL_URL = "build_tools_url"; - static final String PLATFORM_URL = "platform_url"; - static final String SYSTEM_IMAGE_URL = "sys_img_url"; - static final String HAXM_URL = "haxm_url"; + + static final String SDK_TOOLS_URL = "sdk.tools.url"; + static final String PLATFORM_TOOLS_URL = "platform.tools.url"; + static final String BUILD_TOOL_URL = "build.tools.url"; + static final String PLATFORM_URL = "platform.url"; + static final String SYSTEM_IMAGE_URL = "sys.img.url"; + static final String HAXM_URL = "haxm.url"; + + static final String DOWNLOADED_BUILD_TOOL_NAME = "downloaded.build.tool.name"; //"android-7.1.1"; + static final String BUILD_TOOLS_VERSION = "build.tool.version"; //"25.0.2"; + static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name"; //"android-6.0"; + static final String TARGET_VERSION = "target.version"; //"android-23"; + static final String OS_TARGET = "os.target";//"x86"; + + + static final String WSO2_AVD_NAME = "WSO2_AVD"; + static final String APK_LOCATION = File.separator + "resources" + File.separator + "android-agent.apk"; + static final String WSO2_CONFIG_LOCATION = File.separator + "resources" + File.separator + "config.ini"; + + static final String MAC_HAXM_EXTENSION = ".sh"; + static final String MAC_DARWIN = "darwin"; + +// class AndroidCommands{ +// static final String LIST_AVD = "-list-avds"; +// } } diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java index a86f533cc..3dedf50a9 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -58,21 +58,12 @@ public class TryItEmulator implements Runnable { System.out.println("Error in starting " + deviceId); e.printStackTrace(); } finally { - if (reader != null) { try { - reader.close(); + if (reader != null) reader.close(); + if (writer != null) writer.close(); } catch (IOException ignored) { - // reader close exception ignored - } + // } - if (writer != null) { - try { - writer.close(); - } catch (IOException ignored) { - // writer close exception ignored - } - } - } } } From 7fc365f205227291d8593719bece971d171b1249 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Tue, 20 Jun 2017 23:52:35 +0530 Subject: [PATCH 17/44] changes after code review --- .../Constants.java | 24 ++---- .../org.carbon.android.emulator/TryIt.java | 82 ++++++++----------- .../TryItEmulator.java | 1 - 3 files changed, 42 insertions(+), 65 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java index 278b0d9d7..862198ca2 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java @@ -32,30 +32,24 @@ class Constants { static final String WINDOWS_OS = "windows"; static final String WINDOWS_EXTENSION_EXE = ".exe"; static final String WINDOWS_EXTENSION_BAT = ".bat"; - static final String NAME = "name="; + static final String MAC_HAXM_EXTENSION = ".sh"; + static final String MAC_DARWIN = "darwin"; + // System properties static final String SDK_TOOLS_URL = "sdk.tools.url"; static final String PLATFORM_TOOLS_URL = "platform.tools.url"; static final String BUILD_TOOL_URL = "build.tools.url"; static final String PLATFORM_URL = "platform.url"; static final String SYSTEM_IMAGE_URL = "sys.img.url"; static final String HAXM_URL = "haxm.url"; + static final String DOWNLOADED_BUILD_TOOL_NAME = "downloaded.build.tool.name"; + static final String BUILD_TOOLS_VERSION = "build.tool.version"; + static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name"; + static final String TARGET_VERSION = "target.version"; + static final String OS_TARGET = "os.target"; - static final String DOWNLOADED_BUILD_TOOL_NAME = "downloaded.build.tool.name"; //"android-7.1.1"; - static final String BUILD_TOOLS_VERSION = "build.tool.version"; //"25.0.2"; - static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name"; //"android-6.0"; - static final String TARGET_VERSION = "target.version"; //"android-23"; - static final String OS_TARGET = "os.target";//"x86"; - - + // WSO2 AVD specific variables static final String WSO2_AVD_NAME = "WSO2_AVD"; static final String APK_LOCATION = File.separator + "resources" + File.separator + "android-agent.apk"; static final String WSO2_CONFIG_LOCATION = File.separator + "resources" + File.separator + "config.ini"; - - static final String MAC_HAXM_EXTENSION = ".sh"; - static final String MAC_DARWIN = "darwin"; - -// class AndroidCommands{ -// static final String LIST_AVD = "-list-avds"; -// } } diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index dc6ac8245..11b003667 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -220,10 +220,8 @@ public class TryIt { private void startAVD() { String wso2AvdLocation = userHome + File.separator + ".android" + File.separator + "avd" + File.separator + Constants.WSO2_AVD_NAME + ".avd"; - checkForPlatform(); checkForSystemImages(); - if (!new File(wso2AvdLocation).isDirectory()) { Scanner read = new Scanner(System.in, "UTF-8"); System.out.print("Do you want to create WSO2_AVD with default configs (Y/n)?: "); @@ -232,7 +230,6 @@ public class TryIt { return; } } - System.out.println("+----------------------------------------------------------------+"); System.out.println("| WSO2 Android TryIt |"); System.out.println("+----------------------------------------------------------------+"); @@ -242,7 +239,6 @@ public class TryIt { emulatorLocation += Constants.WINDOWS_EXTENSION_EXE; } setExecutePermission(emulatorLocation); - listAVDs(); } @@ -250,7 +246,6 @@ public class TryIt { * This method gets the available AVDs' name from the system. */ private void listAVDs() { - ArrayList devices = new ArrayList<>(); BufferedReader reader = null; try { @@ -264,7 +259,7 @@ public class TryIt { } selectAVD(devices); } catch (IOException e) { - //TODO + handleException("Unable to list the available AVDs",e); } finally { try { if (reader != null) { @@ -308,13 +303,11 @@ public class TryIt { String avdManagerPath = androidSdkHome + File.separator + "tools" + File.separator + "bin" + File.separator + "avdmanager"; String androidPath = androidSdkHome + File.separator + "tools" + File.separator + "android"; - if (osSuffix.equals(Constants.WINDOWS_OS)) { avdManagerPath += Constants.WINDOWS_EXTENSION_BAT; androidPath += Constants.WINDOWS_EXTENSION_BAT; } setExecutePermission(androidPath); - System.out.println("Creating a new AVD device"); try { if (new File(avdManagerPath).exists()) { @@ -377,20 +370,29 @@ public class TryIt { private void checkBuildTools() { File buildTools = new File(androidSdkHome + File.separator + "build-tools" + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION)); - if (!buildTools.exists()) { getTools(System.getProperty(Constants.BUILD_TOOL_URL), "_Android-build-tool.zip"); - - File buildTool = new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_BUILD_TOOL_NAME)); - - //noinspection ResultOfMethodCallIgnored - new File(androidSdkHome + File.separator + "build-tools").mkdir(); - //noinspection ResultOfMethodCallIgnored + File buildTool = new File(androidSdkHome + File.separator + + System.getProperty(Constants.DOWNLOADED_BUILD_TOOL_NAME)); + if(!new File(androidSdkHome + File.separator + "build-tools").exists() + && !new File(androidSdkHome + File.separator + "build-tools").mkdir()){ + makeDirectoryError("build-tools",androidSdkHome ); + } buildTool.renameTo(new File(androidSdkHome + File.separator + "build-tools" + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION))); } } + /** + * This method make sure whether the directory can be created. + * @param name - name of the folder to be made + * @param location - location to make folder + */ + private void makeDirectoryError(String name,String location){ + System.out.println("Unable to make folder named " + name + " in " + location); + System.exit(0); + } + /** * This method halts the system until the emulator is fully booted * if boot process is not completed successfully, rest of the tasks won't be continued. @@ -399,7 +401,6 @@ public class TryIt { BufferedReader reader = null; String readLine; Boolean sysBootComplete = false; - do { ProcessBuilder systemBoot = new ProcessBuilder(adbLocation, "shell", "getprop", "sys.boot_completed"); @@ -437,7 +438,6 @@ public class TryIt { */ private void setAndroidSDK() { sdkConfigFile = new File("sdkLocation"); - if (!(sdkConfigFile.exists() && !sdkConfigFile.isDirectory())) { Scanner read = new Scanner(System.in, "UTF-8"); System.out.print("Do you have an Android SDK installed on your computer (y/N) ? : "); @@ -460,7 +460,6 @@ public class TryIt { } } } - adbLocation = androidSdkHome + File.separator + "platform-tools" + File.separator + "adb"; if (osSuffix.equals(Constants.WINDOWS_OS)) { adbLocation += Constants.WINDOWS_EXTENSION_EXE; @@ -491,8 +490,8 @@ public class TryIt { String readLine; BufferedReader reader = null; String apkFileLocation = workingDirectory + Constants.APK_LOCATION; - String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION) - + File.separator + "aapt"; + String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator + + System.getProperty(Constants.BUILD_TOOLS_VERSION) + File.separator + "aapt"; if (osSuffix.equals(Constants.WINDOWS_OS)) { aaptLocation += Constants.WINDOWS_EXTENSION_EXE; } @@ -547,7 +546,6 @@ public class TryIt { BufferedReader reader = null; Boolean hasAgent = false; ProcessBuilder listPackages = new ProcessBuilder(adbLocation, "shell", "pm", "list", "packages"); - try { Process listPackagesProcess = listPackages.start(); listPackagesProcess.waitFor(); @@ -559,14 +557,14 @@ public class TryIt { } } } catch (IOException | InterruptedException ignored) { - //TODO + // } finally { try { if (reader != null) { reader.close(); } } catch (IOException ignored) { - //TODO + // } } return hasAgent; @@ -577,9 +575,7 @@ public class TryIt { */ private void installAgent() { String androidAgentLocation = workingDirectory + Constants.APK_LOCATION; - System.out.println("Installing agent ..."); - ProcessBuilder installAgentProcessBuilder = new ProcessBuilder(adbLocation, "install", androidAgentLocation); try { @@ -603,14 +599,13 @@ public class TryIt { private void startPackage(String[] agents) { String pkg = agents[0]; String activity = agents[1]; - ProcessBuilder pkgStartProcessBuilder = new ProcessBuilder(adbLocation, "shell", "am", "start", "-n", pkg + "/" + activity); try { Process pkgStartProcess = pkgStartProcessBuilder.start(); pkgStartProcess.waitFor(); } catch (InterruptedException ignored) { - // TODO + // } catch (IOException e) { handleException("Unable to start WSO2 package", e); } @@ -622,11 +617,12 @@ public class TryIt { private void checkForPlatform() { File platform = new File(androidSdkHome + File.separator + "platforms" + File.separator + System.getProperty(Constants.TARGET_VERSION)); - if (!platform.isDirectory()) { getTools(System.getProperty(Constants.PLATFORM_URL), "_Android-platforms.zip"); - //noinspection ResultOfMethodCallIgnored - new File(androidSdkHome + File.separator + "platforms").mkdir(); + if(!new File(androidSdkHome + File.separator + "platforms").exists() + && !new File(androidSdkHome + File.separator + "platforms").mkdir()){ + makeDirectoryError("platforms",androidSdkHome); + } //noinspection ResultOfMethodCallIgnored new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_PLATFORM_NAME)). renameTo(new File(androidSdkHome + File.separator + "platforms" @@ -647,32 +643,29 @@ public class TryIt { new File(androidSdkHome + File.separator + "system-images" + File.separator + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default").mkdirs(); //noinspection ResultOfMethodCallIgnored - new File(androidSdkHome + File.separator + System.getProperty(Constants.OS_TARGET)).renameTo(new File(androidSdkHome - + File.separator + "system-images" + File.separator + System.getProperty(Constants.TARGET_VERSION) + File.separator - + "default" + File.separator + System.getProperty(Constants.OS_TARGET))); + new File(androidSdkHome + File.separator + System.getProperty(Constants.OS_TARGET)) + .renameTo(new File(androidSdkHome + File.separator + "system-images" + File.separator + + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default" + + File.separator + System.getProperty(Constants.OS_TARGET))); } } /** * This method install Hardware_Accelerated Execution_Manager in mac and windows os. */ - @SuppressWarnings("ResultOfMethodCallIgnored") private void installHAXM() { String haxmLocation = androidSdkHome + File.separator + "extras" + File.separator + "intel" + File.separator + "Hardware_Accelerated_Execution_Manager"; if (!new File(haxmLocation).isDirectory()) { //System.out.println("Downloading intel HAXM..."); - new File(haxmLocation).mkdirs(); + if(!new File(haxmLocation).mkdirs()){ + makeDirectoryError(haxmLocation,androidSdkHome); + } String folderName = "_haxm.zip"; getTools(Constants.HAXM_URL, haxmLocation + File.separator + folderName); -// downloadArtifacts(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator -// + folderName); -// System.out.println("Configuring HAXM..."); -// extractFolder(haxmLocation + File.separator + folderName); String haxmInstaller = haxmLocation + File.separator + "silent_install"; - if (osSuffix.equals(Constants.WINDOWS_OS)) { haxmInstaller += Constants.WINDOWS_EXTENSION_BAT; } else { @@ -749,7 +742,6 @@ public class TryIt { private void checkCacheImg(String deviceId) { File cacheImg = new File(userHome + File.separator + ".android" + File.separator + "avd" + File.separator + deviceId + ".avd" + File.separator + "cache.img"); - while (!cacheImg.exists()) { System.out.print("."); try { @@ -788,19 +780,14 @@ public class TryIt { try { zip = new ZipFile(file); String newPath = zipFile.substring(0, zipFile.lastIndexOf(File.separator)); - - //noinspection ResultOfMethodCallIgnored new File(newPath).mkdirs(); - Enumeration zipFileEntries = zip.entries(); - while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(newPath, currentEntry); File destinationParent = destFile.getParentFile(); - if (destinationParent == null) { destFile.mkdirs(); continue; @@ -808,7 +795,6 @@ public class TryIt { //noinspection ResultOfMethodCallIgnored destinationParent.mkdirs(); } - if (!entry.isDirectory()) { BufferedInputStream is; try { @@ -816,12 +802,10 @@ public class TryIt { int currentByte; // establish buffer for writing file byte data[] = new byte[BUFFER]; - // write the current file to disk FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); - // read and write until last byte is encountered while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java index 3dedf50a9..750167af6 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -52,7 +52,6 @@ public class TryItEmulator implements Runnable { StandardCharsets.UTF_8); while ((readLine = reader.readLine()) != null) { writer.append(readLine); - writer.append(readLine); } } catch (IOException e) { System.out.println("Error in starting " + deviceId); From 952a78b81b05cd79e2fd0fdebd570b48e55156f2 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 00:12:45 +0530 Subject: [PATCH 18/44] . --- .../src/main/java/org.carbon.android.emulator/TryIt.java | 1 + 1 file changed, 1 insertion(+) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 11b003667..2d218f77b 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -97,6 +97,7 @@ public class TryIt { Process startShell = startShellProcessBuilder.start(); System.out.println("Connected to device shell"); startShell.waitFor(); + startShell.destroy(); } catch (IOException | InterruptedException ignored) { // script can continue without this process } From acc82acdbedee20ff52ff344afae6277ecbc8d3f Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 09:56:40 +0530 Subject: [PATCH 19/44] Change of Module order --- components/mobile-plugins/android-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/pom.xml b/components/mobile-plugins/android-plugin/pom.xml index 70e139ba4..fa4d1ba73 100644 --- a/components/mobile-plugins/android-plugin/pom.xml +++ b/components/mobile-plugins/android-plugin/pom.xml @@ -35,8 +35,8 @@ org.wso2.carbon.device.mgt.mobile.android org.wso2.carbon.device.mgt.mobile.android.api - org.wso2.carbon.device.mgt.mobile.android.ui org.wso2.carbon.device.mgt.mobile.android.emulator + org.wso2.carbon.device.mgt.mobile.android.ui From 85346a531b95aaa707e2428d596760305e4c7914 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 09:57:13 +0530 Subject: [PATCH 20/44] . --- .../src/main/resources/android-tryit/startEmulator.bat | 2 +- .../src/main/resources/android-tryit/startEmulator.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat index a5816993a..bf9e99916 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat @@ -14,4 +14,4 @@ java^ -Dtarget.version="android-23"^ -Dos.target="x86"^ -jar EmulatorJava.jar -echo + diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh index 882de8abf..da5db6f6b 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh @@ -19,4 +19,4 @@ java\ -Dtarget.version="android-23"\ -Dos.target="x86"\ -jar EmulatorJava.jar -echo + From 054c10df3e61306cd2a1129f0cb4d7854151725a Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 09:57:30 +0530 Subject: [PATCH 21/44] updates --- .../src/main/java/org.carbon.android.emulator/TryIt.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 2d218f77b..f6c160bf0 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -97,7 +97,6 @@ public class TryIt { Process startShell = startShellProcessBuilder.start(); System.out.println("Connected to device shell"); startShell.waitFor(); - startShell.destroy(); } catch (IOException | InterruptedException ignored) { // script can continue without this process } @@ -664,7 +663,7 @@ public class TryIt { makeDirectoryError(haxmLocation,androidSdkHome); } String folderName = "_haxm.zip"; - getTools(Constants.HAXM_URL, haxmLocation + File.separator + getTools(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator + folderName); String haxmInstaller = haxmLocation + File.separator + "silent_install"; if (osSuffix.equals(Constants.WINDOWS_OS)) { From b646dc680118b2d4734e552d7676da69bb4ac0f6 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 11:26:05 +0530 Subject: [PATCH 22/44] removing output directory attribute --- .../org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml index 31e87f5cb..be89740f0 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml @@ -48,7 +48,6 @@ org.carbon.android.emulator.TryIt - ../org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit From 0a6ddb3b0fb0656342ea5eb52b99497daeac0c6b Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 11:26:43 +0530 Subject: [PATCH 23/44] Adding maven-dependency-plugin --- .../pom.xml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml index a0c91bd3e..644c4856f 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml @@ -35,6 +35,31 @@ + + org.apache.maven.plugins + maven-dependency-plugin + + + EmulatorJava.jar + process-resources + + copy + + + + + org.wso2.carbon.devicemgt-plugins + org.wso2.carbon.device.mgt.mobile.android.emulator + 4.0.2-SNAPSHOT + true + ${project.basedir}/src/main/resources/android-tryit/ + JavaApp.jar + + + + + + maven-antrun-plugin ${maven-antrun-plugin.version} From f4037a8885928374961a0fa4222fcb17f49d3b59 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 11:27:14 +0530 Subject: [PATCH 24/44] Chaging Java App name --- .../src/main/resources/android-tryit/startEmulator.bat | 2 +- .../src/main/resources/android-tryit/startEmulator.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat index bf9e99916..aedb7fb05 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat @@ -13,5 +13,5 @@ java^ -Ddownloaded.platform.name="android-6.0"^ -Dtarget.version="android-23"^ -Dos.target="x86"^ - -jar EmulatorJava.jar + -jar JavaApp.jar diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh index da5db6f6b..22b392208 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh @@ -18,5 +18,5 @@ java\ -Ddownloaded.platform.name="android-6.0"\ -Dtarget.version="android-23"\ -Dos.target="x86"\ - -jar EmulatorJava.jar + -jar JavaApp.jar From ce8893e41c1c6b5ef0f962b71f70b5875b76ab83 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 14:10:42 +0530 Subject: [PATCH 25/44] Adding File Permissions --- .../org.wso2.carbon.device.mgt.mobile.android.ui/build.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml index 9fbdb7899..fa0d8c18f 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml @@ -26,11 +26,12 @@ - - + - + + + From 14583ac30c66d52e919739aea01dcbea3e6c1621 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 14:11:33 +0530 Subject: [PATCH 26/44] ile permissions --- .../src/main/resources/android-tryit/startEmulator.bat | 0 .../src/main/resources/android-tryit/startEmulator.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat mode change 100644 => 100755 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.bat old mode 100644 new mode 100755 diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/startEmulator.sh old mode 100644 new mode 100755 From 9a2fe3cfb1fcc97af86ae835c768790d7ba68167 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 14:11:51 +0530 Subject: [PATCH 27/44] edits --- .../src/main/java/org.carbon.android.emulator/Constants.java | 2 -- .../src/main/java/org.carbon.android.emulator/TryIt.java | 2 +- .../main/java/org.carbon.android.emulator/TryItEmulator.java | 1 + 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java index 862198ca2..5928ced49 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java @@ -34,7 +34,6 @@ class Constants { static final String WINDOWS_EXTENSION_BAT = ".bat"; static final String MAC_HAXM_EXTENSION = ".sh"; static final String MAC_DARWIN = "darwin"; - // System properties static final String SDK_TOOLS_URL = "sdk.tools.url"; static final String PLATFORM_TOOLS_URL = "platform.tools.url"; @@ -47,7 +46,6 @@ class Constants { static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name"; static final String TARGET_VERSION = "target.version"; static final String OS_TARGET = "os.target"; - // WSO2 AVD specific variables static final String WSO2_AVD_NAME = "WSO2_AVD"; static final String APK_LOCATION = File.separator + "resources" + File.separator + "android-agent.apk"; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index f6c160bf0..3acad6737 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -100,7 +100,7 @@ public class TryIt { } catch (IOException | InterruptedException ignored) { // script can continue without this process } - System.out.println("Good Bye!"); + System.out.println("\nGood Bye!"); } /** diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java index 750167af6..650e51802 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -64,5 +64,6 @@ public class TryItEmulator implements Runnable { // } } + System.exit(0); } } From eccad44dfffc2de83ab75156e23ab3b707e91da8 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 14:24:22 +0530 Subject: [PATCH 28/44] edits --- .../src/main/java/org.carbon.android.emulator/TryIt.java | 2 -- .../org.wso2.carbon.device.mgt.mobile.android.ui/build.xml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 3acad6737..fe1105d53 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -66,7 +66,6 @@ public class TryIt { osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY).toLowerCase(); userHome = System.getProperty(Constants.USER_HOME_PROPERTY); workingDirectory = System.getProperty(Constants.USER_DIRECTORY_PROPERTY); - if (osSuffix.contains(Constants.WINDOWS_OS)) { osSuffix = Constants.WINDOWS_OS; } @@ -318,7 +317,6 @@ public class TryIt { createAvdProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); Process createAvdProcess = createAvdProcessBuilder.start(); createAvdProcess.waitFor(); - } else { ProcessBuilder createAvd = new ProcessBuilder(androidPath, "create", "avd", "-n", Constants.WSO2_AVD_NAME, "-t", "android-23"); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml index fa0d8c18f..f9445ccaf 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml @@ -29,7 +29,7 @@ - + From e27029010595b72515ed624a8559a95c2836881d Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 17:14:42 +0530 Subject: [PATCH 29/44] with corrections --- .../org.carbon.android.emulator/TryIt.java | 92 ++++++++++++------- .../TryItEmulator.java | 8 +- 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index fe1105d53..fa9e7316f 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -64,8 +64,17 @@ public class TryIt { */ private TryIt() { osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY).toLowerCase(); + if (osSuffix == null) { + sysPropertyError("OS NAME"); + } userHome = System.getProperty(Constants.USER_HOME_PROPERTY); + if (userHome == null) { + sysPropertyError("Home Directory"); + } workingDirectory = System.getProperty(Constants.USER_DIRECTORY_PROPERTY); + if (workingDirectory == null) { + sysPropertyError("Current Working Directory"); + } if (osSuffix.contains(Constants.WINDOWS_OS)) { osSuffix = Constants.WINDOWS_OS; } @@ -102,6 +111,15 @@ public class TryIt { System.out.println("\nGood Bye!"); } + /** + * This method is called when then is an error in getting system properties + * @param error - system property name + */ + private void sysPropertyError(String error) { + System.out.println("Unable to get the " + error + " of your system"); + System.exit(1); + } + /** * This method downloads the files. * @@ -144,7 +162,7 @@ public class TryIt { */ private void setSDKPath() { System.out.println("Please provide android SDK location : "); - String response = new Scanner(System.in, "UTF-8").next(); + String response = new Scanner(System.in, StandardCharsets.UTF_8.toString()).next(); String emulatorLocationPath = response + File.separator + "tools" + File.separator + "emulator"; if (osSuffix.equals(Constants.WINDOWS_OS)) { emulatorLocationPath += Constants.WINDOWS_EXTENSION_BAT; @@ -222,7 +240,7 @@ public class TryIt { checkForPlatform(); checkForSystemImages(); if (!new File(wso2AvdLocation).isDirectory()) { - Scanner read = new Scanner(System.in, "UTF-8"); + Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString()); System.out.print("Do you want to create WSO2_AVD with default configs (Y/n)?: "); if (read.next().toLowerCase().matches("y")) { createAVD(); @@ -251,14 +269,14 @@ public class TryIt { ProcessBuilder listAVDsProcessBuilder = new ProcessBuilder(emulatorLocation, "-list-avds"); Process listAVDsProcess = listAVDsProcessBuilder.start(); reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream(), - StandardCharsets.UTF_8)); + StandardCharsets.UTF_8.toString())); String readLine; while ((readLine = reader.readLine()) != null) { devices.add(readLine); } selectAVD(devices); } catch (IOException e) { - handleException("Unable to list the available AVDs",e); + handleException("Unable to list the available AVDs", e); } finally { try { if (reader != null) { @@ -270,6 +288,19 @@ public class TryIt { } } + /** + * This method makes the thread wait. + * + * @param milliSec -time to wait for + */ + private void delay(long milliSec) { + try { + Thread.sleep(milliSec); + } catch (InterruptedException ignored) { + // interruption in main thread + } + } + /** * This method enables the user to select an AVD form available AVDs. * @@ -289,7 +320,7 @@ public class TryIt { count++; } System.out.print("\nEnter AVD number to start (eg: 1) :"); - Scanner read = new Scanner(System.in, "UTF-8"); + Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString()); int avdNo = read.nextInt(); runEmulator(devices.get(--avdNo)); } @@ -344,7 +375,7 @@ public class TryIt { try { Files.copy(Paths.get(configFileLocation), Paths.get(wso2ConfigFile), StandardCopyOption.REPLACE_EXISTING); } catch (IOException ignored) { - System.out.println("Failed to have WSO2 default AVD configurations"); + System.out.println("WARN : Failed to have WSO2 default AVD configurations"); } } @@ -372,10 +403,10 @@ public class TryIt { getTools(System.getProperty(Constants.BUILD_TOOL_URL), "_Android-build-tool.zip"); File buildTool = new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_BUILD_TOOL_NAME)); - if(!new File(androidSdkHome + File.separator + "build-tools").exists() - && !new File(androidSdkHome + File.separator + "build-tools").mkdir()){ - makeDirectoryError("build-tools",androidSdkHome ); - } + if (!new File(androidSdkHome + File.separator + "build-tools").exists() + && !new File(androidSdkHome + File.separator + "build-tools").mkdir()) { + makeDirectoryError("build-tools", androidSdkHome); + } buildTool.renameTo(new File(androidSdkHome + File.separator + "build-tools" + File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION))); } @@ -383,10 +414,11 @@ public class TryIt { /** * This method make sure whether the directory can be created. - * @param name - name of the folder to be made + * + * @param name - name of the folder to be made * @param location - location to make folder */ - private void makeDirectoryError(String name,String location){ + private void makeDirectoryError(String name, String location) { System.out.println("Unable to make folder named " + name + " in " + location); System.exit(0); } @@ -414,9 +446,9 @@ public class TryIt { } } System.out.print("."); - Thread.sleep(1000); + delay(1000); } catch (IOException e) { - System.out.println("Unable to check boot process"); + System.out.println("WARN : Unable to check boot process"); } catch (InterruptedException ignored) { //interruption in main thread } finally { @@ -435,9 +467,10 @@ public class TryIt { * This method gets the Android SDK location if available and sets the SDK path else downloads the SDK. */ private void setAndroidSDK() { - sdkConfigFile = new File("sdkLocation"); + sdkConfigFile = new File("sdkConfigLocation"); if (!(sdkConfigFile.exists() && !sdkConfigFile.isDirectory())) { - Scanner read = new Scanner(System.in, "UTF-8"); + //TODO + Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString()); System.out.print("Do you have an Android SDK installed on your computer (y/N) ? : "); String response = read.next().toLowerCase(); if (response.matches("y")) { @@ -448,10 +481,10 @@ public class TryIt { } else { Scanner scanner = null; try { - scanner = new Scanner(sdkConfigFile, "UTF-8"); + scanner = new Scanner(sdkConfigFile, StandardCharsets.UTF_8.toString()); androidSdkHome = scanner.useDelimiter("\\Z").next(); } catch (FileNotFoundException ignored) { - // already checked + // } finally { if (scanner != null) { scanner.close(); @@ -517,7 +550,7 @@ public class TryIt { } } } catch (IOException ignored) { - // + System.out.println("WARN : Failed to get the available packages"); } finally { if (reader != null) { try { @@ -555,7 +588,7 @@ public class TryIt { } } } catch (IOException | InterruptedException ignored) { - // + System.out.println("WARN : Failed to check the available packages, agent will be installed"); } finally { try { if (reader != null) { @@ -581,7 +614,8 @@ public class TryIt { installAgentProcess.waitFor(); } catch (Exception e) { System.out.println("WSO2 Agent installation failed"); - Scanner read = new Scanner(System.in, "UTF-8"); + //TODO + Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString()); System.out.println("Do you want to install agent again (Y/N) ? "); if (read.next().toLowerCase().matches("y")) { installAgent(); @@ -617,9 +651,9 @@ public class TryIt { + System.getProperty(Constants.TARGET_VERSION)); if (!platform.isDirectory()) { getTools(System.getProperty(Constants.PLATFORM_URL), "_Android-platforms.zip"); - if(!new File(androidSdkHome + File.separator + "platforms").exists() - && !new File(androidSdkHome + File.separator + "platforms").mkdir()){ - makeDirectoryError("platforms",androidSdkHome); + if (!new File(androidSdkHome + File.separator + "platforms").exists() + && !new File(androidSdkHome + File.separator + "platforms").mkdir()) { + makeDirectoryError("platforms", androidSdkHome); } //noinspection ResultOfMethodCallIgnored new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_PLATFORM_NAME)). @@ -657,8 +691,8 @@ public class TryIt { if (!new File(haxmLocation).isDirectory()) { //System.out.println("Downloading intel HAXM..."); - if(!new File(haxmLocation).mkdirs()){ - makeDirectoryError(haxmLocation,androidSdkHome); + if (!new File(haxmLocation).mkdirs()) { + makeDirectoryError(haxmLocation, androidSdkHome); } String folderName = "_haxm.zip"; getTools(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator @@ -742,11 +776,7 @@ public class TryIt { + File.separator + "avd" + File.separator + deviceId + ".avd" + File.separator + "cache.img"); while (!cacheImg.exists()) { System.out.print("."); - try { - Thread.sleep(1000); - } catch (InterruptedException ignored) { - // - } + delay(1000); } System.out.println(); } diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java index 650e51802..9d910104f 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -58,8 +58,12 @@ public class TryItEmulator implements Runnable { e.printStackTrace(); } finally { try { - if (reader != null) reader.close(); - if (writer != null) writer.close(); + if (reader != null){ + reader.close(); + } + if (writer != null) { + writer.close(); + } } catch (IOException ignored) { // } From ef8b53960d1a017fb14c38d90d2771670b68b092 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 17:15:31 +0530 Subject: [PATCH 30/44] README modified to be more clear --- .../src/main/resources/android-tryit/README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md index a1ca1df99..6c5e13ae7 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/android-tryit/README.md @@ -2,20 +2,19 @@ Prerequisites =============== 1. Java 8. -Instructions -================= +Instructions +============ -1. Run 'startEmulator.sh' script in your terminal from the current directory. - For windows run startEmulator.bat +1. For Linux/Mac : Run 'startEmulator.sh' script in your terminal from the current directory. + For Windows : Run 'startEmulator.bat' script in your terminal from the current directory. 2. If you already have android sdk in your computer, please provide location of the sdk. Otherwise this tool will download and install minimum SDK components which needs to run the emulator. This is a one time process. 3. This tool will ask to create AVD if you don't have any in your computer. Otherwise you can select existing AVD to try out IoT Agent. - Troubleshooting ================== -1. If your existing SDK does not work or giving any errors, delete 'sdkLocation' file and try again without selecting the existing SDK path. +1. If your existing SDK does not work or giving any errors, delete 'sdkConfigLocation' file and try again without selecting the existing SDK path. 2. If your emulator does not start correctly, please remove all files and directories in $HOME/.android/avd/ directory. Then try again with a new emulator. From 6388ea1e45546e2ffe3392c69c34241d01c116e2 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 17:16:03 +0530 Subject: [PATCH 31/44] getting the project verion automatically --- .../org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml index 0eb0810fa..6566732ac 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml @@ -50,7 +50,7 @@ org.wso2.carbon.devicemgt-plugins org.wso2.carbon.device.mgt.mobile.android.emulator - 4.0.2-SNAPSHOT + ${project.version} true ${project.basedir}/src/main/resources/android-tryit/ JavaApp.jar From a2d703334a806729b1fd5c610f260bea1dc173c5 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 17:34:20 +0530 Subject: [PATCH 32/44] reformatting code --- .../org.carbon.android.emulator/Constants.java | 2 +- .../org.carbon.android.emulator/TryIt.java | 1 + .../TryItEmulator.java | 18 +++++++++--------- .../pom.xml | 8 +++++--- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java index 5928ced49..e1ad6c630 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/Constants.java @@ -44,7 +44,7 @@ class Constants { static final String DOWNLOADED_BUILD_TOOL_NAME = "downloaded.build.tool.name"; static final String BUILD_TOOLS_VERSION = "build.tool.version"; static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name"; - static final String TARGET_VERSION = "target.version"; + static final String TARGET_VERSION = "target.version"; static final String OS_TARGET = "os.target"; // WSO2 AVD specific variables static final String WSO2_AVD_NAME = "WSO2_AVD"; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index fa9e7316f..79edf52d9 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -113,6 +113,7 @@ public class TryIt { /** * This method is called when then is an error in getting system properties + * * @param error - system property name */ private void sysPropertyError(String error) { diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java index 9d910104f..d4ddd2265 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryItEmulator.java @@ -57,15 +57,15 @@ public class TryItEmulator implements Runnable { System.out.println("Error in starting " + deviceId); e.printStackTrace(); } finally { - try { - if (reader != null){ - reader.close(); - } - if (writer != null) { - writer.close(); - } - } catch (IOException ignored) { - // + try { + if (reader != null) { + reader.close(); + } + if (writer != null) { + writer.close(); + } + } catch (IOException ignored) { + // } } System.exit(0); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml index 6566732ac..0b49fb1d3 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml @@ -18,7 +18,8 @@ ~ under the License. --> - + android-plugin @@ -52,7 +53,8 @@ org.wso2.carbon.device.mgt.mobile.android.emulator ${project.version} true - ${project.basedir}/src/main/resources/android-tryit/ + ${project.basedir}/src/main/resources/android-tryit/ + JavaApp.jar @@ -68,7 +70,7 @@ process-resources - + From 11774f5f8bca7caeb20f62e86d3bafb2f0f826c9 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 17:53:30 +0530 Subject: [PATCH 33/44] changing version --- .../org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml | 2 +- components/mobile-plugins/android-plugin/pom.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml index be89740f0..911a6d483 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml @@ -23,7 +23,7 @@ android-plugin org.wso2.carbon.devicemgt-plugins - 4.0.2-SNAPSHOT + 4.0.5-SNAPSHOT ../pom.xml diff --git a/components/mobile-plugins/android-plugin/pom.xml b/components/mobile-plugins/android-plugin/pom.xml index 815562357..2a25629ff 100644 --- a/components/mobile-plugins/android-plugin/pom.xml +++ b/components/mobile-plugins/android-plugin/pom.xml @@ -17,7 +17,8 @@ ~ under the License. --> - + org.wso2.carbon.devicemgt-plugins From dbe38202902b7c702e596910312a65656e87a56d Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 22:53:31 +0530 Subject: [PATCH 34/44] changing file permissions --- .../build.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml index f9445ccaf..44c3b0fc3 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml @@ -24,14 +24,16 @@ - + - - - - + + + + From 3fec4edf90f877fef410c525b960013b2ea8776f Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Wed, 21 Jun 2017 23:13:58 +0530 Subject: [PATCH 35/44] adding warn messages --- .../src/main/java/org.carbon.android.emulator/TryIt.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 79edf52d9..a45d56b1d 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -105,8 +105,10 @@ public class TryIt { Process startShell = startShellProcessBuilder.start(); System.out.println("Connected to device shell"); startShell.waitFor(); - } catch (IOException | InterruptedException ignored) { - // script can continue without this process + } catch (IOException e) { + tryIt.handleException("Unable to start the shell", e); + } catch (InterruptedException ignored) { + // } System.out.println("\nGood Bye!"); } From 6aba44e6c79b32ae11cc089f385e5e7c2cb5c137 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 13:33:45 +0530 Subject: [PATCH 36/44] Chnage in download Artifacts method --- .../org.carbon.android.emulator/TryIt.java | 86 ++++++++++++------- 1 file changed, 54 insertions(+), 32 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index a45d56b1d..d33f8d4a3 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -30,12 +30,14 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.net.MalformedURLException; import java.net.URL; +import java.net.URLConnection; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Enumeration; import java.util.Scanner; @@ -113,52 +115,72 @@ public class TryIt { System.out.println("\nGood Bye!"); } - /** - * This method is called when then is an error in getting system properties - * - * @param error - system property name - */ - private void sysPropertyError(String error) { - System.out.println("Unable to get the " + error + " of your system"); - System.exit(1); - } /** - * This method downloads the files. + * This method downloads the artifacts from remote url. * - * @param path - the URL to download from. - * @param folderName - the folder location to download the files to. + * @param remotePath - remote url + * @param localPath - local path to download */ - private void downloadArtifacts(String path, String folderName) { - ReadableByteChannel readableByteChannel = null; - FileOutputStream fileOutputStream = null; + private void downloadArtifacts(String remotePath, String localPath) { + BufferedInputStream in = null; + FileOutputStream out = null; + long startingTime = System.currentTimeMillis(); + try { - URL url = new URL(path); - readableByteChannel = Channels.newChannel(url.openStream()); - fileOutputStream = new FileOutputStream(folderName); - fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE); + URL url = new URL(remotePath); + URLConnection conn = url.openConnection(); + int size = conn.getContentLength(); + in = new BufferedInputStream(url.openStream()); + out = new FileOutputStream(localPath); + byte data[] = new byte[1024]; + int count; + double sumCount = 0.0; + + while ((count = in.read(data, 0, 1024)) != -1) { + out.write(data, 0, count); + sumCount += count; + if ((size > 0 && (System.currentTimeMillis() - startingTime > 5000)) + || (sumCount / size * 100.0) == 100) { + System.out.println("Downloading: " + + new DecimalFormat("#.##").format((sumCount / size * 100.0)) + " %"); + startingTime = System.currentTimeMillis(); + } + } } catch (MalformedURLException e) { - System.out.println("Error in download URL of " + folderName); - System.out.println("URL provided " + path); + System.out.println("Error in download URL of " + localPath); + System.out.println("URL provided " + remotePath); } catch (IOException e) { - if (!new File(folderName).delete()) { - System.out.println("Delete " + folderName + " and try again"); + if (!new File(localPath).delete()) { + System.out.println("Delete " + localPath + " and try again"); } - handleException("Downloading " + folderName + " failed.", e); + handleException("Downloading " + localPath + " failed.", e); } finally { - try { - if (fileOutputStream != null) { - fileOutputStream.close(); + if (in != null) + try { + in.close(); + } catch (IOException ignored) { + // } - if (readableByteChannel != null) { - readableByteChannel.close(); + if (out != null) + try { + out.close(); + } catch (IOException ignored) { + // } - } catch (IOException ignored) { - // Exception in finally block - } } } + /** + * This method is called when then is an error in getting system properties + * + * @param error - system property name + */ + private void sysPropertyError(String error) { + System.out.println("Unable to get the " + error + " of your system"); + System.exit(1); + } + /** * This method validates the Android SDK location provided by the user and write it to the file * sdkConfigFile. From 44e667d8140ed38b1c00ba33233607ec557d0ae8 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 13:34:46 +0530 Subject: [PATCH 37/44] creating ant directory in target --- .../src/assembly/src.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml index ff67664da..d66b520d5 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/assembly/src.xml @@ -46,9 +46,10 @@ - ${basedir}/target/android-tryit.ZIP + ${basedir}/target/ant/android-tryit.ZIP - /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ + /devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/ + 755 From 558cb57815ee1ba682a390c07c084f48bfd66b14 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 13:35:30 +0530 Subject: [PATCH 38/44] adding file permissions --- .../org.wso2.carbon.device.mgt.mobile.android.ui/build.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml index 44c3b0fc3..9e7710603 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/build.xml @@ -20,7 +20,7 @@ - + @@ -31,7 +31,9 @@ - + From da6d525d25e66d0244febbf43cd74cdc733acf6a Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 13:36:18 +0530 Subject: [PATCH 39/44] copying jar file to target directory --- .../org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml index 0b49fb1d3..a320af3b2 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/pom.xml @@ -41,8 +41,8 @@ maven-dependency-plugin - EmulatorJava.jar - process-resources + copy-jar + package copy @@ -53,7 +53,7 @@ org.wso2.carbon.device.mgt.mobile.android.emulator ${project.version} true - ${project.basedir}/src/main/resources/android-tryit/ + ${project.basedir}/target/ JavaApp.jar @@ -67,7 +67,7 @@ ${maven-antrun-plugin.version} - process-resources + package From 1f07327d69839a31095fee92f6081fc5f6064be7 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 15:05:50 +0530 Subject: [PATCH 40/44] Adding maven-jar-plugin --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index f1bf59f9f..dee2613d7 100644 --- a/pom.xml +++ b/pom.xml @@ -1385,6 +1385,11 @@ maven-war-plugin 2.2 + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + From 73a0176c3a944143f9cad40b87d00e3d07f40480 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 15:06:16 +0530 Subject: [PATCH 41/44] removind version --- .../org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml index 911a6d483..5d2cd15f4 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/pom.xml @@ -39,7 +39,6 @@ org.apache.maven.plugins maven-jar-plugin - 3.0.2 From fe342b6eb32dc30ef488236f90cf7c42de885df8 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 15:06:36 +0530 Subject: [PATCH 42/44] Adding correction --- .../org.carbon.android.emulator/TryIt.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index d33f8d4a3..98fe69420 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -31,8 +31,6 @@ import java.io.Writer; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; @@ -65,17 +63,19 @@ public class TryIt { * This method gets the system specific variables. */ private TryIt() { - osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY).toLowerCase(); + osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY); if (osSuffix == null) { - sysPropertyError("OS NAME"); + sysPropertyError(Constants.OS_NAME_PROPERTY, "OS Name"); + } else { + osSuffix = osSuffix.toLowerCase(); } userHome = System.getProperty(Constants.USER_HOME_PROPERTY); if (userHome == null) { - sysPropertyError("Home Directory"); + sysPropertyError(Constants.USER_HOME_PROPERTY, "Home Directory"); } workingDirectory = System.getProperty(Constants.USER_DIRECTORY_PROPERTY); if (workingDirectory == null) { - sysPropertyError("Current Working Directory"); + sysPropertyError(Constants.USER_DIRECTORY_PROPERTY, "Current Working Directory"); } if (osSuffix.contains(Constants.WINDOWS_OS)) { osSuffix = Constants.WINDOWS_OS; @@ -174,10 +174,11 @@ public class TryIt { /** * This method is called when then is an error in getting system properties * - * @param error - system property name + * @param property -property type + * @param hint - property name */ - private void sysPropertyError(String error) { - System.out.println("Unable to get the " + error + " of your system"); + private void sysPropertyError(String property, String hint) { + System.out.println("Unable to get the" + property + "property of your system (" + hint + ")"); System.exit(1); } @@ -445,7 +446,7 @@ public class TryIt { */ private void makeDirectoryError(String name, String location) { System.out.println("Unable to make folder named " + name + " in " + location); - System.exit(0); + System.exit(1); } /** @@ -815,8 +816,10 @@ public class TryIt { private void setExecutePermission(String fileName) { if (!new File(fileName).canExecute()) { if (!new File(fileName).setExecutable(true)) { - System.out.println("Set the Execute permission of : " + fileName + " to continue"); - System.exit(0); // if can't execute, unable to proceed + System.out.println("Unable to set the execute permission of : " + fileName); + System.out.println("Please set the executable permission for file " + + new File(fileName).getAbsolutePath() + " to continue"); + System.exit(1); // if can't execute, unable to proceed } } } From e49e57beb3636ec2b492b8094af0416a8a015060 Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 15:10:53 +0530 Subject: [PATCH 43/44] formatting issue --- pom.xml | 113 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/pom.xml b/pom.xml index dee2613d7..ca9178e49 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,8 @@ ~ under the License. --> - + 4.0.0 org.wso2.carbon.devicemgt-plugins @@ -355,11 +356,11 @@ org.wso2.carbon.event.output.adapter.core ${carbon.analytics.common.version} - - org.wso2.carbon.analytics-common - org.wso2.carbon.event.input.adapter.wso2event - ${carbon.analytics.common.version} - + + org.wso2.carbon.analytics-common + org.wso2.carbon.event.input.adapter.wso2event + ${carbon.analytics.common.version} + org.wso2.carbon.analytics-common org.wso2.carbon.event.input.adapter.core @@ -370,21 +371,21 @@ org.wso2.carbon.databridge.commons ${carbon.analytics.common.version} - - org.wso2.carbon.analytics-common - org.wso2.carbon.databridge.commons.thrift - ${carbon.analytics.common.version} - - - org.wso2.carbon.analytics-common - org.wso2.carbon.databridge.commons.binary - ${carbon.analytics.common.version} - - - org.wso2.carbon.analytics-common - org.wso2.carbon.databridge.core - ${carbon.analytics.common.version} - + + org.wso2.carbon.analytics-common + org.wso2.carbon.databridge.commons.thrift + ${carbon.analytics.common.version} + + + org.wso2.carbon.analytics-common + org.wso2.carbon.databridge.commons.binary + ${carbon.analytics.common.version} + + + org.wso2.carbon.analytics-common + org.wso2.carbon.databridge.core + ${carbon.analytics.common.version} + org.wso2.carbon.analytics org.wso2.carbon.analytics.api @@ -407,11 +408,11 @@ org.wso2.carbon.device.mgt.output.adapter.mqtt ${carbon.devicemgt.plugins.version} - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.input.adapter.thrift - ${carbon.devicemgt.plugins.version} - + + org.wso2.carbon.devicemgt-plugins + org.wso2.carbon.device.mgt.input.adapter.thrift + ${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins org.wso2.carbon.device.mgt.output.adapter.xmpp @@ -543,16 +544,16 @@ org.wso2.carbon.appmgt org.wso2.carbon.appmgt.mobile ${carbon.appmgt.version} - - - org.apache.ws.commons.axiom - axiom-api - - - org.apache.ws.commons.axiom - axiom-impl - - + + + org.apache.ws.commons.axiom + axiom-api + + + org.apache.ws.commons.axiom + axiom-impl + + @@ -813,11 +814,11 @@ commons-httpclient ${orbit.version.commons-httpclient} - - commons-codec.wso2 - commons-codec - ${commons-codec.version.wso2} - + + commons-codec.wso2 + commons-codec + ${commons-codec.version.wso2} + commons-codec commons-codec @@ -978,11 +979,11 @@ ${identity.inbound.auth.oauth.version} provided - - org.wso2.carbon.identity.carbon.auth.jwt - org.wso2.carbon.identity.authenticator.signedjwt - ${identity.carbon.auth.jwt.version} - + + org.wso2.carbon.identity.carbon.auth.jwt + org.wso2.carbon.identity.authenticator.signedjwt + ${identity.carbon.auth.jwt.version} + org.apache.httpcomponents.wso2 httpcore @@ -1076,11 +1077,11 @@ feign-gson ${io.github.openfeign.version} - - io.github.openfeign - feign-slf4j - ${io.github.openfeign.version} - + + io.github.openfeign + feign-slf4j + ${io.github.openfeign.version} + @@ -1161,7 +1162,7 @@ 5.6.89 5.3.1 [5.2.0, 6.0.0) - 5.1.2 + 5.1.2 4.6.1 @@ -1228,7 +1229,7 @@ 3.0.0.wso2v1 (3.0.0, 4.0.0] - [2.0.0,4.0.0) + [2.0.0,4.0.0) 0.9.1 1.1.wso2v1 3.2.2 @@ -1386,9 +1387,9 @@ 2.2 - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 From f141836cbabf283154840be9299e97caf04c3f7e Mon Sep 17 00:00:00 2001 From: Nirothipan Date: Thu, 22 Jun 2017 15:14:04 +0530 Subject: [PATCH 44/44] adding space in print ln --- .../src/main/java/org.carbon.android.emulator/TryIt.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java index 98fe69420..51ee83acf 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.emulator/src/main/java/org.carbon.android.emulator/TryIt.java @@ -178,7 +178,7 @@ public class TryIt { * @param hint - property name */ private void sysPropertyError(String property, String hint) { - System.out.println("Unable to get the" + property + "property of your system (" + hint + ")"); + System.out.println("Unable to get the " + property + " property of your system (" + hint + ")"); System.exit(1); }