====== Android Studio ======
===== Fedora 29 x86_64 での開発環境構築手順 =====
以下の構築手順は Fedora 29 x86_64 での開発環境構築手順である。\\
===== Android Studio の入手 =====
[[https://developer.android.com/|Android Developers]] の [[https://developer.android.com/studio|Android Studio]] より [[https://dl.google.com/dl/android/studio/ide-zips/3.3.1.0/android-studio-ide-182.5264788-linux.zip|android-studio-ide-182.5264788-linux.zip]] をダウンロードする。\\
===== Android SDK の入手 =====
Android SDK は Android Studio のインストール中に入手できる。\\
===== Android SDK Tools の入手 =====
[[https://developer.android.com/|Android Developers]] の [[https://developer.android.com/studio|Android Studio]] より [[https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip|sdk-tools-linux-4333796.zip]] をダウンロードする。\\
===== Android NDK の入手 =====
[[https://developer.android.com/ndk/|Android NDK]] の [[https://developer.android.com/ndk/downloads|ダウンロード]] より最新の安定バージョン(r18b)の [[https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip|android-ndk-r18b-linux-x86_64.zip]] をダウンロードする。\\
===== Java (JDK 11) の入手 =====
JDK 11 は [[https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html|Java SE Development Kit 11- - Downloads]] より [[http://download.oracle.com/otn-pub/java/jdk/11.0.2+9/f51449fcd52f4d52b93a989c5c56ed3c/jdk-11.0.2_linux-x64_bin.rpm|jdk-11.0.2_linux-x64_bin.rpm]] をダウンロードする。\\
$ curl -LO -b "oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/11.0.2+9/f51449fcd52f4d52b93a989c5c56ed3c/jdk-11.0.2_linux-x64_bin.rpm"
===== 開発環境構築 =====
以下のディレクトリ構成で環境を構築する。\\
$HOME/
+-Android/
+-android-ndk-r18b/
+-android-sdk/
+-android-sdk-tools/
+-android-studio/
==== Android Studio のインストール ====
android-studio-ide-182.5264788-linux.zip を展開して出てきた android-studio をホームディレクトリ($HOME)の Android の中に移動する。\\
そして、以下のコマンドを実行する。\\
$ cd ~/Android/android-studio/bin/
$ ./studio.sh
「Welcome Android Studio」の画面で「Next」ボタンをクリックする。\\
{{:android:android-studio_001.jpg?600|Welcome Android Studio}}\\ \\
「Install Type」の画面で「Custom」を選択し「Next」ボタンをクリックする。\\
{{:android:android-studio_002.jpg?600|Install Type}}\\ \\
「SDK Components Setup」の画面で全てのコンポーネントにチェックを入れて、「Android SDK Location:」にホームディレクトリの Android/android-sdk ディレクトリを選択し「Next」ボタンをクリックする。\\
{{:android:android-studio_003.jpg?600|SDK Components Setup}}\\ \\
「Verify Settings」の画面で内容を確認し「Next」ボタンをクリックする。\\
{{:android:android-studio_004.jpg?600|Verify Settings}}\\ \\
「Emulator Settings」の画面で「Finish」ボタンをクリックする。\\
{{:android:android-studio_005.jpg?600|Emulator Settings}}\\ \\
「Downloading Components」の画面でコンポーネントのダウンロードが終わるまで待つ。\\
{{:android:android-studio_006.jpg?600|Downloading Components}}\\ \\
「Downloading Components」の画面で「Finish」ボタンをクリックする。\\
{{:android:android-studio_007.jpg?600|Downloading Components - Finish}}\\ \\
「Android Studio」が起動する。\\
{{:android:android-studio_008.jpg?600|Welcome to Android Studio}}\\ \\
==== Android Studio の日本語化 ====
[[https://pleiades.io/pages/pleiades_jetbrains_manual.html|JetBrains 製品の日本語化マニュアル - IntelliJ IDEA]] のページの手順で日本語化する。\\
- そのページより [[http://mergedoc.osdn.jp/#pleiades.html#PLUGIN|Pleiades - Eclipse、IntelliJ などの日本語化プラグイン]] へ行き [[http://ftp.jaist.ac.jp/pub/mergedoc/pleiades/build/stable/pleiades.zip|pleiades.zip]] をダウンロードする。\\
- ダウンロードした pleiades.zip を展開する。
- その中の plugins/jp.sourceforge.mergedoc.pleiades/ を ~/.AndroidStudio3.3/config/jp.sourceforge.mergedoc.pleiades/ へ移動する。\\ ※**~/.AndroidStudio3.3/config**(構成ディレクトリ) は /home/(ユーザ名)/.(製品名バージョン)/config の様になっており OS や製品によって異なる。\\ Android Studio の初回起動時に作成されるが、デフォルトでは不可視になっている。
- ~/Android/android-studio/bin/studio64.vmoptions の最後に以下の2行を追記する。
-Xverify:none
-javaagent:(構成ディレクトリのフルパス)/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Xms256m
-Xmx1280m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djna.nosys=true
-Djna.boot.library.path=
-da
-Dawt.useSystemAAFontSettings=lcd
-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine
-Xverify:none
-javaagent:/home/tomoyan/.AndroidStudio3.3/config/jp.sourceforge.mergedoc.pleiades/pleiades.jar
※**(構成ディレクトリのフルパス)** は ~/.AndroidStudio3.3/config と記述すると以下のようなエラーになるので注意が必要である。
Error opening zip file or JAR manifest missing : ~/.AndroidStudio3.3/config/jp.sourceforge.mergedoc.pleiades/pleiades.jar
Error occurred during initialization of VM
agent library failed to init: instrument
- Android Studio を起動して日本語化されている事を確認する。\\
$ ~/Android/android-studio/bin/studio.sh &
{{:android:android-studio_jp_001.png?680|Android Studio JP}}\\
=== Android Studio を更新した場合 ===
構成ディレクトリのパスが変わるので修正を行う。\\
-Xms256m
-Xmx1280m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djna.nosys=true
-Djna.boot.library.path=
-da
-Dawt.useSystemAAFontSettings=lcd
-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine
-Dsun.tools.attach.tmp.only=true
-Xverify:none
-javaagent:/home/tomoyan/.AndroidStudio3.5/config/jp.sourceforge.mergedoc.pleiades/pleiades.jar
==== Android SDK Tools のインストール ====
[[https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip|sdk-tools-linux-4333796.zip]] を展開して出てきた tools/ ディレクトリを ~/Android/android-sdk-tools/ へ移動する。\\
==== Android NDK のインストール ====
[[https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip|android-ndk-r18b-linux-x86_64.zip]] を展開して出てきた android-ndk-r18b/ ディレクトリを ~/Android/android-ndk-r18b/ へ移動する。\\
==== Java (JDK 11) のインストール ====
JDK 10 を rpm コマンドでインストールする。\\
Fedora の java は 1.8.0 なので、これを alternatives コマンドで 11.0.2 を利用する様に指示する。\\
$ sudo rpm -ivh jdk-11.0.2_linux-x64_bin.rpm
$ sudo alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.fc29.x86_64/jre/bin/java)
*+ 2 /usr/java/jdk-11.0.2/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
$ java -version
java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
=== 環境変数の設定 ===
PATH と JAVA_HOME の設定を行う。\\
$ sudo vi /etc/profile.d/java.sh
export PATH=$PATH:/usr/java/jdk-11.0.2/bin
export JAVA_HOME=/usr/java/jdk-11.0.2
設定を有効化するために以下のコマンドを実行する。\\
$ source /etc/profile.d/java.sh
==== 環境変数の設定 ====
PATH、ANDROID_HOME、ANDROID_NDK の環境変数を設定する。\\
$ vi ~/.bashrc
export PATH="$PATH:$HOME/Android/android-sdk-tools/bin:$HOME/Android/android-sdk/platform-tools:$HOME/Android/android-ndk-r18b"
export ANDROID_HOME="$HOME/Android/android-sdk"
export ANDROID_NDK="$HOME/Android/android-ndk-r18b"
==== Android Studio ショートカットの追加 ====
デスクトップメニューに Android Studio を追加する。\\
$ vi ~/.local/share/applications/android-studio.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Android Studio
Icon=/home/tomoyan/Android/android-studio/bin/studio.png
Path=/home/tomoyan/Android/android-studio/bin
Exec=/home/tomoyan/Android/android-studio/bin/studio.sh
Wayland ではアプリケーションの状態を失うことなくGNOMEシェルを再起動(ALT + F2 で r を入力して Enter)できない為、一旦ログアウトしてログインし直すとデスクトップメニューに Android Studio ショートカットが追加される。\\
===== Android アプリ開発時のデフォルト設定 =====
複数人のチームで開発を行う場合に備えて、Android Studio のデフォルト設定を行っておく。\\
Android Studio のデフォルト設定を行うには、「Android Studio へようこそ」の画面右下の「構成」をクリックし「設定」を選択する。\\
{{:android:android-studio_welcome_configure.png?400|構成}} {{:android:android-studio_welcome_settings.png?400|設定}}\\
「エディター」の「ファイル・エンコーディング」を開き以下の様に設定する。\\
グローバル・エンコーディング: UTF-8
プロジェクト・エンコーディング: UTF-8
プロパティ・ファイルのデフォルト・エンコード: UTF-8
UTF-8 ファイルの作成: with NO BOM
{{:android:android-studio_settings_editor_file_encodings.png?800|エディターのファイル・エンコーディング}}\\
「エディター」の「コード・スタイル」を開き、各種言語ごとにコード・スタイルをチームで統一しておく。\\
Java\\
{{:android:android-studio_settings_editor_code_style_java.png?800|Java}}\\
C/C++\\
{{:android:android-studio_settings_editor_code_style_ccpp.png?800|C/C++}}\\
Groovy\\
{{:android:android-studio_settings_editor_code_style_groovy.png?800|Groovy}}\\
Kotlin\\
{{:android:android-studio_settings_editor_code_style_kotlin.png?800|Kotlin}}\\
XML\\
{{:android:android-studio_settings_editor_code_style_xml.png?800|XML}}\\
Kotlin のコーディング・スタイルについては、Google の [[https://developer.android.com/kotlin/style-guide|Kotlin style guide | Android Developers]]を参考にすると良いだろう。\\
https://developer.android.com/kotlin/style-guide\\
===== Android Studio の多重起動 =====
Android Studio は多重起動する事が出来ないので、複数ウィンドウを開くことで対処できる。\\
$ ~/Android/android-studio/bin/studio.sh &
$ ~/Android/android-studio/bin/studio.sh &
Already running
メニューの [ファイル] - [設定(T)...] の「外観 & 振る舞い > システム設定」で「プロジェクトのオープン時」を以下の様に設定する。\\
「◎新規ウィンドウでプロジェクトを開く」
◯同じウィンドウでプロジェクトを開く
◯プロジェクトを開くウィンドウを確認する
「新規ウィンドウでプロジェクトを開く」に設定して [OK] ボタンを押す。\\
その後は、メニューの [ファイル] - [新規] - [新規プロジェクト] で、別ウィンドウでプロジェクトが開くようになる。\\
または、メニューの [ファイル] - [開く...] で、別ウィンドウで既存プロジェクトを開く事ができるようになる。\\
===== Inotify Watches Limit =====
インテリジェントIDEの場合、作業中のファイルの外部からの変更を監視するためにバックグラウンドプロセスを回している。\\
バックグラウンドプロセスが使用する方法はプラットフォーム固有であり、Linuxでは Inotify 機能である。\\
Inotifyでは、プロジェクト内の各ディレクトリに「ウォッチハンドル」を設定する必要があり、デフォルトの監視ハンドルの制限では、適度な規模のプロジェクトでは不十分な場合があり、制限に達すると、IntelliJプラットフォームはディレクトリツリーの再帰的スキャンにフォールバックすることになる。\\
このような状況を防ぐために、監視制限を増やすことをお勧めする。(例えば 512K)\\
[[https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit|Inotify Watches Limit - IntelliJ IDEA - Confluence]] より。\\
\\
Fedora 29 では標準で 512K である。
$ sysctl -n fs.inotify.max_user_watches
524288
$ sudo vi /etc/sysctl.conf
1024K に設定してみる。\\
# Android Studio - Inotify Watches Limit の設定
fs.inotify.max_user_watches = 1048576
設定を反映するために以下のコマンドを実行する。\\
$ sudo sysctl -p --system
* Applying /etc/sysctl.conf ...
fs.inotify.max_user_watches = 1048576
===== Android プロジェクトに Firebase を追加する =====
- メニューの [ツール] - [Firebase] をクリック。
- Firebase アシスタントが表示されるので、ここでは Firebase Cloud Messaging(FCM) を使うために「Cloud メッセージング」をクリックし「Set up Firebase Cloud Messaging」をクリックする。\\ {{:android:android-studio_firebase-assistant_001.png?300|Firebase Assistant 001}}
- Set up Firebase Cloud Messaging が表示されるので、[Connect to Firebase] ボタンをクリックする。\\ {{:android:android-studio_firebase-assistant_002.png?300|Firebase Assistant 002}}
- ブラウザが起動して Google アカウントでログインする様に求められるので指示に従う。\\ {{:android:android-studio_firebase-assistant_003.png?350|Firebase Assistant 003}}
- 「Android Studio が Google アカウントへのアクセスをリクエストしています」と表示されるので [許可] ボタンをクリックする。\\ {{:android:android-studio_firebase-assistant_004.png?350|Firebase Assistant 004}}
- Android Studio に「Firebaseへ接続」の画面が表示されるので、[Firebase へ接続] ボタンをクリックする。\\ {{:android:android-studio_firebase-assistant_005.png?640|Firebase Assistant 005}}
- 次に Set up Firebase Cloud Messaging の [Add FCM to your app] ボタンをクリックする。\\ {{:android:android-studio_firebase-assistant_002.png?300|Firebase Assistant 002}}
- 「Add FCM to your app」画面が表示されるので、ターゲット・モジュールを選択して [Accept Changes] ボタンをクリックする。\\ {{:android:android-studio_firebase-assistant_006.png?800|Firebase Assistant 006}}
- **google-services.json** の追加、**build.gradle** の変更が行われる。\\ **google-services.json** は、__**プロジェクトID や API Key などの機密情報が含まれる**__為 SCM にコミットしない方がよい。\\
{
"project_info": {
"project_number": "123456789012",
"firebase_url": "https://projectname-android.firebaseio.com",
"project_id": "projectname-android",
"storage_bucket": "projectname-android.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:123456789012:android:abcdef1234567890",
"android_client_info": {
"package_name": "net.tomoyan.projectname"
}
},
"oauth_client": [
{
"client_id": "123456789012-y67weastetrrtyytyrvtrgrectrvtrtr.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "net.tomoyan.projectname",
"certificate_hash": "123456789abcdef123456789abcdef123456789a"
}
},
{
"client_id": "123456789012-y67weastetrrtyytyrvtrgrectrvtrtr.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "yfytyfkyukubto6rudtawshreycetiuyo8pimpi"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 2,
"other_platform_oauth_client": [
{
"client_id": "123456789012-y67weastetrrtyytyrvtrgrectrvtrtr.apps.googleusercontent.com",
"client_type": 3
}
]
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}
**classpath 'com.google.gms:google-services:4.1.0'**\\ **implementation 'com.google.firebase:firebase-messaging:15.0.2'**\\ **apply plugin: 'com.google.gms.google-services'**\\ \\ が **build.gradle** に以下の様に追加される。
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.1.0'
}
}
dependencies {
implementation 'com.google.firebase:firebase-messaging:15.0.2'
}
apply plugin: 'com.google.gms.google-services'
===== build.gradle で JavaCompile にオプションを渡す方法 =====
build.gradle に以下の記述を追加する。(**JavaCompile** に **-Xlint:unchecked** と **-Xlint:deprecation** を渡す場合)
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
// unchecked は何の型が入るか定義されてないものを表示、deprecation は非推奨なものを表示
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
===== Android x86 KVM 仮想マシンに接続する方法 =====
Android x86 仮想マシンで「端末エミュレータ」を起動する。\\
端末エミュレータで以下のコマンドを実行し eth0 の IPアドレスを調べる。\\
x86_64:/ $ ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:45 errors:0 dropped:0 overruns:0 frame:0
TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7344 TX bytes:7344
eth0 Link encap:Ethernet HWaddr 52:54:00:72:67:7f Driver e1000
inet addr:192.168.1.128 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::3035:d5a0:74ca:40d8/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:50068 errors:264 dropped:0 overruns:0 frame:264
TX packets:15545 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:61868429 TX bytes:4179438
x86_64:/ $
IPアドレスが 192.168.1.128 である事が分かる。\\
Android Studio の画面左下のターミナルをクリックして、ターミナルに以下のコマンドを入力する。\\
$ adb connect 192.168.1.128
connected to 192.168.1.128:5555
これで Android Studio のメニューから [実行(U)] - [実行(U)] を選択すると「デプロイ対象の選択」一覧に「QEMU Standard PC (Android 8.1 x86)」が表示される。\\ {{:android:android-studio-android_x86_connect.png?640|Android_x86_Connect}}
===== トラブルシューティング =====
==== Android Studio 3.3.2 で Kotolin の新規プロジェクトが sync failed になる ====
{{:android:kotolin_project_sync_failed_001.png?640|Kotolin Project sync failed}}\\
/home/tomoyan/my_projects/MyApplication/MyApplication.iml
プロジェクトルートにある *.iml の タグを以下の様に修正する。\\
**修正前**\\
**修正後**\\
タグに\\
**external.linked.project.id="(プロジェクト名)"** 属性と\\
**external.linked.project.path="$MODULE_DIR$"** 属性と\\
**external.root.project.path="(プロジェクトのフルパス)"** 属性を追記する。\\
更に ** に書き換える。\\
メニューの [ファイル] - [すべて保存(S)] をクリックする。\\
更にメニューの [ファイル] - [Gradle ファイルとプロジェクトを同期] をクリックする。\\
ビルド - 同期化が Build completed success になる事を確認する。\\
{{:android:kotolin_project_sync_failed_002.png?640|Kotolin Project Build completed success}}\\
===== 参考文献 =====
[[https://pleiades.io/pages/pleiades_jetbrains_manual.html|JetBrains 製品の日本語化マニュアル - IntelliJ IDEA]]\\
[[https://tecadmin.net/install-oracle-java-11-lts-on-centos/|How To Install Java 11 on CentOS 7/6 & Fedora 29-25 - TecAdmin]]\\
[[https://fedoraproject.org/wiki/Alternatives_system|Alternatives system - Fedora Project Wiki]]\\
[[https://linux.die.net/man/8/alternatives|alternatives(8) - Linux man page]]\\
[[https://stackoverflow.com/questions/18689365/how-to-add-xlintunchecked-to-my-android-gradle-based-project|How to add -Xlint:unchecked to my Android Gradle based project? - Stack Overflow]]\\