マシンスペック
- 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に移行する
- せっかくなので、モダンな開発環境にしたい
移行するアプリ
- バスくる for 東急バス(※改修放置してたらBANされました・2020/09/07現在)
- バスくる for 小田急バス
どんなアプリか?
- バス接近情報をスクレイピングして、スマホで通知する
- バス時刻表を表示する
環境を移行する
今までの開発環境
Windows環境はBootcampに作ってるけど、Bootcamp起動するの面倒なので、Bitbucketのスクショにて。Eclipse+ADTをAndroid Studioでインポートする
インポートしてみた。
あれ?、、、ソースは!?
うーむ、、、無理か、、、手動で移行するしか術がないな。。。
Eclipse環境をAndroid Studioに手動で移行する
何か、テンプレート沢山ある!? とりあえず「基本アクティビティ」で新規プロジェクトを作ってみる。ここに旧環境のソースを手動で移動してみる。
コンパイルエラーは「Google Play Service」と「org.apache.http.〜」が無いから。
あと、「AndroidManifest.xml」で、幾つかエラー出てる。
それ以外は大丈夫そう。
コンパイルエラー修正
Google Play Serviceの導入
メニューの「ツール」→「SDK マネージャー」を開いて、「Google Play services」をインストール。
build.gradle(app直下)に追加。
dependencies {
implementation 'com.google.android.gms:play-services:+'
}
※参考
Google Play Services SDK のセットアップ(Android Studio)
org.apache.http対応
build.gradle(app直下)に追加。
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直下)へ移動する。
<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 に変更。
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]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直下)でエラー
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リポジトリを追加。
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を追加。
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配下に空ディレクトリを置いちゃダメらしい。
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直下)を修正。
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直下)を修正。
defaultConfig {
・・・
multiDexEnabled true
}
やったー!!
実行する
メニューの「ツール」→「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?
キタコレ!!
以上で開発環境は完成〜、さて広告違反の改修をするかな。