Androidの各種バージョン番号と権限

17927 ワード

https://blog.csdn.net/gaolh89/article/details/79809034
現在のシステムSDKバージョン、すなわち携帯電話システムバージョンBuildを取得する.VERSION.SDK_INT
buildeToolVersionは、パッケージツールaapt、dxなど、構築ツールのバージョンです.このツールのディレクトリは...your_sdk_path/build-tools/XX.XX.XX
このバージョン番号は一般的にAPI-LEVELです.0.0. 例えばI/O 2014大会でAPI 20対応のbuild-toolがリリースされたバージョンは20.0.0
compileSdkVersion
コードからcompileSdkValersionを取得するには:
  • compileSdkValersonは、GradleがどのAndroid SDKバージョンでアプリケーションをコンパイルするかを教えてくれます.新しく追加されたAPIを使用するには、Level対応のAndroid SDKを使用する必要があります.
  • compileSdkVarsionを変更しても実行時の動作は変更されません.compileSdkVarsionを変更すると、新しいコンパイル警告、コンパイルエラーが発生する可能性がありますが、新しいcompileSdkVarsionはAPKに含まれません.コンパイル時にのみ使用されます.
  • は、常に最新のSDKを使用してコンパイルすることを強くお勧めします.既存のコード上で新しいコンパイルチェックを使用すると、新しいAPIが破棄されないように、多くのメリットが得られ、新しいAPIを使用する準備ができます.
  • Support Libraryを使用する場合、最新リリースのSupport Libraryを使用するには、最新のSDKコンパイルが必要です.たとえば、23.1.1バージョンのSupport Libraryを使用するには、compileSdkValersonが少なくとも23である必要があります(大バージョン番号は一致しています!
  • buildToolsVersion.プロジェクト構築ツールを指定するためのバージョンです.例えば27.02です.更新されたバージョンがあれば、Android Studioは
  • を提示します.
    minSdkVersion
    コードからcontextを取得する.getApplicationInfo().targetSdkVersion
  • compileSdkValersonが利用可能な最新APIに設定されている場合、minSdkValersonはアプリケーションが実行できる最低限の要件である.minSdkValersonは、各Androidアプリケーションストアが、ユーザ機器がアプリケーションをインストールできるか否かを判断するためのフラグの1つである
  • である.
  • lintのデフォルトはプロジェクトで実行されます.minSdkValersonより高いAPIを使用すると、存在しないAPIを呼び出す実行時の問題を回避するために警告されます.いくつかのAPIは、より高いバージョンのシステムでのみ使用される場合、通常、実行時にシステムバージョンをチェックする方法を使用して
  • を解決します.
  • Support LibraryやGoogle Playサービスなど、あなたが使用しているライブラリには、独自のminSdkVarsionがある可能性があります.あなたのアプリケーションが設定したminSdkVarsionは、これらのライブラリのminSdkVarsion以上でなければなりません.たとえば、3つのライブラリがあります.minSdkValersionはそれぞれ4、7、9です.minSdkValersionは少なくとも9でなければ使用できません.少数の場合、minSdkValersionよりも高いライブラリ(すべてのエッジを処理し、新しいプラットフォームでのみ使用できるようにしたい)を使用したい場合は、tools:overrideLibraryタグを使用することができますが、徹底的なテストをしてください.

  • targetSdkVersion
  • targetSdkVarsionはAndroidが前方互換性を提供する主な根拠であり、アプリケーションのtargetSdkVarsionが更新されないまでシステムは最新の動作変化を適用しない.これにより、新しい動作の変化に適応する前に新しいAPIを使用することができます(compileSdkversionを更新したのではないでしょうか).
  • targetSdkValersonで指定した値は、ターゲット・バージョンで十分なテストを行ったことを示しており、システムはアプリケーションの最新の機能と特徴を有効にします.たとえば、Android 6.0システムはランタイム権限という機能を参照しています.targetSdkValersonを23以上に指定すると、プログラムのランタイム権限が起動します.targetSdkValersonを22に指定すると、Android 5.1システムで十分なテストをしただけで、Android 6.0システムに導入された新しい機能は起動しません.
  • 例えばtargetSdkValersonを22に設定し、ある(またはいくつかの)権限に関連し、mainfestで直接権限を構成し、javaコードで権限を取得した後の論理処理を行えばよい.ただし、targetSdkValersonを23以上に設定すると、mainfestで権限を構成するほか、javaコードでユーザーが権限に同意したかどうか、同意した場合、どのようなビジネス操作を実行するかを判断する必要があります.同意しない場合、どのような業務操作を実行するか(一般的には、ある権限が拒否された後、ある機能が正常に使用できないことを示す).mainfestでのみ権限を設定している場合、targetSdkValersonが23以上で、Javaコードでランタイム権限を行わないコードは、アプリケーションが直接エラーを報告します.

  • #総合的に見ると
    minSdkVersion<=targetSdkVersion<=compileSdkVersion
    理想的には、安定した状態では、3つの関係はもっとこのようになるはずです.
    minSdkVarsion(lowest possible)<=targetSdkVarsion==compileSdkVarsion(latest SDK)より低いminSdkVarsionで最大の人をカバーし、最新のSDKでtargetSdkVarsionとcompileVersionを設定して最高の外観と動作を得る.
    Androidアプリケーション権限
    Android 6.0(APIレベル23)から、ユーザは、アプリケーションのインストール時に付与されるのではなく、アプリケーションの実行時に付与する権限を開始する.この方法では、ユーザーがアプリケーションをインストールまたは更新するときに権限を付与する必要がないため、アプリケーションのインストールプロセスを簡略化できます.また、ユーザーがアプリケーションの機能をより多く制御できるようにします.たとえば、ユーザは、デバイスの場所に対するアクセス権ではなく、カメラアプリケーションに対するカメラアクセス権を提供することを選択することができる.ユーザーは、アプリケーションの「Settings」画面にいつでもアクセスして権限を呼び出すことができます.システム権限には、通常権限と危険権限の2つがあります.
  • if(targetSdkVersion(App) < 23 && Build.VERSION.SDK_INT(携帯電話バージョン)<23)アプリをインストールすると、アプリに必要な権限が宣言され、ユーザーに問い合わせることはありません.権限を閉じることもできません(一部の国産カスタマイズ機種を除くXiaomiは6.0以前から独自の権限システムを提案しています.)
  • if(targetSdkValerson<23&&Build.VERSION.SDK_INT>=23)は、Appが6.0に対応していないことを示し、Appをインストールする場合、ユーザーに動的に権限を申請させることはできないが、ユーザーは自分でページ閉じる権限を設定することができ、
  • if(targetSdkValerson>=23&&Build.VERSION.SDK_INT<23)同1.前記も、アプリのインストール時に提示だけで、アプリに必要な権限を宣言する、ユーザに動的な申請を問い合わせることなく、閉じることもできない.
  • if(targetSdkValerson>=23&&Build.VERSION.SDK_INT>=23)動的申請権限.大勢の赴くところでもある.

  • 通常の権限は、ユーザーのプライバシーに直接リスクをもたらすことはありません.アプリケーションがリストに通常の権限をリストしている場合、システムは自動的に権限を付与します.
  • 危険権限は、アプリケーションにユーザ機密データにアクセスする権限を付与する.アプリケーションがリストに通常の権限をリストしている場合、システムは自動的に権限を付与します.危険な権限がリストされている場合は、アプリケーションがこれらの権限を使用することを明確に承認する必要があります.
  • 特殊(Signature)権限、この分類は、ユーザーにとって、より危険な権限と言える.特に敏感な権限.このような権限は、App内でシステムの権限申請ボックスをポップアップできません.設定ページの変更にのみジャンプできます.例えばシステム設定の変更、サスペンション
  • public class Permissions {
    
      protected static String[] ABS_CALENDAR;
      protected static String[] ABS_CAMERA;
      protected static String[] ABS_CONTACTS;
      protected static String[] ABS_LOCATION;
      protected static String[] ABS_MICROPHONE;
      protected static String[] ABS_PHONE;
      protected static String[] ABS_SENSORS;
      protected static String[] ABS_SMS;
      protected static String[] ABS_STORAGE;
    
      static {
    
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
          ABS_CALENDAR = new String[] {};
          ABS_CAMERA = new String[] {};
          ABS_CONTACTS = new String[] {};
          ABS_LOCATION = new String[] {};
          ABS_MICROPHONE = new String[] {};
          ABS_PHONE = new String[] {};
          ABS_SENSORS = new String[] {};
          ABS_SMS = new String[] {};
          ABS_STORAGE = new String[] {};
        } else {
          ABS_CALENDAR = new String[] {
              Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR
          };
    
          ABS_CAMERA = new String[] {
              Manifest.permission.CAMERA
          };
    
          ABS_CONTACTS = new String[] {
              Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS,
              Manifest.permission.GET_ACCOUNTS
          };
    
          ABS_LOCATION = new String[] {
              Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
          };
    
          ABS_MICROPHONE = new String[] {
              Manifest.permission.RECORD_AUDIO
          };
    
          ABS_PHONE = new String[] {
              Manifest.permission.READ_PHONE_STATE, Manifest.permission.CALL_PHONE,
              Manifest.permission.READ_CALL_LOG, Manifest.permission.WRITE_CALL_LOG,
              Manifest.permission.USE_SIP, Manifest.permission.PROCESS_OUTGOING_CALLS
          };
    
          ABS_SENSORS = new String[] {
              Manifest.permission.BODY_SENSORS
          };
    
          ABS_SMS = new String[] {
              Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS,
              Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_WAP_PUSH,
              Manifest.permission.RECEIVE_MMS
          };
    
          ABS_STORAGE = new String[] {
              Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
          };
        }
      }
    }
    

    一時的に9つの権限グループに分けられ、これらの権限は、動的申請として主な内容に関連する可能性があります.(注意:同じ権限グループ内のサブ権限を申請します.システムがポップアップした権限申請ボックスの文案は同じです.)
    android8.0(26)権限ポリシーの変更
    Android 8.0以前に、アプリケーションが実行時に権限を要求し、その権限が付与された場合、システムは誤って同じ権限グループに属し、リストに登録された他の権限も一緒にアプリケーションに付与されます.Android 8.0に対するアプリケーションでは、この動作が修正されました.システムは、明確なリクエストを適用する権限のみを付与します.ただし、ユーザーがアプリケーションに権限を付与すると、その権限グループ内の権限に対する後続のすべての要求が自動的に承認されます.例えば、アプリケーションがそのリストにREAD_をリストするとするEXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGE.アプリケーション要求READ_EXTERNAL_STORAGEは、ユーザに権限を付与する.アプリケーションがAPIレベル24以下の場合、WRITE_も同時に付与されるEXTERNAL_STORAGEは、この権限も同じSTORAGE権限グループに属し、リストにも登録されているためです.アプリケーションがAndroid 8.0を対象としている場合、システムはREAD_のみを付与します.EXTERNAL_STORAGE;ただし、アプリケーションがWRITE_を要求した場合EXTERNAL_STORAGEでは、ユーザーにプロンプトすることなく、すぐに権限が付与されます.
  • 以前は、サブパーミッションを申請すると、パーミッショングループ内の他のサブパーミッションが自動的に取得されます.グループ内の他のサブ権限は直接使用できます.
  • 現在、グループ内の他のサブ権限は自動的に取得されません.グループ内の他のサブ権限を使用する場合.再申請が必要です.(ただし、この場合はシステムの権限申請ボックスはポップアップされません)申請しない場合.FCができます.

  • オープンソースの権限リクエストライブラリを貼り付けますhttps://github.com/getActivity/XXPermissions