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
  • org.gradle.jvmargs=-Xmx8704m
    android.useAndroidX=true
    android.enableJetifier=true
    

    説明:
  • 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()メソッドでサービスを開始
    //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
    ぶんせき
    ソリューション
  • httpsリクエスト
  • への変更
  • targetVersionは27以下に下がった(私は28まで上がったので、下がらない、o(∩∩)o)
  • resの下にxmlディレクトリを追加し、xmlファイルを新規作成します:network_security_config.xml、base-config cleartextTrafficPermittedの値(デフォルトはfalse)
    
    
        
    
    
    を変更し、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());