android sdk tools 25.3.0 に関しての備忘メモ

はじめに

をうけて

今後 android update sdk の更新URLだと、更新情報が配信されない?

みたいな話がありアップデートしてみて気づいたことを備忘メモしておきます

環境

  • 16G iMac(HDDタイプ)
  • macOS Sierra
  • SlackとかBrowserを基本立ち上げて開発している状態

sdk tools 25.2 => 25.3.0

今の時点では Canary Channelで配布しているよう。

$ANDROID_HOME/tools/bin/sdkmanager --update --channel=3

で更新しました。 確かに下記のコマンドでの更新情報にはでてきません

android update sdk

勿論 AS上で、Canary Channel に設定すればGUIで更新は可能です

更新後

下記コマンドは削除

  • android
    • sdkmanager/avdmanager が代替
  • ddms
    • tools直下の monitor が代替
  • draw9patch
  • hierarchyviewer
    • Uiautomatorviewerが代替
  • traceview
    • 代替対象なし?

template系の削除

これASの初期の時点で、ほぼ使われていなくて、現在はAS内部のpluginの中に同梱されているんですよね・・

カスタムとかしてもどっちにしろupdate時にまるっとフォルダごと消されるので、下記のテクとかあんま意味ないな~とか思ってました

  • ADTのときは

    • eclipseのレイヤーのところにtemplateが作れたので
    • sdk updateには関係なかったんですけどね・・(遠い目
  • 現時点でのASベースだと、

    • 汎用library-projectを作って独自aarを作って他のプロジェクトに持っていって利用
    • フォルダごと導入の手もあるが、フォルダベースが増えるとASは誤動作しやすい/不安定になる 気がする

binに移動したやつ

  • monkeyrunner
    • monkeyrecorderは、既に無くなってるのに今もつかっている人いるんだろうか??
  • screenshot2
    • AS + screenshot2 だと 16GなMac環境だとたまに固まる から正式採用扱いされても微妙。

そこら辺の話は、下記辺りに以前書いた

スクリーンショット(pshot.sh) の辺り

環境設定の変更

  • $HOME/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
export JAVAFX_HOME=$JAVA_HOME

export ANDROID_BUILD_VERSION=25.0.2

# 下記二行は環境依存
export ANDROID_HOME=$HOME/android-sdks
export ANDROID_NDK_HOME=$HOME/android-ndk-r13b

export NDK_TOOLCHAIN_VERSION=clang
export NDK_CCACHE=`which ccache`

# 〜中略〜

PATH=$ANDROID_HOME/tools:$PATH
PATH=$ANDROID_HOME/tools/bin:$PATH  #★追加
PATH=$ANDROID_HOME/platform-tools:$PATH
PATH=$ANDROID_HOME/build-tools/$ANDROID_BUILD_VERSION:$PATH

新規追加系

sdkmanager

  • sdkmanager | Android Studio

  • –channel 指定なしだと 0:Stable になってしまう動き

  • sdkmanager –list だと一気に表示が流れてしまうのでわかりづらい。
    • sdkmanager –list >log とかしてdumpしてから使うのコレ?
  • パッケージのインストール
    • sdkmanager “platforms;android-25”

と指定すれば入れられるとのことですが、イマイチ指定の仕方のルールがわからん・・

でも、android gradle plugin 2.3.X から、下記の機能がついているので、それ程致命的ではないかとは思いますが。。。

  • build.gradle に compileSdkVersion 指定しておくと、存在しない場合実行時に勝手にDLしてくる
    • ./gradlew tasks でもOK
  • オフライン実行や既に存在しない compileSdkVersion を指定するとビルドエラーになる

ココらへんの話はググるとAS上のGUIの設定ページに飛ばされる

Prefrenceメニュー内に存在

f:id:kimukou_26:20170216004846j:plain


  • 引数なし実行時のヘルプ
$sdkmanager 

Usage:
  sdkmanager [--uninstall] [<common args>] [--package_file <file>] [<packages>...]
  sdkmanager --update [<common args>]
  sdkmanager --list [<common args>]
  sdkmanager --licenses [<common args>]

In its first form, installs, or uninstalls, or updates packages.
    By default, the listed packages are installed or (if already installed)
    updated to the latest version.

    --uninstall: uninstalled listed packages.

    <package> is a sdk-style path (e.g. "build-tools;23.0.0" or
             "platforms;android-23").
    <package-file> is a text file where each line is a sdk-style path
                   of a package to install or uninstall.
    Multiple --package_file arguments may be specified in combination
    with explicit paths.

In its second form (with --update), all installed packages are
    updated to the latest version.

In its third form, all installed and available packages are printed
    out.

In its fourth form (with --licenses), show and offer the option to
     accept licenses for all available packages that have not already been
     accepted.

Common Arguments:
    --sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK
                              containing this tool

    --channel=<channelId>: Include packages in channels up to <channelId>.
                           Common channels are:
                           0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).

    --include_obsolete: With --list, show obsolete packages in the
                        package listing. With --update, update obsolete
                        packages as well as non-obsolete.

    --no_https: Force all connections to use http rather than https.

    --proxy=<http | socks>: Connect via a proxy of the given type.

    --proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.

    --proxy_port=<port #>: Proxy port to connect to.

