Eclipse+ADT(build:Maven2)で作ったAndroidアプリをAndroid Studio(build:gradle)に移行した記録


マシンスペック

  • Mac mini 2018
  • macOS Catalina(10.15.x)
  • Intel Core-i7 3.2GHz 6コア
  • メモリ 32GB
  • SSD 512GB

今までの開発環境

  • DELL XPS 13
  • Windows 10 Home
  • Intel Core-i7
  • メモリ 8GB
  • SSD 256GB
  • Eclipse 4.5(だったかな?)
  • ADT最新版

やること

  • 開発環境をEclipse+ADT → Android Studioへ移行
  • ビルド環境をMaven2 → gradleへ移行

何故やるか?

  • AdMobの広告ポリシー違反で広告を止められ、広告収入がゼロになった
  • 推定2年放置してたが、再審査の改修が必要なので、開発環境をMacに移行する
  • せっかくなので、モダンな開発環境にしたい

移行するアプリ

どんなアプリか?

  • バス接近情報をスクレイピングして、スマホで通知する
  • バス時刻表を表示する

環境を移行する

今までの開発環境


Windows環境はBootcampに作ってるけど、Bootcamp起動するの面倒なので、Bitbucketのスクショにて。

Eclipse+ADTをAndroid Studioでインポートする

ほほう、Eclipse+ADTインポートできるみたい!

インポートしてみた。

あれ?、、、ソースは!?

うーむ、、、無理か、、、手動で移行するしか術がないな。。。

Eclipse環境をAndroid Studioに手動で移行する


何か、テンプレート沢山ある!?
とりあえず「基本アクティビティ」で新規プロジェクトを作ってみる。

ここに旧環境のソースを手動で移動してみる。

コンパイルエラーは「Google Play Service」と「org.apache.http.〜」が無いから。
あと、「AndroidManifest.xml」で、幾つかエラー出てる。
それ以外は大丈夫そう。

コンパイルエラー修正

Google Play Serviceの導入

メニューの「ツール」→「SDK マネージャー」を開いて、「Google Play services」をインストール。

build.gradle(app直下)に追加。

app/build.gradle
dependencies {
    implementation 'com.google.android.gms:play-services:+'
}

※参考
Google Play Services SDK のセットアップ(Android Studio)

org.apache.http対応

build.gradle(app直下)に追加。

