« ぼくのかんがえたさいきょうのドキュメントCIかんきょう | トップページ

2018年8月 8日 (水)

古いプロジェクトを最新のASで開こうとした話

1. ことのはじまり

先日 Google Play から「2018年11月1日までに公開しているすべてのアプリの compileSdkVersion を API 26以上にしてちょうだい」とのメールが。詳しくは今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善についてというGoogle Developersのブログ記事を参照。

Oh、これ、対応しないと Ban されるやつだわ....。
ということで、GitHubにあげているソースをcloneして改修に入ることに。

2. 最新のAndroid Studioで読めるようにするには

「読めるようにするには」というよりもむしろ、「Gradleビルドが正常終了するようにするには」というほうが正しい。
いまのAndroidはgradleプロジェクトだけど、 build.gradle の設定はざっくりこんな感じ。

minSdkVersion 15
compileSdkVersion 19
targetSdkVersion 19
Gradle Wrapper 1.10
Android Gradle plugin 0.9
buildToolsVersion 19.0.3

注目すべきは Android Gradle plugin のバージョンで、どうやらこのアプリ、Android Studio 1.0がリリースされる前から開発していたようだw

2-1. Gradle Wrapper をアップグレードする

ここから先はASを使わず、エディタとコンソールで対応する。

Android の Gradle プロジェクトは、そのプラグインと Gradle そのもののバージョンに縛りがあり、これは公式で公開されている。

Android Studio 3.x には Gradle 4.4がすでにバンドルされているので、4.4以上にするのだが、たまたまシステムに Gradle 4.6 をセットアップしていたのでこっちの wrapper タスクを利用することにした。

また、 Gradle を 4.6 にするので、 Android Gradle plugin は 3.0.0 以降にする必要があるのだが、公式のAndroid Plugin for Gradle 3.0.0 への移行にあるとおり Google の Maven リポジトリを使う必要がある。
なので、ルートの build.gradle 中の buildscript に Google の Maven リポジトリを追加して Gradle プラグイン 3.1.x を使う設定を書く。

buildscript {
  repositories {
    google()  // 追加、Google Maven Repository を使う設定
    jcenter()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.1.4'
  }
}

また、appcompat-v7なども同様に Google Maven リポジトリからの取得になるので、dependencies ブロックにも設定を入れる。
Maven リポジトリの参照先をモジュールごとに変える理由はないので、ルートの build.gradleallprojects ブロックを定義する。

allprojects {
  repositories {
    google()
    jcenter()
    mavenCentral()  // jcenterがあれば普通は大丈夫だが、状況に応じて入れる
  }
}

ここまでできたら wrapper タスクを実行する。

$ gradle wrapper

正常終了したら、 Gradle Wrapper のバージョンは4.6になっているはず。

2-2. Android アプリモジュールの調整

今度は app/build.gradle をいじる。
buildToolsVersion を 27.0.3 以降にすればいいのだが、メジャーバージョンが targetSdkVersion の値と一致していないと警告の対象となるので、 targetSdkVersion は自然と同じ値になる。
また、これに引きずられて compileSdkVersionappcompat-v7 のバージョンも27以降にする必要がある。

今回は API 28 にするので、以下のとおりに変更。

android {
  compileSdkVersion 28
  buildToolsVersion '28.0.2'
  defaultConfig {
    targetSdkVersion 28
  }
}
dependencies {
  implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
}

また、プラグインの仕様変更で、最初の行に書く apply plugin も書き換える必要がある。

apply plugin: 'com.android.application'

この状態で、 assembleDebug タスクが正常終了すれば、ASにインポートしてもビルドが通るはずである。

|

« ぼくのかんがえたさいきょうのドキュメントCIかんきょう | トップページ

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/164672/67035219

この記事へのトラックバック一覧です: 古いプロジェクトを最新のASで開こうとした話:

« ぼくのかんがえたさいきょうのドキュメントCIかんきょう | トップページ