Android
ファイル転送
コンピュータと Android デバイス間でファイルを転送する方法にはいくつかあります:
- USB ケーブル
- MTP: 新しい Android デバイス
- USB mass storage 比較的古い Android デバイス
- Android Debug Bridge
- special USB sticks / regular USB stick with adapter
- Bluetooth
- Android と互換性のある Arch Linux のソフトウェア
- SSH や、Samba、HTTP などのファイル転送に使えるプロトコル
- KDE Connect (kdeconnect) - Android デバイスと KDE デスクトップを統合する ( synced notification & クリップボードや、マルチメディアコントロール、ファイル /URL 共有)。
- クラウドとの同期クライアント
- Syncthing
- sendanywhereAUR - クロスプラットフォーム対応のファイル転送
Android 開発
Arch Linux で Android アプリケーションを開発できるようにするためには3つの手順を踏む必要があります:
- Android SDK コアコンポーネントのインストール
- Android SDK プラットフォームパッケージのインストール
- Android SDK に対応している IDE のインストール
Android SDK コアコンポーネント
Android アプリケーションの開発を始める前に、Android SDK をインストールしてください。4つのパッケージに別れており、すべて AUR からインストールできます:
古いデバイスのサポートが必要な場合や古いコードを動かすときは android-supportAUR と android-support-repositoryAUR もインストールしてください。
Android-sdk は /opt/android-sdk
にインストールされます。このフォルダは root パーミッションになるので、sdk マネージャは root で実行してください。root でないと /opt/android-sdk
上のものをインストール・アップデート・修正することができません。通常ユーザーで使いたい場合は、以下の手順に従って下さい。
Android sdk ユーザーグループを作成 (名前は何でもいいです):
# groupadd sdkusers
ユーザーをグループに追加:
# gpasswd -a <user> sdkusers
フォルダの所有者とグループを変更:
# chown -R :sdkusers /opt/android-sdk/
フォルダのパーミッションを変更して読み書き実行を可能にする:
# chmod -R g+w /opt/android-sdk/
再ログインあるいは <user> として新しく作成したグループでターミナルにログイン:
$ newgrp sdkusers
Android SDK プラットフォーム API
必要な Android SDK Platform パッケージを AUR からインストールしてください:
- android-platformAUR (最新)
- android-platform-25AUR
- android-platform-24AUR
- android-platform-23AUR
- android-platform-22AUR
- android-platform-21AUR
- android-platform-20AUR
- android-platform-19AUR
- android-platform-18AUR
- android-platform-17AUR
- android-platform-16AUR
- android-platform-15AUR
- android-platform-14AUR
Android システムイメージ
AUR から適当な Android システムイメージ パッケージをインストールしてください。Android Studio を使う場合はシステムイメージは必要ありません。特定の Android デバイスをエミュレートするときはイメージが必須ですが、Android スマートフォンを使って開発する場合はイメージは不要です。
開発環境
Android Studio は IntelliJ IDEA がベースの新しい (実験的な) Android 開発環境です。もしくは、下に記述しているプラグインをインストールした後 Netbeans を使って開発することもできます。
Android Studio
ADT プラグインのある Eclipse のように、Android Studio も開発とデバッグのための統合された Android 開発者ツールを提供しています。
Android Studio は AUR の android-studioAUR パッケージでダウンロード・インストールすることが可能です。SDK が存在しないというエラーが表示された場合は、上記の Android SDK プラットフォーム API に関するセクションを見て下さい。
通常、アプリは Android Studio の GUI からビルドします。コマンドラインからアプリをビルドするには (例: ./gradlew assembleDebug
)、以下を ~/.bashrc
に追加してください:
export ANDROID_HOME=/opt/android-sdk
Netbeans
IDE として Netbeans を使って Android アプリケーションを開発したい場合は、以下から NBAndroid をダウンロードしてください:
Tools -> Plugins -> Settings
次の URL を追加: http://nbandroid.org/release81/updates/updates.xml
Available Plugins から Android と JUnit プラグインをインストールしてください。インストールしたら:
Tools -> Options -> Miscellaneous -> Android
から SDK をインストールしたパスを選択します (デフォルトは /opt/android-sdk
)。これで完了です。Netbeans を使って新しい Android プロジェクトを作成して開発を始めることができます。
Eclipse
公式の Eclipse ADT プラグインが eclipse-androidAUR[リンク切れ: パッケージが存在しません] パッケージでインストールできます。
Android SDK の場所のパスを設定で入力してください:
Windows -> Preferences -> Android
Android Debug Bridge (ADB)
実機に接続
ADB で Arch 下の実機やスマートフォンに接続するには、以下を実行する必要があります:
- android-tools をインストール。適当な
/dev/
エントリにデバイスを接続するには android-udev もインストールする必要があります。 - USB で Android デバイスを接続する。
- スマートフォンやデバイスで USB デバッグを有効にする。
- Jelly Bean (4.2) 以降:
設定 --> 端末情報
を開いてデベロッパーになったというポップアップが表示されるまで “Build Number” をタップ (約10回連打)。そして設定 --> 開発者向けオプション --> USB デバッグ
から USB デバッグを有効にする。デバイスはフィンガープリントを使ってコンピュータに接続しても良いか聞いてきます。永続的に許可すると$HOME/.android/adbkey.pub
がデバイスの/data/misc/adb/adb_keys
フォルダにコピーされます。 - 古いバージョン:
設定 --> アプリケーション --> 開発 --> USB デバッグ
から有効にできます。このオプションにチェックを入れた後はスマートフォンを再起動して USB デバッグを有効にしてください。
- Jelly Bean (4.2) 以降:
- android-udev をインストールしなかった場合、ユーザーを adbusers グループに追加します (
# gpasswd -a username adbusers
)。
ADB がデバイスを認識したら (IDE からアクセスできる状態)、完了です。認識しない場合は以下を見て下さい。
デバイス ID を確かめる
それぞれの Android デバイスには USB ベンダー・プロダクト ID が存在します。例えば HTC Evo なら:
vendor id: 0bb4 product id: 0c8d
デバイスを接続して次を実行してください:
$ lsusb
以下のように表示されるはずです:
Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp.
udev ルールを追加する
android-udev (または android-udev-gitAUR) をインストールするか手動で Android developer のルールを使うか、あるいは以下のテンプレートを使って udev ルールを作って下さい。[VENDOR ID] と [PRODUCT ID] はあなたの ID に置き換えて下さい。ルールを /etc/udev/rules.d/51-android.rules
にコピー:
/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="[VENDOR ID]", MODE="0660", GROUP="adbusers" SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_adb" SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_fastboot"
そして、新しい udev ルールをリロードするために、次を実行:
# udevadm control --reload-rules
使用しているユーザーを adbusers
グループに追加することで adb
デバイスにアクセスできるようになります。
adb の設定
udev ルールを使う代わりにベンダー id のリストを記述する ~/.android/adb_usb.ini
を作成・編集することができます。
$ cat ~/.android/adb_usb.ini
0x27e8
動作するか確認
udev ルールを設定したら、デバイスのプラグを一度抜いてから再接続してください。
次のコマンドを実行すれば:
$ adb devices
以下のように表示されるはずです:
List of devices attached HT07VHL00676 device
adb を使ってデバイスとコンピュータ間でファイルを転送することができます。ファイルをデバイスに送信するには次のコマンドを使用:
$ adb push <what-to-copy> <where-to-place>
ファイルを受信するには:
$ adb pull <what-to-pull> <where-to-place>
adb プログラムがない場合 (通常は /opt/android-sdk/platform-tools/
にあります)、プラットフォームツールがインストールされていません。空のリストが表示される (デバイスがない) 場合、デバイスの USB デバッグが有効になっていません。
adb がデバイスの下に ???????? no permissions
と表示する問題が起こる場合、adb サーバーを root で再起動してみてください:
# adb kill-server # adb start-server
NVIDIA Tegra プラットフォーム
あなたのアプリケーションが NVIDIA の Tegra プラットフォームを対象にする場合、NVIDIA によって提供されているツールやサンプル、ドキュメントなどをインストールすると良いでしょう。NVIDIA Developer Zone for Mobile には2つのツールが存在します:
- Tegra Android Development Pack には Eclipse ADT に関連するツール (NVIDIA Debug Manager) とそのドキュメントが入っています。
- Tegra Toolkit にはツール (ほとんどは CPU と GPU の最適化に関するもの) とサンプル、ドキュメントが入っています。
どちらも AUR からはインストールできません、ダウンロードするのに NVIDIA のサイトで登録・ログインが必要だからです。
Android のビルド
以下の手順は 公式の AOSP のビルド手順 を元にしています。LineageOS などの Android 派生環境の場合、大抵は追加のステップが必要になります。
必要なパッケージ
どのバージョンの Android でも、ビルドするには以下のパッケージをインストールする必要があります:
- gcc-multilib[リンク切れ: 置換パッケージ: gcc] git gnupg flex bison gperf sdl wxgtk[リンク切れ: 置換パッケージ: wxgtk2] squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt python2-virtualenv bc rsync ncurses5-compat-libsAUR lib32-zlib lib32-ncurses lib32-readline lib32-ncurses5-compat-libsAUR
aosp-develAUR メタパッケージで上記のパッケージを一度に全てインストールできます。
さらに LineageOS は以下のパッケージを必要とします:
lineageos-develAUR メタパッケージで上記のパッケージを一度に全てインストールできます。
Java Development Kit
- Android 7 と 8 (Nougat と Oreo) では OpenJDK 8 が必要です [1]。jdk8-openjdk パッケージでインストールできます。
- Android 5 と 6 (Lollipop と Marshmallow) では、OpenJDK 7 が必要です。jdk7-openjdk パッケージでインストールできます。
古いバージョンでは Oracle JDK をインストールする必要があります [2]。OpenJDK では動作しません。
- Gingerbread から KitKat (2.3 - 4.4) では、Java 6 が必要です。AUR の jdk6AUR パッケージでインストールできます。
- Cupcake から Froyo (1.5 - 2.2) では、Java 5 が必要です。AUR の jdk5AUR パッケージでインストールできます。
ビルド環境の設定
ビルドのためのディレクトリを作成:
$ mkdir ~/android $ cd ~/android
デフォルトの Python をバージョン3からバージョン2に変更する必要があります:
$ virtualenv2 venv $ source venv/bin/activate
ソースコードのダウンロード
リポジトリの複製を行います。Android を初めてビルドするときや、ブランチを切り替えたいときに必要です。
repo
には-j
スイッチがありmake
で使用するのと意味は同じです。同時ダウンロードの数を決めるので、ダウンロードのネットワーク帯域に合わせて調整してください。
-b
スイッチでチェックアウトするブランチ (Android のリリース) を指定する必要があります。スイッチを付けなかった場合、マスターブランチが取得されます。
$ repo init -u https://android.googlesource.com/platform/manifest -b master $ repo sync -j4
しばらく待って下さい。未コンパイルのソースコードと、.repo
と .git
ディレクトリで、10 GB を軽く超えます。Android 6.0.1 現在、コードベースの合計は 40 GB です。
コードのビルド
AOSP のために実行する必要があること:
$ source build/envsetup.sh $ lunch full-eng $ make -j4
lunch に引数を付けないで実行すると、どのビルドを作成するか聞かれます。-j は並列実行するジョブの数を指定します。コア・スレッド数の1倍から2倍の間で設定します。
ビルドには非常に長い時間がかかります。
ビルドのテスト
完了したら、完成したイメージを実行・テストしてください:
$ emulator
書き込みイメージの作成
書き込みできるイメージを作成するには:
$ make -j8 updatepackage
out/target/product/hammerhead
に書き込みできる zip イメージが作成されます (hammerhead はデバイスの名前に置き換えて下さい)。
Android の復元
ときには、Android 携帯端末にカスタム ROM を書き込んだ後に、標準の Android に戻したいという場合もあるでしょう。端末への書き込みについては、XDA フォーラム を参照するようにしてください。
Fastboot
Fastboot (と ADB) は android-tools パッケージに付属しています。
Samsung 端末
Samsung の端末は Fastboot ツールを使って書き込みを行うことができません。Heimdall か Odin (Windows と VirtualBox を使用) を利用するのが唯一の方法です。
Heimdall
Heimdall は Samsung の携帯電話にファームウェア (ROM) を書き込むのに使われるクロスプラットフォームのオープンソースツールスイートです。Odin の代わりとして使えるツールとして知られています。Heimdall は heimdall や heimdall-gitAUR でインストールすることが可能です。
実際に書き込みを行う手順は Heimdall の GitHub ページ や XDA フォーラム を参照してください。
Odin (Virtualbox)
Odin を使うことで Samsung のデバイスに標準の Android をリストアさせることができます。ただし VirtualBox が必須です。詳しくは、XDA のスレッド を見てください。
Arch Linux による手順:
- VirtualBox をインストールしてください。エクステンションパックと guest additions も必要です。
- VirtualBox の仮想ハードドライブに Windows オペレーティングシステム (と VirtualBox の guest additions) をインストールしてください。Odin が動くのであればどういうふうにインストールしてもかまいません。
- Windows オペレーティングシステムの VirtualBox 設定を開いて、USB から Enable USB 2.0 (EHCI) Controller にチェックを入れてください。
- Windows オペレーティングシステムが動作している VirtualBox で、メニューバーの Devices をクリックして、USB Devices から USB でコンピュータに接続している Samsung の携帯電話をクリックしてください。
Windows 関連リンク:
- Samsung のドライバーは こちら からダウンロードできます。
- Odin は こちら からダウンロードできます。
- Samsung の Android ファームウェアは こちら からダウンロードできます。
全てが問題ないことを確認するには、Samsung デバイスを接続してダウンロードモードにして、Odin を開いてください。Message という名前の白いボックス (左下) に、以下のように表示されているはずです:
<ID:0/003> Added!!
上記のメッセージは Odin からデバイスが認識されていて、書き込みの準備が整ったことを意味しています。
他の接続方法
Android File Transfer
android-file-transfer は Mac 用の Android File Transfer と同じようなシンプルな UI を備えた信頼性のある MTP クライアントです。
adb-sync
adb-sync (adb-sync-gitAUR でインストールできます) は ADB を使って PC と Android デバイスのファイルを同期するツールです。
AirDroid
AirDroid はウェブブラウザからファイルにアクセスするための Android アプリです。
Send Anywhere
sendanywhereAUR は速度とシンプリシティに重きを置いているクロスプラットホームのファイル転送ソリューションです。simplicity.
AndroidScreencast
AndroidScreencast は Android を PC から確認・操作することができます (ADB を使用)。
FTP
Arch で FTP サーバーを動作させて携帯からサーバーに接続したり、携帯で FTP サーバーを動作させて Arch から接続することができます。
アプリケーション一覧/インターネット#FTP を見て下さい。Anroid で使える FTP クライアント/サーバーは多数存在します。
KDE Connect
kdeconnect は Android デバイスを KDE デスクトップに統合します。通知やクリップボードの同期、マルチメディアの操作、ファイルや URL の共有などが可能です。詳しくは KDE#Android との統合を参照。
SSH サーバー
Android で使える SSH サーバーは多数存在します。scp
コマンドでファイルを転送できるようになります。SSH を参照。
Samba
Samba を参照。
ヒントとテクニック
デバッグ中に "Source not found"
大抵はデバッガが Java コードにステップインしたがっています。Android SDK には Android のソースコードは付属していないため、このようなエラーが発生します。ステップフィルターを利用して Java ソースコードにジャンプしないようにするのが解決法としてはベストです。デフォルトではステップフィルターは有効になっていません。有効化するには:
Window -> Preferences -> Java -> Debug -> Step Filtering
全てのアイテムを選択してください。必要であれば android.* パッケージを追加することができます。詳しくは次のフォーラムの投稿を見てください: http://www.eclipsezone.com/eclipse/forums/t83338.rhtml
SD カード上に Linux ディストリビューション
このスレッド に書かれているように Debian をインストールすることができます。chroot で Arch をインストールするガイドが archlinuxarm.org フォーラム にあります。
トラブルシューティング
Android Studio: Android Virtual Devices show 'failed to load'.
#Android Studio に書いているように ANDROID_HOME
変数をエクスポートしてください。
Android Studio: 'failed to create the SD card'
x86_64 環境の Arch で AVD (Android Virtual Device) を実行しようとしたときにエラーが表示される場合、Multilib リポジトリから lib32-gcc-libs パッケージをインストールしてください。
aapt: No such file or directory
ビルドツールには32ビットのバイナリが含まれているため、32ビットのライブラリを必要とします。SDK を手動でインストールする場合、multilib/lib32-libstdc++5 と multilib/lib32-zlib をインストールしなくてはなりません。
ValueError: unsupported pickle protocol
次のコマンドで解決できます:
$ rm ~/.repopickle_.gitconfig
上記のコマンドで解決しない場合、次のコマンドを実行してみてください:
$ rm `find /path/to/android-root -name .repopickle_config`
libGL error: failed to load driver: swrast
AVD が間違ったバージョンの libstdc++ をロードしています。~/Android/Sdk/emulator/lib64/
(64ビット) または ~/Android/Sdk/emulator/lib/
(32ビット) から libstdc++ を削除してください。例:
$ rm -r ~/Android/Sdk/emulator/lib64/libstdc++
もしくは以下のように ~/.profile
で ANDROID_EMULATOR_USE_SYSTEM_LIBS
を設定します:
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
詳しくは Android Studio のユーザーガイド https://developer.android.com/studio/command-line/variables.html#studio_jdk を参照してください。
.desktop ファイルについては Exec 行で env コマンドを使うことで修正できます (デスクトップエントリ#環境変数の修正を参照):
env ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
sh: glxinfo: command not found
エラーの全文:
Cannot launch AVD in emulator. Output: sh: glxinfo: command not found sh: glxinfo: command not found libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 24 (X_GLXCreateNewContext) Value in failed request: 0x0 Serial number of failed request: 32 Current serial number in output stream: 33 QObject::~QObject: Timers cannot be stopped from another thread
glxinfo (mesa-demos パッケージ) をインストールしてみてください。コンピュータに十分な性能がある場合、ソフトウェアを使ってグラフィックをレンダリングできます。Tools -> Android -> AVD Manager から AVD を編集 (ペンのアイコンをクリック) して、"Emulated Performance -> Graphics" で "Software - GLES 2.0" を選択してください。