android:android-studio

Android Studio

以下の構築手順は Fedora 29 x86_64 での開発環境構築手順である。

Android SDK は Android Studio のインストール中に入手できる。

Android DevelopersAndroid Studio より sdk-tools-linux-4333796.zip をダウンロードする。

Android NDKダウンロード より最新の安定バージョン(r18b)の android-ndk-r18b-linux-x86_64.zip をダウンロードする。

JDK 11 は Java SE Development Kit 11- - Downloads より 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-ide-182.5264788-linux.zip を展開して出てきた android-studio をホームディレクトリ($HOME)の Android の中に移動する。
そして、以下のコマンドを実行する。

$ cd ~/Android/android-studio/bin/
$ ./studio.sh

「Welcome Android Studio」の画面で「Next」ボタンをクリックする。
Welcome Android Studio

Install Type」の画面で「Custom」を選択し「Next」ボタンをクリックする。
Install Type

「SDK Components Setup」の画面で全てのコンポーネントにチェックを入れて、「Android SDK Location:」にホームディレクトリの Android/android-sdk ディレクトリを選択し「Next」ボタンをクリックする。
SDK Components Setup

「Verify Settings」の画面で内容を確認し「Next」ボタンをクリックする。
Verify Settings

「Emulator Settings」の画面で「Finish」ボタンをクリックする。
Emulator Settings

「Downloading Components」の画面でコンポーネントのダウンロードが終わるまで待つ。
Downloading Components

「Downloading Components」の画面で「Finish」ボタンをクリックする。
Downloading Components - Finish

「Android Studio」が起動する。
Welcome to Android Studio

JetBrains 製品の日本語化マニュアル - IntelliJ IDEA のページの手順で日本語化する。

  1. そのページより Pleiades - Eclipse、IntelliJ などの日本語化プラグイン へ行き pleiades.zip をダウンロードする。
  2. ダウンロードした pleiades.zip を展開する。
  3. その中の plugins/jp.sourceforge.mergedoc.pleiades/ を ~/.AndroidStudio3.3/config/jp.sourceforge.mergedoc.pleiades/ へ移動する。
    ~/.AndroidStudio3.3/config(構成ディレクトリ) は /home/(ユーザ名)/.(製品名バージョン)/config の様になっており OS や製品によって異なる。
    Android Studio の初回起動時に作成されるが、デフォルトでは不可視になっている。
  4. ~/Android/android-studio/bin/studio64.vmoptions の最後に以下の2行を追記する。
    -Xverify:none
    -javaagent:(構成ディレクトリのフルパス)/jp.sourceforge.mergedoc.pleiades/pleiades.jar
    ~/Android/android-studio/bin/studio64.vmoptions
    -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
  5. Android Studio を起動して日本語化されている事を確認する。
    $ ~/Android/android-studio/bin/studio.sh &

    Android Studio JP

Android Studio を更新した場合

構成ディレクトリのパスが変わるので修正を行う。

~/Android/android-studio/bin/studio64.vmoptions
-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

sdk-tools-linux-4333796.zip を展開して出てきた tools/ ディレクトリを ~/Android/android-sdk-tools/ へ移動する。

android-ndk-r18b-linux-x86_64.zip を展開して出てきた android-ndk-r18b/ ディレクトリを ~/Android/android-ndk-r18b/ へ移動する。

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
/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
~/.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 を追加する。

$ vi ~/.local/share/applications/android-studio.desktop
~/.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 Studio のデフォルト設定を行っておく。
Android Studio のデフォルト設定を行うには、「Android Studio へようこそ」の画面右下の「構成」をクリックし「設定」を選択する。
構成 設定
「エディター」の「ファイル・エンコーディング」を開き以下の様に設定する。

グローバル・エンコーディング: UTF-8
プロジェクト・エンコーディング: UTF-8
プロパティ・ファイルのデフォルト・エンコード: UTF-8
UTF-8 ファイルの作成: with NO BOM

エディターのファイル・エンコーディング
「エディター」の「コード・スタイル」を開き、各種言語ごとにコード・スタイルをチームで統一しておく。
Java
Java
C/C++
C/C++
Groovy
Groovy
Kotlin
Kotlin
XML
XML
Kotlin のコーディング・スタイルについては、Google の Kotlin style guide | Android Developersを参考にすると良いだろう。
https://developer.android.com/kotlin/style-guide

Android Studio は多重起動する事が出来ないので、複数ウィンドウを開くことで対処できる。

$ ~/Android/android-studio/bin/studio.sh &
$ ~/Android/android-studio/bin/studio.sh &
Already running

メニューの [ファイル] - [設定(T)…] の「外観 & 振る舞い > システム設定」で「プロジェクトのオープン時」を以下の様に設定する。

