ジャンル不定の日記です。

Androidアプリ開発

以前から何度かAndroidのアプリ開発をやってみたいと考えたことがあったが、
統合開発環境は使い方を覚えなければいけなくテキスト単純なエディタで開発したいが、最初の頃はググっても統合開発環境のEclipseを使った開発方法ばかりが出てきて断念してた。
だが、最近はEclipseを使わないAndroidのアプリ開発方法に関する情報も増えてきてるんで、重い腰を上げてアプリ開発やってみようかと・・・


開発にはArch LinuxのメインPCを使う。
https://archlinuxjp.kusakata.com/wiki/Android
↑Arch Wikiの情報を元にAndroid SDKを入れて開発環境を用意する。
パッケージは全てAURにあるが、
  1. android-sdk
  2. android-sdk-platform-tools
  3. android-sdk-build-tools
の3つが必要とのこと。

SDKのファイルをユーザー権限で変更できるように、
# groupadd sdkusers
# gpasswd -a <user> sdkusers
# chown -R <user>:sdkusers /opt/android-sdk/
# chmod -R 0774 /opt/android-sdk/
と、グループを作成してユーザーをグループに追加。
SDKのディレクトリの所有者と権限を変更。

あと、Android端末を持っているなら元々入れている人が多いと思うが、インストール等にADBも使う。
公式リポジトリのandroid-toolsでADBがインストールできる。

以前にエミュレーターを利用するためにSDK入れてあったので、ここまでは元々準備してあった。
以下が今日やった作業。


元々、エミュレーターのために最新のandroid-platformがインストールしてあったが、
アプリ開発の際に対象端末を指定する必要があり、Android 4.0を以降を対象にするなら最新でない
platformをインストールしたほうが良さそう。
Android 4.0はAPIレベル14であり、AURからandroid-platform-14をインストールできるが、
$ android sdk
とSDKを起動して、SDKの機能でGUIインストールができる。
AURでいくつもパッケージを入れるのは面倒なので、SDKの方で入れた。


$ android avd
で対象バージョンのAndroidエミュレータを作成。


$ android list targets
でデバイスの一覧が表示されるが、プロジェクト作成時に、ここで表示される「id」を指定する必要がある。


「android create project」でプロジェクトの作成ができる。
$ android create project -n myproject -t 1 -p ./myproject -k com.example.myproject -a MainActivity
オプションを指定する必要があり、
-n プロジェクト名
-t 「
android list targets」で確認できる「id」
-p プロジェクトのディレクトリ
-k パッケージ名
-a アクティビティ名

ntpは問題ないと思うが、
kのパッケージ名は他のAndroidアプリと被らないように命名する必要があり、一般的には被らないようにするため、ドメイン名を逆向きにした感じで命名するぽい。
アプリ用のドメインは持ってないんで、とりあえずexample.comにした。
注意事項として、「.」で区切られた各文字列の先頭に数字はダメぽい。先頭は英字。

aの
アクティビティ名は、トップ画面のアクティビティのクラス名?
好きな名前をつけられるようだが、一般的には「MainActivity」じゃないかと。

「android create project」で、pで指定したディレクトリにプロジェクトのファイル群が作成される。


プロジェクトのビルドにantを使うのでインストール。
# pacman -S apache-ant
Archではapache-ant」というパッケージ名。
antはビルド支援ツールのようで、入れずに直接javac使ってコンパイルできないか?
とも思ったのだが、
プロジェクトの作成時に「build.xml」が作成され、antがそれにしたがってビルドしてくれるようなのでantは使ったほうが良さそう。

あと、自分の場合は最初から入ってるが、当然javaのコンパイル用に
openjdkとかOracleのJDKとか、コンパイラが必要なはず。


プロジェクトのビルドは、プロジェクトのルートディレクトリで、
ant debug
ant release
↑どちらかみたい。
binディレクトリに.apkが生成されるが、
debugだとdebug.apk、releaseだとunsigned.apkが生成される。
認証しないと
unsigned.apkしか作成されずインストールできないようなので、正式にアプリを公開する場合以外はdebugにするぽい。
作成直後のプロジェクトで空のアプリが作成可能。


アプリのインストールはADBを使う。
$ android avd
からエミュレータを起動し、
$ adb devices
でデバイス名を確認。
$ adb -s デバイス名 install bin/myproject-debug.apk
ADBで認識するデバイスが1つならデバイスを指定する必要はないが、端末が複数ある時に間違えて実機にインストールしないようにadbの-sオプションでデバイスを指定したほうが良さそう。
というか、実機を複数繋いでる時に間違えて操作しちゃったことが何度かあるから、普段から-sオプションでデバイス指定したほうが良いのかもしれないな・・・
エミュレーターのデバイスは「emulator-xxxx」って感じになってると思う。
adbはユーザー権限で使ったが、環境によってはサーバー起動の際にroot権限が必要な場合もあるかも。

アプリの削除は

$ adb -s デバイス名 uninstall パッケージ名
adbからのアプリアンインストールはパッケージ名での指定となる。
プロジェクト作成時にkオプションで指定した名前のパッケージとなる。
手元では、削除しないと再インストール(アップデート)はできなかった。

上の手順で成功すればアプリはインストールされ、端末側でアプリを実行することもできるが、
adb -s デバイス名 shell am start -n com.example.myproject/.MainActivity
で、adbからアプリ起動することもできる。



とりあえずここまで。
ここまででアプリの作成法がわかった感じするから、あとはAPIリファレンスとか見てアプリ開発が出来そうな気がしてきた。
以前Eclipse使ってちょっとやった時は覚える気にならない複雑さだったが、Eclipse使わずコマンドラインでの開発なら難しく無さそう。