How to import Eclipse projects to Android Studio
Google Play の2018年11月のアップデートで Target SDK が 26 以上(Android 4.0 以上) のアプリでなければ公開できない制限が設けられました。
当ブログの著者が公開していたアプリは Android 1.6 以上のものが多く、制限を受けることになるためアップデートに対応することにしました。
当時は Eclipse で開発しましたが、現在は Eclipse Android デベロッパーツールのサポートが終了しているため Android Studio にインポートしてビルドしました。
Eclipse で開発したプロジェクトを Android Studio にインポートしてから APK ファイルを作成するまでに必要だった手順をまとめました。
環境
- Windows 10
- Android Studio 3.1.4
Eclipse のプロジェクトをインポートする
Android Studio を起動します。下のような画面ではなければメニューの
File - Close project
をクリックすると下のような画面になります。
右側の下の方にある Import Project をクリックし、Eclipse のワークスペースからインポートしたいプロジェクトのパスを指定します。
インポートできるプロジェクトは一度の操作に一つですが、 別の Eclipse プロジェクト(Facebook Android SDK など)を参照している場合は一緒にインポートしてくれました。
インポートしたプロジェクトを修正する
この後いろいろなエラーが発生するのですが、そのうちの半分くらいはクリックするだけで解決しました。
たとえば下のようなエラーは「Add Google Maven repository and sync project」クリックするとインストールが必要なビルドツールのインストールができます。
下のようなエラーでは「Install build tools ・・・」をクリックします。
Install missing platform(s) and sync project
というエラーもクリックで解決しました。
gradle.build や AndroidManifests.xml のエラーは下のように電球のアイコンをクリックすると解決策が表示されることがあります。
クリックだけで解決したエラーは以下省略します。
build.gradle を手直しする
gradle.build の
Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
というエラーはクリックで解決しないので compile を implementation に書き換えます。
必須ではありませんが、android {} の中に次のオプションを追加しました。
AndroidManifests.xml を手直しする
Eclipse では SDK のバージョンを AndroidManifests.xml で指定していました。
Android Stuio では SDK のバージョンを build.gradle で指定するのですが、今回は次のように設定を変更しました。
manifest 要素に次の属性を追加する
uses-sdk 要素を次のように書き換える
C/C++ コード (JNI) を含む場合は SDK Tools の追加インストールと Android.mk の設定をする
インポートしたプロジェクトには C/C++ のソースコードを含んでいるものもありました。
Eclipse で開発していたときは手動で ndk-build コマンドを毎回実行していましたが Android Studio ではビルドするための設定が必要でした。
メニューの
Tools - SDK Manager
を開いて
Appearance & Behavior > System Settings > Android SDK
の SDK Tools の次の3つの項目にチェックを入れます。
LLDB
CMake
NDK
上のチェックを入れ終わったら Project ビューの C/C++ のソースを含むプロジェクトを右クリックして
Link C++ Project with Gradle
をクリックします。
Build System を ndk-build にして Android.mk ファイルのパスを指定します。
Project Structures を手直しする
このまま署名済み APK ファイルを作成すると
Gradle DSL method not found: 'storeFile()'
というエラーが起きるため、Project Structures を次の通りに設定する必要がありました。
左の一覧からアプリケーションを選択します。モジュールライブラリーなどがある場合はすべて下の設定が必要です。
て Signing タブで設定を追加します。
下の画像では config という名前で追加しています。
keystore ファイルの指定とエイリアス名・パスワード
Flavors タブで Sigining Config を上で追加した config に設定します。
Build Types タブの Relese の Signing Config を追加した config に設定します。
その他のエラーと解決した対処方法
Cannot fit requested classes in a single dex file. Try supplying a main-dex list.
build.gradle の dependencies {} の中に
を追加して
build.gradle の defaultConfig {} の中に
を追加したら解決しました。
Program type already present ・・・.BuildConfig
Unity 3D でビルドしをプロジェクトを継承したプロジェクトで起きました。
今回は別の方法で対処しましたが、StackOverFlowなどによるとライブラリーモジュールのパッケージ名とアプリケーションとは別のパッケージ名に設定すると回避出来るとのことです。
メニューの
Build -> Generate Signed Bundle / APK
を実行して APK ファイルが生成出来れば完成です。
関連ブログ
Android Studioを使ってみました
[Unity3D] Unity のプロジェクトをAndroid Studio にインポートする方法
[Android Studio] Xamarin で実行可能な jar (Javaライブラリー) の作り方