Home>Freeware for Android - Eclipse から AndroidStudio へ移行 -



 2021 年 8 月以降リリースする Androidアプリは次の要件を満たす様、Googleが通知が来ました。 詳細 Google Play の対象 API レベルの要件を満たす
 ・Android App Bundle 形式で公開
 ・Target SDK APIレベル 30(Android 11)以上

 今まで、ずっと Eclipse + AndroidSDK で開発してきましたが、EclipseではBundle形式の資材が作れない様です。
 仕方がないのでAndroid Studioへ移行してみました。
 予想以上に手間がかかり、単純にセットアップ画面を進めるだけでは動いてくれません。5回やり直して(自分の環境では)クリーンな手順を確認できたつもり。以下、その覚書きです。
 (2021/5頃 V4.1.3での情報、バージョンによって結構変わるようです)

■事前情報

 Android Studioを動かす上で必要なものは以下3つ。構成はEclipseでの環境と大差ありません。
 ・IDE(Android Studio本体)
 ・JRE(Java Runtime Environment)
 ・Android SDK
 3つ全てがAndroid Studioのセットアップ作業で登録されます、セットアップ中に登録をSKIPする選択肢はありません。容量は最低7GB程度使用します。

 JREはAndroid Studioのダウンロードzipに含まれています。
 使用するJREの指定はAndroid Studio内のdir設定だけなので、後から変更も可能(環境変数は参照しない)。
 Eclipse用に使っていたJREでも動きます、そっちは32bit版なのでメモリ量設定を上げるとエラーが出ました。
 素直にzip内のJREを使うのが良いです。

 Android SDKはセットアップ作業内で追加ダウンロードされます。デフォルトで5GB程度?
 登録先のdirをセットアップ作業で指定するのですが・・・
 ★注意 dirパス中に英数字以外の文字があるとエラーになります。全角はもちろん、半角空白、「!」等もダメです。意味不明なワナ・・・

 使用するAndroid SDKの指定もAndroid Studio内のdir設定で、後から変更も可能(環境変数は参照しない)。
 Eclipseで使用していたSDKのdirを設定しても動きます。
 ただしEclipse用にセットアップしたSDK ManagerにはAPI 29までのSDK Platformしか表示されず、APIレベル30のSDKがダウンロードできない様です。
 APIレベル30のSDKが使用できないと意味が無いので、素直にAndroid StudioがダウンロードするSDKを使用します。
 新しいSDK Manager、AVD Managrも、セットアップ作業内で利用可能になります。

 あとWindowsで★「Hyper-V」を使用できる様にしているとAndroidエミュレータが動きません。(詳細は後述)

■Android Studio ダウンロード

 公式「Android Studio のインストール」→Android Studio の最新バージョンをダウンロード、へ移動。
 標準のダウンロードリンクは exeファイル。zipファイルの方が扱い易いので「Download options」の方へ移動。
 Windowsユーザは「Windows(64-bit) android-studio-ide-xxxx-windows.zip」をダウンロード。2021/5頃のバージョンは900MBあった。
 正式サポートは64-bitのみとの事。
 ちなみにWindows(64-bit)のzipには32-bit用と思われる起動ファイルも存在するので32-bit OSでも使えるのかもしれない(試してはいない)。
 
■セットアップ作業

 ダウンロードしたzipを任意のdirに解凍します。これがAndroid Studioの本体です。
 解凍先dirのパス文字の制限は無さそうでしたが、上記のSDKのパス制限が有ったので英数字のみのパスにしました。
 起動モジュールは以下。
 〜 \android-studio\bin\studio64.exe (32bit版はstudio.exe?)
 初回起動で、セットアップ処理が動きます。
 以後、セットアップ処理のポイント。
 ・Import Android Studio Settings(古いAndroid Studio設定を引継ぐか?) →初回なので Do not import settings を選択


 ・Data Share(使用状況を Google とシェアするか)→Don't send を良い。
 ・InstallType(個別指定するか?)→上記のdirパス問題があるので「Custom」を選択


 ・Select UI Thema →見た目だけなのでどちらでも良い
 ・SDK Component Setup → SDKのセットアップパス(英数字のみ)を指定する、Componentはデフォルトで可、Intel HAXM(エミュレータの高速動作に必要)が未チェックならチェックする。


 ・Emulator Settings →メモリ割当は2048MBから変えない(Intel HAXMの指定値が2048MBらしい)


 ・「Finish」でダウンロード&セットアップ開始。


 ↓
 初期画面が出れば第一段階完了。


 レジストリ、環境変数の登録はありません。関連するファイルは以下のdirにセットアップされています。
 ・Android Studio のzipを解凍したdir
 ・SDKのセットアップに指定したdir
 ・C:\Users\xxxxx\AppData\Local\Google
 ・C:\Users\xxxxx\AppData\Roaming\Google

