私はGradleスクリプトを通していくつかのAndroid SDKツールをインストールするプロセスを自動化しようとしています。多数のandroid-sdkツールをインストールして自動的にライセンスを受け入れるにはどうすればよいですか?
考え方は、メインビルド自体を発行する前に環境を準備するDockerマシン内でこのbuild.gradleスクリプトを実行することです。
問題は、私がインストールしている関連パッケージのライセンスを自動的に受け入れることです。
this SO question後、私はこの方法を使用しようとしている:
echo "y" | android update sdk -u -a -t 2,4,56,57,58
私はターミナルでそれを実行した場合、それは一つのコマンドで最大6つのパッケージが、私はそれより多くのパッケージをインストールしたい場合は動作しますが、例えば:
echo "y" | android update sdk -u -a -t 2,6,7,4,30,153,160,161,167,54,53,63,56,57,58,59
は次にコマンドは失敗します。
Do you accept the license 'intel-android-extra-license-3626590a' [y/n]:
Unknown response ''.
Do you accept the license 'intel-android-extra-license-3626590a' [y/n]:
Unknown response ''.
Max number of retries exceeded. Rejecting 'intel-android-extra-license-3626590a'
Package Android TV Intel x86 Atom System Image, Android API 24, revision 6 not installed due to rejected license 'android-sdk-preview-license-d099d938'.
Package Android Wear ARM EABI v7a System Image, Android API 24, revision 1 not installed due to rejected license 'android-sdk-preview-license-d099d938'.
Package ARM 64 v8a System Image, Android API 24, revision 6 not installed due to rejected license 'android-sdk-preview-license-d099d938'.
以上に私のためにGradleを実行する必要があります。そうすると、何らかの理由で最初のエコー(エコー "y")の出力がパイプにリダイレクトされないようです。私は、関連するGradleのタスクを実行したときに
だから:
12:46:01.178 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
12:46:01.179 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command '/bin/echo'.
12:46:01.183 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
12:46:01.183 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
12:46:01.183 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command '/bin/echo''
12:46:01.184 [QUIET] [system.out] y | /usr/local/bin/android update sdk -u -a -t 2,6,7,4,30,153,160,161,167,54,53,63,56,57,58,59
12:46:01.184 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: SUCCEEDED
12:46:01.185 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command '/bin/echo'' finished with exit value 0 (state: SUCCEEDED)
12:46:01.185 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':installSdkBuildTools'
12:46:01.185 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :installSdkBuildTools (Thread[main,5,main]) completed. Took 0.023 secs.
12:46:01.185 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[main,5,main]] finished, busy: 0.023 secs, idle: 0.001 secs
12:46:01.185 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskGraphExecuter] Timing: Executing the DAG took 0.044 secs
12:46:01.185 [LIFECYCLE] [org.gradle.BuildResultLogger]
12:46:01.186 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD SUCCESSFUL
echoコマンドは終了ステータス0で正常に終了したが、パッケージはインストールされていません。
3つのミニコマンドにコマンドを分割しようとしましたが、毎回6つのパッケージをインストールしますが、echo "y" | android...
コマンドは上記のように正しく解釈されません。
関連Gradleのタスクはそうのようになります。
task installSdkBuildToolsPart2(type: Exec) {
commandLine '/bin/echo', "y", '|', '/usr/local/bin/android ', 'update ', 'sdk ', '-u -a -t 160,161,167,54,53'
}
そして、私もそのようにしようとしたが、無駄に:
task installSdkBuildToolsPart1(type: Exec) {
commandLine 'bash', '-c'," '/bin/echo', "y", '|', '/usr/local/bin/android ', 'update ', 'sdk ', '-u -a -t 2,6,7,4,30,153'"
}
これはGradleの質問です...どのようにすべきcommandLine
ディレクティブをbuild.gradleファイルに正しく書き込んで、コマンドが正しく解釈され、パッケージがインストールされ、ライセンスが受け入れられるようにしますか?
誰でもこの問題を解決する方法を知っていますか?事前に
おかげで、
Jake Wharton SDK Managerプラグインをご覧になることができます:https://github.com/JakeWharton/sdk-manager-plugin – Budius
ありがとうございますが、私はむしろ廃止予定のプラグインを使用しません。 –
推奨されていませんが、機能しないというわけではありません。我々は私たちのCIで使用し、それは正常に動作します。 – Budius