Skip to content

Commit 1bff145

Browse files
committed
fixed emulator image download
1 parent 2b1314f commit 1bff145

File tree

3 files changed

+38
-29
lines changed

3 files changed

+38
-29
lines changed

src/processing/mode/android/AVD.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@ public class AVD {
8383
/** Default virtual device used by Processing. */
8484
static public final AVD defaultAVD =
8585
new AVD("Processing-0" + Base.getRevision(),
86-
AndroidBuild.target_platform, "default", DEFAULT_SKIN);
86+
AndroidBuild.target_platform, SysImageDownloader.SYSTEM_IMAGE_TAG, DEFAULT_SKIN);
8787
// "Google Inc.:Google APIs:" + AndroidBuild.sdkVersion);
8888

8989
/** Default virtual wear device used by Processing. */
9090
static public final AVD wearAVD =
9191
new AVD("Processing-Wear-0" + Base.getRevision(),
92-
AndroidBuild.target_platform, "android-wear", WEAR_SKIN);
92+
AndroidBuild.target_platform, SysImageDownloader.SYSTEM_IMAGE_WEAR_TAG, WEAR_SKIN);
9393

9494
public AVD(final String name, final String target,
9595
final String tag, final String skin) {

src/processing/mode/android/SDKDownloader.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,7 @@ protected Object doInBackground() throws Exception {
131131
Runtime.getRuntime().exec("chmod -R 755 " + sdkFolder.getAbsolutePath());
132132
}
133133

134-
for (File f: tempFolder.listFiles()) {
135-
f.delete();
136-
PApplet.println("Deleting", f.getAbsolutePath());
137-
}
134+
for (File f: tempFolder.listFiles()) f.delete();
138135
tempFolder.delete();
139136

140137
// Normalize built-tools and platform folders to android-<API LEVEL>

src/processing/mode/android/SysImageDownloader.java

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import processing.app.Platform;
3131
import processing.app.ui.Toolkit;
32+
import processing.core.PApplet;
3233

3334
import javax.swing.*;
3435
import javax.swing.border.EmptyBorder;
@@ -53,13 +54,15 @@ public class SysImageDownloader extends JDialog implements PropertyChangeListene
5354
private static final String URL_SYS_IMAGES_WEAR = "https://dl-ssl.google.com/android/repository/sys-img/android-wear/sys-img.xml";
5455
private static final String URL_SYS_IMAGES_WEAR_FOLDER = "https://dl-ssl.google.com/android/repository/sys-img/android-wear/";
5556

56-
private static final String SYSTEM_IMAGE_MACOSX = "Intel x86 Atom System Image";
57-
private static final String SYSTEM_IMAGE_WINDOWS = "ARM EABI v7a System Image";
58-
private static final String SYSTEM_IMAGE_LINUX = "ARM EABI v7a System Image";
57+
public static final String SYSTEM_IMAGE_TAG = "google_apis";
58+
private static final String SYSTEM_IMAGE_MACOSX = "Google APIs Intel x86 Atom System Image";
59+
private static final String SYSTEM_IMAGE_WINDOWS = "Google APIs Intel x86 Atom System Image";
60+
private static final String SYSTEM_IMAGE_LINUX = "Google APIs Intel x86 Atom System Image";
5961

62+
public static final String SYSTEM_IMAGE_WEAR_TAG = "android-wear";
6063
private static final String SYSTEM_IMAGE_WEAR_MACOSX = "Android Wear Intel x86 Atom System Image";
61-
private static final String SYSTEM_IMAGE_WEAR_WINDOWS = "Android Wear ARM EABI v7a System Image";
62-
private static final String SYSTEM_IMAGE_WEAR_LINUX = "Android Wear ARM EABI v7a System Image";
64+
private static final String SYSTEM_IMAGE_WEAR_WINDOWS = "Android Wear Intel x86 Atom System Image";
65+
private static final String SYSTEM_IMAGE_WEAR_LINUX = "Android Wear Intel x86 Atom System Image";
6366

6467
private static final String PROPERTY_CHANGE_EVENT_TOTAL = "total";
6568
private static final String PROPERTY_CHANGE_EVENT_DOWNLOADED = "downloaded";
@@ -121,37 +124,25 @@ protected Object doInBackground() throws Exception {
121124
if (!tmp.exists()) tmp.mkdir();
122125
File sysImgWearFinalFolder = new File(tmp, downloadUrls.sysImgWearTag);
123126
if (!sysImgWearFinalFolder.exists()) sysImgWearFinalFolder.mkdir();
124-
downloadAndUnpack(downloadUrls.sysImgWearUrl, downloadedSysImgWear, sysImgWearFinalFolder, false);
127+
downloadAndUnpack(downloadUrls.sysImgWearUrl, downloadedSysImgWear, sysImgWearFinalFolder, false);
128+
fixSourceProperties(sysImgWearFinalFolder);
125129
} else {
126130
// default system images
127131
File downloadedSysImg = new File(tempFolder, downloadUrls.sysImgFilename);
128132
File tmp = new File(sysImgFolder, "android-" + AndroidBuild.target_sdk);
129133
if (!tmp.exists()) tmp.mkdir();
130134
File sysImgFinalFolder = new File(tmp, downloadUrls.sysImgTag);
131135
if (!sysImgFinalFolder.exists()) sysImgFinalFolder.mkdir();
132-
downloadAndUnpack(downloadUrls.sysImgUrl, downloadedSysImg, sysImgFinalFolder, false);
136+
downloadAndUnpack(downloadUrls.sysImgUrl, downloadedSysImg, sysImgFinalFolder, false);
137+
fixSourceProperties(sysImgFinalFolder);
133138
}
134139

135140
if (Platform.isLinux() || Platform.isMacOS()) {
136141
Runtime.getRuntime().exec("chmod -R 755 " + sysImgFolder.getAbsolutePath());
137142
}
138143

144+
for (File f: tempFolder.listFiles()) f.delete();
139145
tempFolder.delete();
140-
141-
// Normalize platform folder to android-<API LEVEL>
142-
// File expectedPath = new File(platformsFolder, "android-" + AndroidBuild.target_sdk);
143-
// File actualPath = new File(platformsFolder, "android-" + downloadUrls.platformVersion);
144-
// if (!expectedPath.exists()) {
145-
// if (actualPath.exists()) {
146-
// actualPath.renameTo(expectedPath);
147-
// } else {
148-
// throw new IOException("Error unpacking platform to " + actualPath.getAbsolutePath());
149-
// }
150-
// }
151-
//
152-
// // Done, let's set the environment and load the new SDK!
153-
// Platform.setenv("ANDROID_SDK", sdkFolder.getAbsolutePath());
154-
// Preferences.set("android.sdk.path", sdkFolder.getAbsolutePath());
155146

156147
result = true;
157148
} catch (ParserConfigurationException e) {
@@ -203,6 +194,27 @@ private void downloadAndUnpack(String urlString, File saveTo,
203194
AndroidMode.extractFolder(saveTo, unpackTo, setExec);
204195
}
205196

197+
// For some reason the source.properties file includes Addon entries,
198+
// and this breaks the image...
199+
private void fixSourceProperties(File imageFolder) {
200+
for (File d: imageFolder.listFiles()) {
201+
// Should iterate over the installed archs (x86, etc)
202+
if (d.isDirectory()) {
203+
for (File f: d.listFiles()) {
204+
if (PApplet.getExtension(f.getName()).equals("properties")) {
205+
String[] linesIn = PApplet.loadStrings(f);
206+
String concat = "";
207+
for (String l: linesIn) {
208+
if (l.indexOf("Addon") == -1) concat += l + "\n";
209+
}
210+
String[] linesOut = concat.split("\n");
211+
PApplet.saveStrings(f, linesOut);
212+
}
213+
}
214+
}
215+
}
216+
}
217+
206218
private UrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs)
207219
throws ParserConfigurationException, IOException, SAXException {
208220
UrlHolder urlHolder = new UrlHolder();
@@ -260,7 +272,7 @@ private UrlHolder getDownloadUrls(String repositoryUrl, String requiredHostOs)
260272
NodeList desc = ((Element) img).getElementsByTagName("sdk:description");
261273
NodeList codename = ((Element) img).getElementsByTagName("sdk:codename");
262274
// Only considering nodes without a codename, which correspond to the platform
263-
// pre-releases.
275+
// pre-releases.
264276
if (level.item(0).getTextContent().equals(AndroidBuild.target_sdk) &&
265277
desc.item(0).getTextContent().equals(systemImage) &&
266278
codename.item(0) == null) {

0 commit comments

Comments
 (0)