■日本語化

 世界的に利用されるツールのくせに、多言語対応していません。VisualStudioを見習って欲しい物です・・・余りに使いにくいので日本語化。

 MergeDoc Project(Pleiades)から下段の「Pleiades プラグイン・ダウンロード」−「Windows」を選択、pleiades-win.zipをダウンロードする。
 任意の場所に展開して、Android Studio を停止してから pleiades-win\setup.exeを実行
 「日本語化するアプリケーション」にAndroidStudioのstudio64.exeを指定。「日本語化する」を押下→日本語化されます。

 AndroidStudioを起動すると日本語化されている。


 ただしコレだけではAndroidStudioのログ表示が文字化けする。
 「構成>カスタムVMオプションの編集」を選択、最終行に
-Dfile.encoding=UTF-8
 を追加して「保存する」。これで日本語化完了。


■ライセンス承認

 既存プロジェクトのビルドで以下のエラーが発生。
 Failed to install the following Android SDK packages as some licences have not been accepted.

 ライセンスの承認が必要らしいです・・・
 Android Studio を停止してからCommand Prompt画面を起動。
 〜\android-sdk\tools\bin まで移動して sdkmanager.bat --licenses を投入。


 未承認のpackageがあると何度か <y/N> の確認を聞かれるので全て「y」で応答。
 「All SDK package licenses accepted」が表示されれば完了。
 
■エミュレータ

 まずはコントロールパネルの「アプリと機能」からIntel HAXM(Hardware Accelerated Execution Manager)がインストールされている事を確認。


 もし無ければ、以下のファイルを起動してインストールする。
 〜android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager\haxm-7.6.5-setup.exe

 続いてHAXMが動作するか確認。窓の杜よりVirtualCheckerをダウンロード。
 ダウンロードしたzipを解凍してVirtualChecker.exeを起動。
 Intel VT-Xが「Enabled」ならOK。


 Enableにならない場合は以下をチェックしてみる。
 ・BIOSの設定でVT-Xが無効になっていないか
 ・コントロールパネル「Windowsの機能の有効化」で「Hyper-V」が有効になっていないか(Hyper-VとVT-Xは共存できない)

 
 ここまで確認すれば普通に起動できる筈。メモリの空き(「タスクマネージャ」−「メモリ」−「利用可能」の値)が 3GB以上ないと落ちる事が多い。
 エミュレータ関連のファイルは以下に格納されている。
 ・〜\android-sdk\system-images\ 配下、バージョン毎のベースイメージファイル
 ・〜\Users\xxxxx\.android\avd 配下、AVDマネージャで作成した実行環境
 1環境毎に3〜10GB程度使うので、不要な物は削除した方が良い。