* If the env var REPO_OS_OVERRIDE is set to "windows",
  "macosx", or "linux", packages will be downloaded for that OS.

avdmanager

  • 該当の解説ページは現在ない
    • 25.2.X でsdkmanagerは配布されているけど、avdmanagerは同梱されてないから?
  • これJenkinsとかでavd作ってテストしている界隈の人は別対応が必要そう
    • エミュ使わない robolectricテストがこの頃主流っぽいから問題ない??

  • 引数なし実行時のヘルプ
$ avdmanager

Usage:
      android [global options] [action] [action options]
      Global options:
  -s --silent     : Silent mode, shows errors only.
  -v --verbose    : Verbose mode, shows errors, warnings and all messages.
     --clear-cache: Clear the SDK Manager repository manifest cache.
  -h --help       : Help on a specific command.

Valid actions are composed of a verb and an optional direct object:
-   list              : Lists existing targets or virtual devices.
-   list avd          : Lists existing Android Virtual Devices.
-   list target       : Lists existing targets.
-   list device       : Lists existing devices.
- create avd          : Creates a new Android Virtual Device.
-   move avd          : Moves or renames an Android Virtual Device.
- delete avd          : Deletes an Android Virtual Device.

ググるGoogleGUI設定ページに飛ばされるんですよね・・

現在のandroid sdkのみのDL方法

現在は必ずAndroid Studioのページに飛ばされてしまう・・

Android Studio と SDK ツールをダウンロードする | Android Studio

な感じで、toolsのフォルダ内の実行ファイルのみ取得したあと、

  1. JAVA_HOMEのパスを通す
  2. android update sdkGUIベースで必要なものを更新
  3. bin/sdkmanager で最新化?

な流れで更新させようとしているのかな?

コマンドライン更新はオマケなのです?

keicha_hrs さんがWin版の検証されているみたいですね。

すごく勉強になります・・

AS 2.3からは強制なのです?

とくにWin版はインストーラで入れていると、2.2アンインストールされるらしい。

厳しいですね〜

sdk tools r26 の状況(2017/03/29追記)

keicha_hrs さんの検証情報には何時もお世話になってます〜(謝辞

自分も後で調べてみよう・・・

2017/4/22 追記

な状況で海外だともうリンクがないみたい。

近頃のG様の方針だと*2 日本語サイトでDLリンクがなくなった時点で削除されそうな感じですね〜(汗


munacky さんのコメントによる検証 (sdkmanager –update)

id:munacky さん情報ありがとうございます。

pecoと組み合わせれば ワンライナー pupdate.sh 書けそうなので書いてみました

  • pupdate.sh
TARGET=`sdkmanager --list --verbose | grep -v Parsing | grep -v Description | grep -v Version | grep -v Installed | grep -v -e '^\s*#' -e '^\s*$' | peco --select-1 |awk '{print $1}'`

if [$TARGET = '']; then
    exit
fi

echo "TARGET:"$TARGET

sdkmanager "$TARGET"

たしかに多少は省力化ができそうですね。

因みに 下記のpecoですが、version上がって以前よりかなり安定しています。

ただ複数選択の方法がわかんないー><。誰か知っている方居たら教えてください

下記のページで教えてもらいました。Macだとデフォルトのキーバインドがぶつかっているというオチらしい

launch方法メモ追記(2016/5/11)

色々と調べたら

android sdk tools 25.3.0 以上ベースだと

  • avdmanager list avd
    • emurator -avd XXXX
    • or
    • emurator @XXXX

を組み合わせろ ということらしい。

$ avdmanager list avd

Available Android Virtual Devices:
    Name: Android_Wear_Round_Chin_API_25
  Device: wear_round_chin_320_290 (Google)
    Path: /Users/kimura/.android/avd/Android_Wear_Round_Chin_API_25.avd
  Target: Android Wear
          Based on: Android 7.1.1 (Nougat) Tag/ABI: android-wear/x86
    Skin: AndroidWearRound
  Sdcard: 100M

な出力から、Name: XXXXXX抽出なのでshell芸 頑張んないと駄目なケースorz

emurator に関しては、昔あったオプションとかなくなっているよう。明らかに劣化してるな・・

Firebase TestLab 使ってほしいから問題ない という認識なんだろうか・・(汗

一応Macベースでは書いてみた。

  • pemu.sh
#!/bin/sh

PLAYER=$ANDROID_SDK_ROOT/tools/emulator

TARGET=`avdmanager list avd | grep -e Name | peco --select-1 |awk '{print substr($0,11) }'`

if [$TARGET = '']; then
    exit
fi

echo "TARGET:"$TARGET

$PLAYER -avd $TARGET &

adbに余計な修正が。。(2017/5/26追記)

adb devices -l で空行が入るようになったせいらしい。 下記を追加する必要があり

grep -v -e ‘^\s#’ -e ‘^\s$’

  • 変更前
DEVICE=`adb devices -l |grep -v attached |grep -v daemon |peco --select-1|awk '{print $1}'`
if [$DEVICE = '']; then
    exit
fi
  • 変更後
DEVICE=`adb devices -l |grep -v attached |grep -v daemon | grep -v -e '^\s*#' -e '^\s*$' |peco --select-1|awk '{print $1}'`
if [$DEVICE = '']; then
    exit
fi

*1:でもあれ微妙な動きだったような。。

*2:過去を振り返らない?