38
38
import java .io .File ;
39
39
import java .io .FileReader ;
40
40
import java .io .IOException ;
41
+ import java .io .InputStream ;
42
+ import java .io .OutputStream ;
41
43
import java .text .DateFormat ;
42
44
import java .text .ParseException ;
43
45
import java .text .SimpleDateFormat ;
@@ -63,11 +65,15 @@ class AndroidSDK {
63
65
private final File platformTools ;
64
66
private final File buildTools ;
65
67
private final File avdManager ;
68
+ private final File sdkManager ;
66
69
private final File wearablePath ;
67
70
private final File supportLibPath ;
68
71
69
72
private static final String SDK_DOWNLOAD_URL =
70
73
"https://developer.android.com/studio/index.html#downloads" ;
74
+
75
+ private static final String SDK_LICENSE_URL =
76
+ "https://developer.android.com/studio/terms.html" ;
71
77
72
78
private static final String USE_ENV_SDK_TITLE = "Found an Android SDK!" ;
73
79
private static final String USE_ENV_SDK_MESSAGE =
@@ -218,6 +224,7 @@ public AndroidSDK(File folder) throws BadSDKException, IOException {
218
224
}
219
225
220
226
avdManager = findAvdManager (new File (tools , "bin" ));
227
+ sdkManager = findSdkManager (new File (tools , "bin" ));
221
228
222
229
String path = Platform .getenv ("PATH" );
223
230
@@ -345,6 +352,60 @@ public File getZipAlignTool() {
345
352
return null ;
346
353
}
347
354
355
+
356
+ public void acceptLicenses () {
357
+ ArrayList <String > commands = new ArrayList <String >();
358
+ commands .add (sdkManager .getAbsolutePath ());
359
+ commands .add ("--licenses" );
360
+ ProcessBuilder pb = new ProcessBuilder (commands );
361
+ pb .redirectErrorStream (true );
362
+ try {
363
+
364
+ Process prs = pb .start ();
365
+ OutputStream writeTo = prs .getOutputStream ();
366
+ for (int i = 0 ; i < 7 ; i ++) {
367
+ Thread inThread = new Thread (new In (prs .getInputStream ()));
368
+ inThread .start ();
369
+ Thread .sleep (100 );
370
+ writeTo .write ("y\n " .getBytes ());
371
+ writeTo .flush ();
372
+ }
373
+
374
+ writeTo .close ();
375
+
376
+ } catch (IOException e ) {
377
+ e .printStackTrace ();
378
+ } catch (InterruptedException e ) {
379
+ // TODO Auto-generated catch block
380
+ e .printStackTrace ();
381
+ }
382
+ }
383
+
384
+
385
+ class In implements Runnable {
386
+ private InputStream is ;
387
+
388
+ public In (InputStream is ) {
389
+ this .is = is ;
390
+ }
391
+
392
+ @ Override
393
+ public void run () {
394
+ byte [] b = new byte [1024 ];
395
+ int size = 0 ;
396
+ try {
397
+ while ((size = is .read (b )) != -1 ) {
398
+ System .err .println (new String (b ));
399
+ }
400
+ is .close ();
401
+ } catch (IOException e ) {
402
+ // TODO Auto-generated catch block
403
+ e .printStackTrace ();
404
+ }
405
+
406
+ }
407
+ }
408
+
348
409
static public File getHAXMInstallerFolder () {
349
410
String sdkPrefsPath = Preferences .get ("android.sdk.path" );
350
411
File sdkPath = new File (sdkPrefsPath );
@@ -374,6 +435,16 @@ private static File findAvdManager(final File tools) throws BadSDKException {
374
435
throw new BadSDKException ("Cannot find avdmanager in " + tools );
375
436
}
376
437
438
+
439
+ private static File findSdkManager (final File tools ) throws BadSDKException {
440
+ if (new File (tools , "sdkmanager.bat" ).exists ()) {
441
+ return new File (tools , "sdkmanager.bat" );
442
+ }
443
+ if (new File (tools , "sdkmanager" ).exists ()) {
444
+ return new File (tools , "sdkmanager" );
445
+ }
446
+ throw new BadSDKException ("Cannot find sdkdmanager in " + tools );
447
+ }
377
448
378
449
/**
379
450
* Check for a set android.sdk.path preference. If the pref
@@ -399,6 +470,7 @@ public static AndroidSDK load(boolean checkEnvSDK, Frame editor) throws IOExcept
399
470
try {
400
471
final AndroidSDK androidSDK = new AndroidSDK (new File (sdkPrefsPath ));
401
472
Preferences .set ("android.sdk.path" , sdkPrefsPath );
473
+ androidSDK .acceptLicenses ();
402
474
return androidSDK ;
403
475
} catch (final BadSDKException badPref ) {
404
476
Preferences .unset ("android.sdk.path" );
@@ -433,6 +505,7 @@ public static AndroidSDK load(boolean checkEnvSDK, Frame editor) throws IOExcept
433
505
// welcome message with some useful info.
434
506
AndroidUtil .showMessage (SDK_EXISTS_TITLE , SDK_EXISTS_MESSAGE );
435
507
508
+ androidSDK .acceptLicenses ();
436
509
return androidSDK ;
437
510
} catch (final BadSDKException badEnv ) {
438
511
Preferences .unset ("android.sdk.path" );
@@ -509,7 +582,9 @@ static public AndroidSDK download(final Frame editor, final AndroidMode androidM
509
582
msg += DRIVER_INSTALL_MESSAGE + driver .getAbsolutePath ();
510
583
}
511
584
AndroidUtil .showMessage (SDK_INSTALL_TITLE , msg );
512
-
585
+
586
+ sdk .acceptLicenses ();
587
+
513
588
return sdk ;
514
589
}
515
590
0 commit comments