■Eclipse既存プロジェクトの移行

 元のアプリの作り方にも因ると思うのですが、用意されている「プロジェクトのインポート」を使ってもエラーが多発して自動移行は不可能・・・ 以下の「手動」手順で移行しました。

 1.既存と同じパッケージ名で、新規プロジェクトを「空のアクティビティ」で作成。
 2.プロジェクトを閉じる。
 3.既存の以下のファイルを、新規プロジェクト上にコピー&上書き。
 ・AndroidManifest.xml(→ 〜app\src\main\AndroidManifest.xml)
 ・javaソース(→ 〜app\src\main\java\〜)
 ・リソースファイル(→ 〜app\src\main\res\〜 画像を複数dirに分けていた場合は\drawableにまとめて格納)
 4.AndroidManifestにminSdkVersion、targetSdkVersionの記述がある場合は削除。
 5.代わりに 〜app\build.gradle(プロジェクト直下のbuild.gradleではない)のminSdkVersionを修正。targetSdkVersionは30から変更しない。
 6.合わせてversionCode、versionNameも修正(こちらの値がapkに反映される)。
  :
 defaultConfig {
  :
  minSdkVersion XX
  targetSdkVersion 30
  versionCode XX
  versionName "XX"
  :
 7.プロジェクトを開いて「ファイル」−「Gladleファイルとプロジェクトを同期」、「ビルド」−「プロジェクトの作成」を実行。
 8.エラーは余り出ない筈。後は個別に調べて直すしかない。
 9.import android.support.vX.app.〜 はエラーになる。import文を消して、該当のClassから自動インポート(import androidx.core.app.〜)すれば直る。

 私の既存プロジェクトはこの程度で、ビルド、実行可能になりました。
  
■アクションバー復元

 一通り動く様になりました。
 画面の雰囲気はかなり変わったけどまあ良いか、と思ったのですが・・・ 画面上端のアクションバーが消えている。
 アクションバーのメニューから遷移する画面もあるのでアクションバーが無くなるのは許容できません。

EclipseでビルドAndroidStudioでビルド

 アクションバーが消えた正確な原因は良く分からず・・・ android:Theme.Light でActionBarが表示できなくなったらしい?
 対処方法は幾つか有ったが、以下が比較的ラクでした。

【Eclipseプロジェクトの指定】(API 14のデフォルト出力指定をそのまま利用していた筈・・・)
・Activity.java
 public class MainActivity extends Activity { ←Activityを継承している

・AndroidManifest.xml
  <activity
   :
   android:theme="@style/AppTheme" ←activityでAppThemeを指定
   :

・styles.xlm
  :
  <style name="AppTheme" parent="AppBaseTheme"></style>
  <style name="AppBaseTheme" parent="android:Theme.Light"></style> ←「背景色に白、テキスト色に黒を基調、Titleバー有」のTheme
  :

【Android Studio(API30)用に修正した指定】
・Activity.java
 import androidx.appcompat.app.AppCompatActivity; ←AppCompatActivity用のインポート追加
 :
 public class MainActivity extends AppCompatActivity { ←AppCompatActivityを継承

・AndroidManifest.xml
  <application
   :
   android:theme="@style/Theme.AppCompat.Light.NoActionBar" ←application(全体)でTheme.AppCompat.Light.NoActionBarを指定
   :
  <activity
   :
   android:theme="@style/ActionBarTheme" ←アクションバーを表示するactivityにActionBarThemeを指定
   :

・styles.xlm
  :
  <style name="AppTheme" parent="AppBaseTheme"></style>
  <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"></style> ←デフォルトをTheme.AppCompat.Light.NoActionBarに変更
  <style name="ActionBarTheme" parent="Theme.AppCompat.Light.DarkActionBar"></style> ←ActionBarThemeを追記
  :

 修正した結果が以下。ほぼ元通りに動作するように移行できました。

EclipseでビルドAndroidStudioでビルド

  
■APK生成でエラー(2022/5/22追記)

 久しぶりに訳あってAPK(否AAB)をビルドしようとしたらエラーが発生(AAB はビルドできます)。APK のビルドも以前は出来た。
 エラー内容は以下。

 Could not HEAD 'https://jcenter.bintray.com/junit/junit/maven-metadata.xml'.

 JCenter が閉鎖された影響らしいです。以下、対処。

 プロジェクト直下のbuild.gradle(〜app\build.gradleではない)に以下を追記。
  repositories {
    google()
    mavenCentral() ←追記
    jcenter()
  }

 APK ビルドできるようになりました。
  
■Target API31 対応

 PlayStoreを更新するのに Target API31 対応が必須になりました。自分が必要だった対応は以下2点。

@ AndroidManifest.xml に android:exported="true / false" の明記。
 こちらはビルドでエラーになるから明快。  false にすると他のアプリからの intent呼び出しが出来なくなる。
 何も考えないなら android:exported="true" を明記すれば良い。
 false にして他アプリから intent発行すると発行側が何のエラーも出さず(Logcatに何も出ない)に落ちるから分かりにくい。

A Bluetooth 利用権限のユーザ許可。
 権限系は何のエラーも出ず処理がスルーされるので分かりにくい & API31のデバイスは所有が無く、Bluetoothはエミュレータで試験出来ないので悩みました。
 AndroidManifest.xmlに <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> を追加。
 Activity の onCreate に以下の処理を追加。

	ArrayList requestPermissions = new ArrayList<>();
	if(Build.VERSION.SDK_INT > 30) {
		if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
			requestPermissions.add(Manifest.permission.BLUETOOTH_CONNECT);
		}
	}
	if (!requestPermissions.isEmpty()) {
		ActivityCompat.requestPermissions(this, requestPermissions.toArray(new String[0]), 101);
	}
 起動時に以下のダイアログ(エミュレータ画面です)を表示、許可されれば次回以降は表示しなくなります。
 
 使用するAPIによって、BLUETOOTH_ADMIN, BLUETOOTH_SCAN が必要な場合も有ります。


Home>Freeware for Android - Eclipse から AndroidStudio へ移行 - inserted by FC2 system inserted by FC2 system