Skip to content

Commit bf246da

Browse files
committed
set SDK files as executable when they are inside platform-tools, tools
and tools
1 parent fdf4955 commit bf246da

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/processing/mode/android/SDKDownloader.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import processing.app.Platform;
1111
import processing.app.Preferences;
1212
import processing.app.ui.Toolkit;
13+
import processing.core.PApplet;
1314

1415
import javax.swing.*;
1516
import javax.swing.border.EmptyBorder;
@@ -86,25 +87,25 @@ protected Object doInBackground() throws Exception {
8687

8788
// tools
8889
File downloadedTools = new File(tempFolder, downloadUrls.toolsFilename);
89-
downloadAndUnpack(downloadUrls.toolsUrl, downloadedTools, sdkFolder);
90+
downloadAndUnpack(downloadUrls.toolsUrl, downloadedTools, sdkFolder, true);
9091

9192
// platform-tools
9293
File downloadedPlatformTools = new File(tempFolder, downloadUrls.platformToolsFilename);
93-
downloadAndUnpack(downloadUrls.platformToolsUrl, downloadedPlatformTools, sdkFolder);
94+
downloadAndUnpack(downloadUrls.platformToolsUrl, downloadedPlatformTools, sdkFolder, true);
9495

9596
// build-tools
9697
File downloadedBuildTools = new File(tempFolder, downloadUrls.buildToolsFilename);
97-
downloadAndUnpack(downloadUrls.buildToolsUrl, downloadedBuildTools, buildToolsFolder);
98+
downloadAndUnpack(downloadUrls.buildToolsUrl, downloadedBuildTools, buildToolsFolder, true);
9899

99100
// platform
100101
File downloadedPlatform = new File(tempFolder, downloadUrls.platformFilename);
101-
downloadAndUnpack(downloadUrls.platformUrl, downloadedPlatform, platformsFolder);
102+
downloadAndUnpack(downloadUrls.platformUrl, downloadedPlatform, platformsFolder, false);
102103

103104
// usb driver
104105
if (Platform.isWindows()) {
105106
File usbDriverFolder = new File(extrasFolder, "google");
106107
File downloadedFolder = new File(tempFolder, "latest_usb_driver_windows.zip");
107-
downloadAndUnpack(URL_USB_DRIVER, downloadedFolder, usbDriverFolder);
108+
downloadAndUnpack(URL_USB_DRIVER, downloadedFolder, usbDriverFolder, false);
108109
}
109110

110111
if (Platform.isLinux() || Platform.isMacOS()) {
@@ -135,7 +136,7 @@ protected void done() {
135136
}
136137

137138
private void downloadAndUnpack(String urlString, File saveTo,
138-
File unpackTo) throws IOException {
139+
File unpackTo, boolean setExec) throws IOException {
139140
URL url = null;
140141
try {
141142
url = new URL(urlString);
@@ -167,7 +168,7 @@ private void downloadAndUnpack(String urlString, File saveTo,
167168
inputStream.close();
168169
outputStream.close();
169170

170-
extractFolder(saveTo, unpackTo);
171+
extractFolder(saveTo, unpackTo, setExec);
171172
}
172173

173174
/*
@@ -370,7 +371,7 @@ public void actionPerformed(ActionEvent actionEvent) {
370371
}
371372

372373

373-
static void extractFolder(File file, File newPath) throws IOException {
374+
static void extractFolder(File file, File newPath, boolean setExec) throws IOException {
374375
int BUFFER = 2048;
375376
zip = new ZipFile(file);
376377
Enumeration<? extends ZipEntry> zipFileEntries = zip.entries();
@@ -387,7 +388,16 @@ static void extractFolder(File file, File newPath) throws IOException {
387388
// create the parent directory structure if needed
388389
destinationParent.mkdirs();
389390

391+
String ext = PApplet.getExtension(currentEntry);
392+
if (setExec && ext.equals("unknown")) {
393+
// On some OS X machines the android binaries loose their executable
394+
// attribute, rendering the mode unusable
395+
destFile.setExecutable(true);
396+
}
397+
390398
if (!entry.isDirectory()) {
399+
// should preserve permissions
400+
// https://bitbucket.org/atlassian/amps/pull-requests/21/amps-904-preserve-executable-file-status/diff
391401
BufferedInputStream is = new BufferedInputStream(zip
392402
.getInputStream(entry));
393403
int currentByte;

0 commit comments

Comments
 (0)