app/build.gradle
android {
    ・・・
    useLibrary "org.apache.http.legacy"

    defaultConfig {

※参考
【Android Studio】「パッケージorg.apache.http.clientは存在しません」が発生した時の対処法

コンパイルエラーが消えた!

AndroidManifest.xmlのエラー修正

ERROR: The minSdk version should not be declared in the android manifest file. You can move the version from the manifest to the defaultConfig in the build.gradle file.

AndroidManifest.xmlのversionCode、versionName、minSdkVersion、targetSdkVersionは、build.gradle(app直下)へ移動する。

app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:versionCode="24"
        android:versionName="1.2.7">

    <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17" />

targetSdkVersionを26以上にしろと怒られたので、28 に変更。

app/build.gradle
defaultConfig {
    minSdkVersion 9
    targetSdkVersion 28
    versionCode 24
    versionName "1.2.7"
}

※参考
僕たちはいつまでこんな楽しいAndroid Studio設定をし続けるのか? Android Studio 3.x時代の設定不足解消メモ

あと3箇所がエラーになってる。

<uses-permission android:name="android.permission.READ_LOGS" />
<application android:debuggable="false">
<activity android:screenOrientation="portrait">

android.permission.READ_LOGSのエラー

Permission is only granted to system apps

Android Studioの設定を変更。

※参考
[Android]Permission is only granted to system apps

android:debuggable="false"のエラー

Avoid hardcoding the debug mode; leaving it out allows debug and release builds to automatically assign one

昔はandroid:debuggable="true"フラグをつけないとDebug実行ができませんでしたが、SDKのバージョンアップ(SDKr8, 2010.12)で自動的に付くようになったのでdebuggableフラグの指定は不要になりました。

との事なので、「android:debuggable="false"」を削除。

※参考
android:debuggableでデバッグログ切り替えはやめた方がいい

android:screenOrientation="portrait"のエラー

Expecting android:screenOrientation="unspecified" or "fullSensor" for this activity so user can use the application in any orientation and provide a great experience on Chrome OS devices

縦向き固定はダメらしい。
applicationタグに「tools:ignore="LockedOrientationActivity"」を追加したが警告は消えなかったので、デフォルトの「unspecified」を設定。

※参考
Expecting android:screenOrientation=“unspecified”...の対処法

build.gradleのエラー修正

build.gradle(app直下)でエラー

app/build.gradle
dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
}

build.gradle(プロジェクト直下)にGoogle Mavenリポジトリを追加。

build.gradle
buildscript {
    repositories {
        ・・・
        maven {
            url 'https://maven.google.com/'
        }
    }
    ・・・
}

allprojects {
    repositories {
        ・・・
        maven {
            url 'https://maven.google.com/'
        }
    }
}

build.gradle(app直下)に、support-v4、animated-vector-drawable、mediarouter-v7を追加。

app/build.gradle
dependencies {
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:animated-vector-drawable:28.0.0'
    implementation 'com.android.support:mediarouter-v7:28.0.0'
}

※参考
解決に失敗しました:com.Android.support:appcompat-v7:28.0
All com.android.support libraries must use the exact same version specification

ビルドエラー修正

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:extractDeepLinksDebug'.
> org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 途中でファイルの末尾に達しました。

上記ビルドエラーの原因が分からず2日間ハマる、SAXだからXMLなんだろうけども。。。
以前の環境がWindowsの為、改行コードがCRLFだったのでLFに修正、でもエラー消えず。。。
BOM付きUTF-8!?、、、かと思ったが違った。。。
関係ないだろうけど、旧ビルドファイル(Maven、Ant)など不要ファイルを削除、もちろんエラー消えず。。。

res配下の未使用ディレクトリを削除してみた。

おっ、別のエラー出た!?
res配下に空ディレクトリを置いちゃダメらしい。

Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 14 declared in library [com.google.android.gms:play-services:12.0.1] /Users/satoshi/.gradle/caches/transforms-2/files-2.1/dd50b5c4da9d853295d7932aef6bc7b9/play-services-12.0.1/AndroidManifest.xml as the library might be using APIs not available in 9
    Suggestion: use a compatible library with a minSdk of at most 9,
        or increase this project's minSdk version to at least 14,
        or use tools:overrideLibrary="com.google.android.gms.play_services" to force usage (may lead to runtime failures)

minSdkVersionを14にしろという事らしいので、build.gradle(app直下)を修正。

app/build.gradle
defaultConfig {
    minSdkVersion 14
    ・・・
}

新たなビルドエラー。

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDexDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
     The number of method references in a .dex file cannot exceed 64K.

build.gradle(app直下)を修正。

app/build.gradle
defaultConfig {
    ・・・
    multiDexEnabled true
}

※参考
【Flutter】エラー解決: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:

やったー!!

実行する

メニューの「ツール」→「ADV マネージャー」を開いて、仮想デバイスを作成して実行する。

実行したらエラー、、、うーむ。。。

PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT

Java8をインストールして、環境変数を設定する。

$ vim ~/.bash_profile
★点線内を追記
---
export JAVA_HOME=/usr/bin/javac
export ANDROID_HOME=/Users/xxx/Library/Android/sdk
export ANDROID_SDK_ROOT=/Users/xxx/Library/Android/sdk
export ANDROID_AVD_HOME=/Users/xxx/.android/avd
---
:wq
$ source ~/.bash_profile

※参考
Mac OS X にJDK 1.8をインストール
How to install ANDROID_SDK_ROOT on Mac OS?

キタコレ!!

以上で開発環境は完成〜、さて広告違反の改修をするかな。