Androidのアプリ開発関連のブログ

Google Playでのアプリ配信

Google Playでアプリを配信するには、Google Playにデベロッパー登録(要$25)する。

  • デベロッパー登録(要$25)
  • デフォルト言語を設定してアプリ名や紹介文などを記入。
  • スクリーンショットが最低2枚を登録
  • Google Play用の512x512アイコンを登録
  • 宣伝用画像1024x500を登録
  • その他指示に従って項目を埋める
って感じになる。

正式版APKの作成

正式版APKの作成をする場合は署名が必要。


keytool -genkey -v -keystore 出力ファイル名 -alias キーの名前 -validity 期限までの日数 -keyalg RSA
で署名のファイルが作成できる。
コマンドを実行すると質問が出てくるので、姓名や所在地、パスワードを入力する。
期限までの日数は25年以上を推薦とのことで、10000にした。

ファイルが出力されるので、
ant.propertiesに、
key.store=ファイル名(keytoolコマンドの-keystore
key.alias=キーの名前(keytoolコマンドの-alias
と記載する。

上記手順の後、
ant release
で正式なapkが作成できる。

Androidエミュレータ(公式)

テストに使うAndroidエミュレータは、
android avd
からGUIでデバイスを作成して、そのままGUIから起動できるが、糞遅い。
Windowsの場合はHAXMというのをインストールすればCPUの仮想化支援機能が使えるらしいが、Linuxは非対応。

だが、エミュレーターをAVDから起動せずに、コマンドで直接起動すればQEMUオプションでKVMが利用できる。
CPUの仮想化支援機能を使うなら、AVDで作成する仮想デバイスはARMでなくx86でなければいけない。
古いバージョンのplatformにはx86が存在しないので、あまり古いバージョンでは仮想化支援機能が使えない。


AVDでx86のデバイスを作成したら、
emulator -list-avds
でデバイスの一覧が確認できる。

emulator -avd デバイス名 -qemu -enable-kvm
と「-enable-kvm」して起動するだけで速い。


qemuはインストールしてないはずだが、emulatorに内蔵されてるから別途入れる必要はないぽい。
kvmはたぶんArchのkernelで最初から利用できると思うので、こちらも別途入れてないはず。

アプリ開発方法

Androidアプリの開発には統合開発環境のEclipseを使ってる方が多いが、
GUIの統合開発環境を使うとUIの操作方法を覚えなくてはいけないので、めんどい。普通のテキストエディターで書きたい。
その場合でも、直接javacはせずにantは使ったほうが良さそう。

開発用PCのOSはArch Linux使ってますんで、環境構築関連はArch Linuxでの方法です。


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も使う。
Arch公式リポジトリのandroid-toolsでADBがインストールできる。


エミュレーターでのテストのためにandroid-platformが最低1つ必要、
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 アクティビティ名

-t」オプションで設定されるターゲットAPIレベルは、最低要件とは別なので高くても問題ない。
テストしやすいバージョンを選べば良さそう。

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

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

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


プロジェクトのビルドにantを使うのでインストール。
# pacman -S apache-ant
Archではapache-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からアプリ起動することもできる。