targetVersionアップグレード28のピット
3490 ワード
プロジェクトtargetVersionは28で遭遇したいくつかの小さな穴とその解決にアップグレードされました.
Android Xの移行
Android Xの概要gradle.propertiesに2つのプラグインタグを付ける ASが3.2または3.2以上であることを確認します. compileSdkValerson少なくとも28(android 9.0); はgradle.propertiesでは「android.useAndroid X=true」、「android.enableJetifier=true」(useAndroid X:android Xのライブラリを使用するかどうか、falseではsupportライブラリを使用するかどうか.enableJetifier:第三者ライブラリでもandroid Xを自動的に使用するかどうか)の が設定されています.メニューバー選択Refactor>Migrate to Android X
説明: android.useAndroid X:trueに設定すると、Androidプラグインはサポートライブラリではなく、対応するAndroid Xライブラリを使用します.指定されていない場合は、タグのデフォルトはfalseです. android.EnableJetifier:trueに設定すると、Androidプラグインはバイナリファイルを書き換え、既存のサードパーティ製ライブラリを自動的に移行してAndroid Xを使用します.指定されていない場合は、タグのデフォルトはfalseです.
誤報
java.lang.IllegalStateException: Not allowed to start service Intent { act=xxx cmp=xxx}: app is in background uid UidRecord{xxxx}
ぶんせき
Android 8.0は、ユーザーが直接対話しない場合に実行できる操作に対して、バックグラウンドの実行を制限します.
ソリューション:
startForegroundService()メソッドでサービスを開始
サービスのonCreate()メソッドでstartForeground()メソッドを呼び出す
誤報
W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
ぶんせき
ソリューション httpsリクエスト への変更 targetVersionは27以下に下がった(私は28まで上がったので、下がらない、o(∩∩)o) resの下にxmlディレクトリを追加し、xmlファイルを新規作成します:network_security_config.xml、base-config cleartextTrafficPermittedの値(デフォルトはfalse) を追加します.
誤報
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
ぶんせき
manifestで定義されたactivtyは半透明で、screenOrientationプロパティが追加されています.
解決策
screenOrientationを削除すればよい
に質問
notificationはtargetVersion 26を表示していません.以上からnotificationはchannelを知っている必要があります.具体的にはCreate and Management Notification Channelsを参照してください.
解決策
notifyの前にnotificationChannelを作成する
Android Xの移行
Android Xの概要gradle.propertiesに2つのプラグインタグを付ける
org.gradle.jvmargs=-Xmx8704m
android.useAndroidX=true
android.enableJetifier=true
説明:
誤報
java.lang.IllegalStateException: Not allowed to start service Intent { act=xxx cmp=xxx}: app is in background uid UidRecord{xxxx}
ぶんせき
Android 8.0は、ユーザーが直接対話しない場合に実行できる操作に対して、バックグラウンドの実行を制限します.
ソリューション:
startForegroundService()メソッドでサービスを開始
//8.0 service
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
activity.startForegroundService(new Intent(MyActivity.this, MyService.class));
}else{
activity.startService(new Intent(MyActivity.this, MyService.class));
}
サービスのonCreate()メソッドでstartForeground()メソッドを呼び出す
NotificationChannel mChannel = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Notification notification = new Notification.Builder(getApplicationContext(), "my_service0").build();
startForeground(1, notification);
}
誤報
W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
ぶんせき
ソリューション
を変更し、manifestのアプリケーションノードにandroid:networkSecurityConfig
誤報
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
ぶんせき
manifestで定義されたactivtyは半透明で、screenOrientationプロパティが追加されています.
解決策
screenOrientationを削除すればよい
に質問
notificationはtargetVersion 26を表示していません.以上からnotificationはchannelを知っている必要があります.具体的にはCreate and Management Notification Channelsを参照してください.
解決策
notifyの前にnotificationChannelを作成する
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(“channel_id”,
"channel_name",
NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());