2020年8月30日日曜日

GDPR

古いアプリをAndroid10に対応する必要があるのですが、ついでにAdmobも最新のルールにそって実装しておこうかなと思ったのですが、ちょっと躓いてしまいました。

 GDPR(一般データ保護規則)です。

EU圏向けに対応する必要があるらしく、結構面倒そう。

ひとまず勉強中です。

2020年8月29日土曜日

Androidの古いアプリのターゲットを「Android 10(API レベル 29)」にしたので、その記録

やりたいこと
だいぶ前に作ったAndroidのアプリがあります。
最終更新が2015年のアプリと2016年のアプリです。
この古いアプリのターゲットをAndoroid10(APIレベル29)に変更することが目的です。

Googleから2020年11月2日までにターゲットにAndroid10を含めてねというメールが来たためとなります。

Googleからのメールには移行ガイドのリンクが張ってあったのですが、そのページをみても具体的にどうすればよいのかよくわかりませんでした。

そこで、ひとまず古いアプリのプロジェクトをAndroid Studio 4.0.1で開いてみたのですが、よくわからないエラーがいろいろでてきました。

ググりながらなんとか立ち上がるところまでできたので、手順を記録しておきます。
環境
OS : Windows10 1909
IDE : Android Studio 4.0.1
古いAndroidアプリの情報
 compileSdkVersion 21
 buildToolsVersion "21.1.2"
 minSdkVersion 9
 targetSdkVersion 21

やったこと① バックアップ
失敗すると悪いので、いったん昔のプロジェクトのフォルダをコピーしてから作業をしました。
やったこと② 開く
Android Studioでプロジェクトを開く。
開くとConvertProjectのメッセージが表示されたので、Convertボタンを押す。

そのあと、Android SDKのパスも前と違うよというメッセージが表示されました。
これはSDKのパスを以前と変えたのででたようです。通常は表示されないです。
やったこと③ versionを修正
build.gradleのバージョンを最近作ったアプリのバージョンに合わせました。
 compileSdkVersion 29
 buildToolsVersion "30.0.0"
 minSdkVersion 16
 targetSdkVersion 29

build.gradleのclasspathのバージョンも修正
classpath 'com.android.tools.build:gradle:4.0.0'

gradle-wrapper.propertiesのdistributionUrlを修正
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

このあたりはあまり深く考えずにやってみました。
やったこと④ Migrate to AndroidX
appcompat-v7, support-v4が解決できないみたいなエラーがでているので、これを解消するために下記の手順を実施しました。
Refactorメニュー - Migrate to AndroidX... を選択する。

次のメッセージが表示されるので、Migrateボタンを押す。
※backup project as Zip fileをONにしておくと、バックアップしてくれます。不要ならOFFにします。

この段階だとまだMigrateは完了してないです。Migrateするために、Do Refactorボタンを押します。
ステータスバーがくるくるしてちょっと待つと終わります。
やったこと⑤ compileを修正
compileを直した方がよいようなので修正しました。
マウスカーソルを合わせると電球のマークが表示されるので、そこからcompileをimplementationに置き換えるメニューを選択すると直してくれます。
やったこと⑥ ActionBarActivityをおきかえ
ActionBarActivityを使っていたのですが、そこでエラーがでてたので、AppCompatActivityに置換しました。
//import android.support.v7.app.ActionBarActivity;
import androidx.appcompat.app.AppCompatActivity;
~途中省略~
//public class MainActivity extends ActionBarActivity implements SensorEventListener {
public class MainActivity extends AppCompatActivity implements SensorEventListener {

おわり
ここまでやったところ、エラーの表示がなくなり、エミュレーターで起動できるようになりました。
自分のアプリはこれで解決しましたが、使ってるクラスや機能によって⑥以降は違ってくるはずです。