「◎新規ウィンドウでプロジェクトを開く」
 ◯同じウィンドウでプロジェクトを開く
 ◯プロジェクトを開くウィンドウを確認する

「新規ウィンドウでプロジェクトを開く」に設定して [OK] ボタンを押す。
その後は、メニューの [ファイル] - [新規] - [新規プロジェクト] で、別ウィンドウでプロジェクトが開くようになる。
または、メニューの [ファイル] - [開く…] で、別ウィンドウで既存プロジェクトを開く事ができるようになる。

インテリジェントIDEの場合、作業中のファイルの外部からの変更を監視するためにバックグラウンドプロセスを回している。
バックグラウンドプロセスが使用する方法はプラットフォーム固有であり、Linuxでは Inotify 機能である。
Inotifyでは、プロジェクト内の各ディレクトリに「ウォッチハンドル」を設定する必要があり、デフォルトの監視ハンドルの制限では、適度な規模のプロジェクトでは不十分な場合があり、制限に達すると、IntelliJプラットフォームはディレクトリツリーの再帰的スキャンにフォールバックすることになる。
このような状況を防ぐために、監視制限を増やすことをお勧めする。(例えば 512K)
Inotify Watches Limit - IntelliJ IDEA - Confluence より。

Fedora 29 では標準で 512K である。

$ sysctl -n fs.inotify.max_user_watches
524288
$ sudo vi /etc/sysctl.conf

1024K に設定してみる。

/etc/sysctl.conf
# 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
  1. メニューの [ツール] - [Firebase] をクリック。
  2. Firebase アシスタントが表示されるので、ここでは Firebase Cloud Messaging(FCM) を使うために「Cloud メッセージング」をクリックし「Set up Firebase Cloud Messaging」をクリックする。
    Firebase Assistant 001
  3. Set up Firebase Cloud Messaging が表示されるので、[Connect to Firebase] ボタンをクリックする。
    Firebase Assistant 002
  4. ブラウザが起動して Google アカウントでログインする様に求められるので指示に従う。
    Firebase Assistant 003
  5. 「Android Studio が Google アカウントへのアクセスをリクエストしています」と表示されるので [許可] ボタンをクリックする。
    Firebase Assistant 004
  6. Android Studio に「Firebaseへ接続」の画面が表示されるので、[Firebase へ接続] ボタンをクリックする。
    Firebase Assistant 005
  7. 次に Set up Firebase Cloud Messaging の [Add FCM to your app] ボタンをクリックする。
    Firebase Assistant 002
  8. 「Add FCM to your app」画面が表示されるので、ターゲット・モジュールを選択して [Accept Changes] ボタンをクリックする。
    Firebase Assistant 006
  9. google-services.json の追加、build.gradle の変更が行われる。
    google-services.json は、プロジェクトID や API Key などの機密情報が含まれる為 SCM にコミットしない方がよい。
    google-services.json
    {
      "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 に以下の様に追加される。

    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-Xlint:unchecked-Xlint:deprecation を渡す場合)

build.gradle
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            // unchecked は何の型が入るか定義されてないものを表示、deprecation は非推奨なものを表示
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}

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_x86_Connect

Kotolin Project sync failed

/home/tomoyan/my_projects/MyApplication/MyApplication.iml

プロジェクトルートにある *.iml の <module> タグを以下の様に修正する。
修正前

MyApplication.iml
<?xml version="1.0" encoding="UTF-8"?>
<module external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android-gradle" name="Android-Gradle">
      <configuration>
        <option name="GRADLE_PROJECT_PATH" value=":" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

修正後
<module> タグに
 external.linked.project.id=“(プロジェクト名)“ 属性と
 external.linked.project.path=“$MODULE_DIR$” 属性と
 external.root.project.path=”(プロジェクトのフルパス)“ 属性を追記する。
更に <component name=“NewModuleRootManager” タグに
 LANGUAGE_LEVEL=“JDK_1_7” 属性を追記する。
そして <orderEntry type=“jdk” タグを
 <orderEntry type=“inheritedJdk” /> に書き換える。

MyApplication.iml
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="MyApplication" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$USER_HOME$/my_projects/MyApplication" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android-gradle" name="Android-Gradle">
      <configuration>
        <option name="GRADLE_PROJECT_PATH" value=":" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

メニューの [ファイル] - [すべて保存(S)] をクリックする。
更にメニューの [ファイル] - [Gradle ファイルとプロジェクトを同期] をクリックする。
ビルド - 同期化が Build completed success になる事を確認する。
Kotolin Project Build completed success

  • android/android-studio.txt
  • 最終更新: 2020/01/16 06:01
  • by ともやん