安卓各編譯版本差異匯總(安卓10.0收集...)

安卓版本適配信息匯總,最后更新于2019年10月23日步鉴,持續(xù)收集中


  • 1:安卓4.4 API-19

    • 1.1:READ_EXTERNAL_STORAGE讀取外置存儲權(quán)限強制檢查,此權(quán)限在低于4.4的版本默認獲取。如果應(yīng)用只在內(nèi)部存儲數(shù)據(jù)或者如下特定目錄讀取/寫入文件授账,則不需要WRITE_EXTERNAL_STORAGE或者READ_EXTERNAL_STORAGE權(quán)限。如果app沒有在別的地方讀寫存儲但是minSdkVersion低于19惨驶,則可以在uses-permission標簽內(nèi)加入android:maxSdkVersion適配:<uses-permission ... android:maxSdkVersion="18"/>白热。支持的文件位置如下:

      Context API 文件指向位置 備注
      getExternalFilesDir(String) SD卡/Android/data/包名/String/ 非內(nèi)置存儲
      getExternalCacheDir() SD卡/Android/data/包名/cache/ 非內(nèi)置存儲
      getExternalMediaDirs() SD卡/Android/media/包名/ 非內(nèi)置存儲
      getDataDir() data/data/包名/ app內(nèi)置存儲根目錄
      getDir(自定義dir,mode) data/data/包名/自定義dir/ 內(nèi)置存儲(api24開始mode縮小限定范圍)
      getFilesDir() data/data/包名/files/ 內(nèi)置存儲
      getCacheDir() data/data/包名/cache/ 內(nèi)置存儲
      getPreferencesDir() data/data/包名/shared_prefs/ 內(nèi)置存儲
      getNoBackupFilesDir() data/data/包名/no_backup/ 內(nèi)置存儲(api21)
      getCodeCacheDir() data/data/包名/code_cache/ 內(nèi)置存儲(api21)
      getDatabasesDir() data/data/包名/databases/ 內(nèi)置存儲(api27)
    • 1.2:應(yīng)用支持全屏模式,也就是常說的 沉浸式

    • 1.3:虛擬按鍵可隱藏,既然沉浸式底部導航欄跟著支持了粗卜,那就順路把相關(guān)控制API也暴露給開發(fā)者

    • 1.4:為了加強WebView的功能屋确,Google引入了Chromium內(nèi)核。但仍然還是存在 編輯的bug


  • 2:安卓5.0 API-21

    • 2.1:ART androidRunTime取代 Dalvik 成為平臺默認設(shè)置,ART采用預(yù)先編譯技術(shù),改進了垃圾回收機制與調(diào)試支持

    • 2.2:Material Design設(shè)計規(guī)范攻臀,編譯版本提升至至少21時才能方便使用Appcompat-V7 RecyclerView-V7 CardView-V7等框架焕数,在UI上突出的變化還有 SharedElementAnimation elevation等。

    • 2.3:提升用戶隱私的安全性刨啸,棄用activityManager.getRecentTask()方法堡赔。對于向后兼容性,此方法仍會返回它的一小部分數(shù)據(jù)设联,包括應(yīng)用自己的任務(wù)和可能的一些其他非敏感任務(wù)(如首頁)善已。如果你的應(yīng)用使用此方法檢索它自己的任務(wù),則改用getAppTasks檢索信息

    • 2.4:禁用隱式意圖啟動服務(wù)仑荐,運行時會直接拋出IllegalArgumentException異常

      Intent intent = new Intent();過時禁用
      intent.setAction("com.example.myapplication");
      startService(intent);
      只能使用顯式意圖
      Intent intent = new Intent("com.example.myapplication");
      
    • 2.5:Notification模塊不支持設(shè)置了rgb通道的smallIcon雕拼,此bug 在后續(xù)版本已經(jīng)修復(fù),但是為了系統(tǒng)兼容性粘招,建議開發(fā)者在安卓5.0及以上設(shè)備上更換smallIcon以達到版本一致性

    • 2.6:WebView默認會阻止混合內(nèi)容(https當中不能加載http資源),要允許請調(diào)用 WebSettings#setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW)啥寇。
      默認阻止第三方 Cookie,要允許請調(diào)用CookieManager#setAcceptThirdPartyCookies(webView,true) 洒扎。

    • 2.7:現(xiàn)在可以智能地選擇要繪制的 HTML 文檔部分辑甜。這個新的默認行為有助于減少內(nèi)存占用和提升性能。如果您要一次渲染整個文檔袍冷,可通過調(diào)用 enableSlowWholeDocumentDraw() 停用此優(yōu)化磷醋。

    • 2.8:自定義權(quán)限必須保證唯一,使用不同秘鑰簽名的應(yīng)用不能使用相同的自定義權(quán)限胡诗。如果用戶設(shè)備上存在一個應(yīng)用使用了相同的自定義權(quán)限邓线,那么新的應(yīng)用將無法安裝

    • 2.9:移除了對鎖定屏幕小部件的支持

    • 2.10:新增Intent.resolveActivity(*)對發(fā)起的意圖進行設(shè)備匹配


  • 3:安卓6.0 API-23

    • 3.1:移除了Apachehttp支持包,如有需要手動引入。

      android {
          useLibrary 'org.apache.http.legacy'
      }
      
    • 3.2:廢棄:FloatMath煌恢,Notification.setLastEventInfo()

    • 3.3:移除了對設(shè)備本地硬件標識符的編程訪問權(quán)骇陈。WifiInfo.getMacAddress()方法和 BluetoothAdapter.getAddress() 方法現(xiàn)在會返回常量值 02:00:00:00:00:00。如果需要通過藍牙和wifi掃描訪問外部設(shè)備的硬件標識符瑰抵,應(yīng)用必須擁有 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 權(quán)限你雌。

    • 3.4:音頻管理器變更:不再支持通過 AudioManager 類直接設(shè)置音量或?qū)⑻囟ㄒ纛l流靜音。setStreamSolo()方法棄用二汛,改為requestAudioFocus() 方法婿崭。setStreamMute() 方法棄用,改為adjustStreamVolume() 并傳入方向值 ADJUST_MUTE/ ADJUST_UNMUTE肴颊。

    • 3.5:APK 驗證更為嚴格氓栈。如果在清單中聲明的文件在 APK 中并不存在,該 APK 將被視為已損壞婿着。移除任何內(nèi)容后必須重新簽署 APK颤绕。

    • 3.6:運行時權(quán)限管理幸海,谷歌借鑒了蘋果 和國內(nèi)廠商的優(yōu)化經(jīng)驗,對應(yīng)用的權(quán)限不再一刀切奥务,而是把相關(guān)權(quán)限分成了三組

      權(quán)限名稱 權(quán)限說明
      SYSTEM_ALERT_WINDOW 設(shè)置懸浮窗,TYPE_SYSTEM_ALERT已失效
      WRITE_SETTINGS 修改系統(tǒng)設(shè)置
      • 敏感權(quán)限 運行時申請,如果沒有適配會直接拋出異常氯葬,許可狀態(tài)會保存
      權(quán)限組 權(quán)限名稱 介紹
      CALENDAR android.permission.READ_CALENDAR 讀取系統(tǒng)日歷
      android.permission.WRITE_CALENDAR 寫入系統(tǒng)日歷
      CAMERA android.permission.CAMERA 相機權(quán)限
      CONTACTS android.permission.READ_CONTACTS 讀取聯(lián)系人
      android.permission.WRITE_CONTACTS 寫入聯(lián)系人
      android.permission.GET_ACCOUNTS 讀取賬號
      LOCATION android.permission.ACCESS_FINE_LOCATION 獲取精準位置
      android.permission.ACCESS_COARSE_LOCATION 獲取大概位置
      MICROPHONE android.permission.RECORD_AUDIO 錄音
      PHONE android.permission.READ_PHONE_STATE 獲取手機信息
      android.permission.CALL_PHONE 打電話,不建議使用
      android.permission.READ_CALL_LOG 讀取通話記錄
      android.permission.WRITE_CALL_LOG 寫入通話記錄
      android.permission.PROCESS_OUTGOING_CALLS 監(jiān)聽挡篓、控制、取消呼出電話的權(quán)限
      android.permission.USE_SIP 使用sip(會話發(fā)起協(xié)議)網(wǎng)絡(luò)電話
      android.permission.ADD_VOICEMAIL 添加系統(tǒng)中的語音郵件
      SENSORS android.permission.BODY_SENSOR 使用生命體征相關(guān)傳感器
      SMS android.permission.SEND_SMS 發(fā)送短信
      android.permission.RECEIVE_SMS 接收短信
      android.permission.READ_SMS 讀取短信
      android.permission.RECEIVE_WAP_PUSH 接收WapPush信息
      android.permission.RECEIVE_MMS 接收彩信
      android.permission.READ_CELL_BROADCASTS 不存在的權(quán)限
      STORAGE android.permission.READ_EXTERNAL_STORAGE 讀取存儲
      android.permission.WRITE_EXTERNAL_STORAGE 寫入存儲

      運行時權(quán)限共9組帚称,同一組下如果有一個權(quán)限被允許官研,其它權(quán)限會自動被允許。
      開發(fā)時應(yīng)減少申請權(quán)限的次數(shù)闯睹,以避免交互被打斷戏羽。對于敏感權(quán)限可用intent來代替,讓其它應(yīng)用去處理

  • 4:安卓7.0 API-24

    • 4.1:應(yīng)用分屏楼吃,支持java8始花。通過Context.getDir(name,mode)獲取存儲文件夾時不能再使用MODE_WORLD_READABLEMODE_WORLD_WRITEABLE,與此相似的還有SharedPreferenceDataBase孩锡。否則會拋出SecurityException

    • 4.2:Notification.Builder通知消息可以通過setShowWhen()設(shè)置定時顯示

    • 4.3:刪除了三個常用隱式廣播 : CONNECTIVITY_ACTION酷宵, ACTION_NEW_PICTUREACTION_NEW_VIDEO 躬窜。因為這些廣播可能會一次喚醒多個應(yīng)用的后臺進程浇垦,消耗內(nèi)存和電池

    • 4.4:優(yōu)化了SurfaceView,使其在視頻播放和3D方面表現(xiàn)更優(yōu)于TextureView荣挨。

    • 4.5:APK signature scheme v2,android 7.0 新引入應(yīng)用簽名方案男韧,它能提供更快的應(yīng)用安裝時間和更多針對未授權(quán) APK 文件更改的保護。

    • 4.6:StrictMode API政策禁止在您的應(yīng)用外部公開file:// URI默垄。如果啟動一個包含文件 URI 的intent會拋出FileUriExposedException異常此虑。受此影響的有拍照圖片選擇,下載apk安裝等功能。要在應(yīng)用間共享文件厕倍,您應(yīng)發(fā)送一項content:// URI寡壮,并授予 URI 臨時訪問權(quán)限贩疙。步驟如下:

      • 4.6.1:在AndroidManifest.xml中添加<provider>標簽
         <provider
              tools:replace="android:authorities"(如果使用的依賴module也存在provider則添加此tools)
              android:name="android.support.v4.content.FileProvider"
              android:authorities="替換為你的包名.fileProvider"
              android:grantUriPermissions="true"
              android:exported="false">
              <meta-data
                  android:name="android.support.FILE_PROVIDER_PATHS"
                  android:resource="@xml/file_provider_paths" />
          </provider>
        
      • 4.6.2:在res/xml文件夾里面創(chuàng)建xml文件file_provider_paths.xml讹弯,文件名要和上方的android:resource對應(yīng)值保持一致
        各個元素的定義可參考android.support.v4.content.FileProvider
        <?xml version="1.0" encoding="utf-8"?>
        <paths xmlns:android="http://schemas.android.com/apk/res/android">
            <root-path name="root_path_name" path="test"/>"/" 
            <files-path path="file_path_name" name="images"/>Context.getFilesDir() 示例位置
            <cache-path name="cache_path_name" path="images" />Context.getCacheDir()
            <external-path name="external_path_name" path=" ." />Environment.getExternalStorageDirectory()
            <external-files-path name="external_file_path_name" path="images" />Context#getExternalFilesDir(String)
            <external-cache-path name="external_cache_path_name" path="images" />
            <external-path name="external_path_name_01" path="Android/data/com.papa.auction/"/>
            <external-path name="external_path_name_02"  path="."/>
        </paths>
        
        • 4.6.3:修改拍照intent示例:
        Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        判斷設(shè)備是否有應(yīng)用可以處理打開相機intent
        if(intent.resolveActivity(context.getPackageManager()) != null){
            Uri cameraUri;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                cameraUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", file);
            }else {
                cameraUri = Uri.fromFile(file);
            }
            intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
            context.startActivityForResult(intent,requestCode);
        }
        
        • 4.6.4:修改安裝APK intent示例:
        Intent installIntent = new Intent(Intent.ACTION_VIEW));
        installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  根據(jù)啟動位置決定是否添加
        Uri apkFileUri;
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
           installIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
           apkFileUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", apkFile);
        } else {
            apkFileUri = Uri.fromFile(apkFile);
        }
        installIntent.setDataAndType(apkFileUri, "application/vnd.android.package-archive");
        context.startActivity(installIntent);
        
    • 4.7:加密庫 Crypto廢棄 將密碼作為隨機數(shù)生成器的種子換算出密鑰 key這種做法已經(jīng)被認定為是不安全的。相關(guān)的 Crypto provider 和 SHA1PRNG 算法同時廢棄掉了这溅,并計劃在后續(xù)的 SDK 中完全移除相關(guān)的庫,如下是官方給出的解決方案:

        給出字符串的密碼
       String password = "password";  
      
        密鑰的比特位數(shù)组民,注意這里是比特位數(shù)
        AES 支持 128、192 和 256 比特長度的密鑰
       int keyLength = 256; 
      
        鹽值的字節(jié)數(shù)組長度悲靴,注意這里是字節(jié)數(shù)組的長度
        其長度值需要和最終輸出的密鑰字節(jié)數(shù)組長度一致
        由于這里密鑰的長度是 256 比特臭胜,則最終密鑰將以 256/8 = 32 位長度的字節(jié)數(shù)組存在
        所以鹽值的字節(jié)數(shù)組長度也應(yīng)該是 32
       int saltLength = 32;
       byte[] salt;
      
        先獲取一個隨機的鹽值
        你需要將此次生成的鹽值保存到磁盤上下次再從字符串換算密鑰時傳入
        如果鹽值不一致將導致?lián)Q算的密鑰值不同
        保存密鑰的邏輯官方并沒寫,需要自行實現(xiàn)
       SecureRandom random = new SecureRandom();  
       byte[] salt = new byte[saltLength];  
       random.nextBytes(salt);  
      
        將密碼明文、鹽值等使用新的方法換算密鑰
       int iterationCount = 1000;
       KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,iterationCount, keyLength);  
       SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");  
      
        到這里你就能拿到一個安全的密鑰了
       byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();  
       SecretKey key = new SecretKeySpec(keyBytes, "AES");
      

  • 5:安卓8.0 API-26 (8.1 API-27)

    • 5.1:roundedIcon 自適應(yīng)圖標耸三,在manifest文件中額外提供圓形應(yīng)用icon
      <application
          android:name=".App"
          android:icon="@mipmap/ic_launcher"
          android:roundIcon="@mipmap/ic_launcher_round"
      ......
      
    • 5.2:PHONE權(quán)限組新增兩個運行時權(quán)限
      • ANSWER_PHONE_CALLS:允許接聽呼入電話乱陡。在應(yīng)用中使用 acceptRingingCall()函數(shù)處理呼入電話。
      • READ_PHONE_NUMBERS:允許應(yīng)用讀取設(shè)備中存儲的電話號碼仪壮。
    • 5.3:安卓8.0中憨颠,Notification的通知渠道。用戶可以根據(jù)渠道來屏蔽一些不想要的通知
      void setNotifyChannel(NotificationManager manager, NotificationCompat.Builder builder, String channeId, String channelName) {
          if (TextUtils.isEmpty(channeId)||TextUtils.isEmpty(channelName)){
              L.e("NotifyCompat:  ".concat("安卓8.0的通知兼容庫中 channeId 與 channelName 不能為empty"));
          }
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
              //第三個參數(shù)設(shè)置通知的優(yōu)先級別
              NotificationChannel channel = new NotificationChannel(channeId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
              channel.canBypassDnd();//是否可以繞過請勿打擾模式
              channel.canShowBadge();//是否可以顯示icon角標
              channel.enableLights(true);//是否顯示通知閃燈
              channel.enableVibration(true);//收到小時時震動提示
              channel.setBypassDnd(true);//設(shè)置繞過免打擾
              channel.setLockscreenVisibility(NotificationCompat.VISIBILITY_SECRET);
              channel.setLightColor(Color.RED);//設(shè)置閃光燈顏色
              channel.getAudioAttributes();//獲取設(shè)置鈴聲設(shè)置
              channel.setVibrationPattern(new long[]{100, 200, 100});//設(shè)置震動模式
              channel.shouldShowLights();//是否會閃光
              if (manager != null) {
                  manager.createNotificationChannel(channel);    //manager 與channel關(guān)聯(lián)
              }
              if (builder != null) {
                  builder.setChannelId(channeId);//Notification 與channel關(guān)聯(lián)
              }
          }
      }
      
    • 5.4:新增特殊權(quán)限:android.permission.REQUEST_INSTALL_PACKAGES當需要安裝未知來源應(yīng)用時使用积锅,示例如下
      private void installAPK(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
          boolean hasInstallPermission = getPackageManager().canRequestPackageInstalls();
          if (hasInstallPermission) {
              安裝應(yīng)用
          } else {
              提示用戶跳轉(zhuǎn)至“安裝未知應(yīng)用”權(quán)限界面爽彤,引導用戶開啟權(quán)限
              Uri selfPackageUri = Uri.parse("package:" + this.getPackageName());
              Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, selfPackageUri);
              startActivityForResult(intent, REQUEST_CODE_UNKNOWN_APP);
          }
        }else {
          安裝應(yīng)用
        }
      }
      
    • 5.6:SharedPreferences不能使用MODE_WORLD_READABLE,請修改為MODE_PRIVATE
    • 5.6:新的廣播接收器限制導致靜態(tài)廣播無法正常接收,應(yīng)使用動態(tài)廣播代替靜態(tài)廣播
    • 5.7:List.sort() 的實現(xiàn)不能調(diào)用 Collections.sort()缚陷,因為這會導致堆棧因無限遞歸而溢出
    • 5.8:申請了SYSTEM_ALERT_WINDOW權(quán)限的應(yīng)用需要在其他應(yīng)用和系統(tǒng)窗口上方顯示提醒窗口時只能使用TYPE_APPLICATION_OVERLAY類型适篙,之前的TYPE_PHONE TYPE_PRIORITY_PHONE TYPE_SYSTEM_ALERT TYPE_SYSTEM_OVERLAY TYPE_SYSTEM_ERROR不再生效。
    • 5.9:在 Android 8.0 之前箫爷,如果應(yīng)用在運行時請求權(quán)限并且被授予該權(quán)限嚷节,系統(tǒng)會將同一權(quán)限組且在Manifest中注冊的其他權(quán)限也一起授予應(yīng)用。此行為在8.0被糾正:系統(tǒng)只會授予應(yīng)用明確請求的權(quán)限蝶缀。然而丹喻,一旦用戶為應(yīng)用授予某個權(quán)限,則所有后續(xù)對該權(quán)限組中權(quán)限的請求都將被自動批準翁都。
    • 5.10:Only fullscreen opaque activities can request orientation碍论,在Android 8.0上非全屏透明頁面不允許設(shè)置方向(8.1以上谷歌就修復(fù)去掉了這個限制)

      解決方案1:在manifest中去掉此Activity的screenOrientation屬性
      解決方案2:在此Activity的style里設(shè)置<item name="android:windowIsTranslucent">false</item>
      解決方案3:使用Dialog/DialogFragment/Popwindow代替此Activity。

    更多細節(jié)參閱:
    https://developer.android.com/about/versions/oreo/android-8.0-changes#all-apps
    https://developer.android.com/about/versions/oreo/android-8.1


  • 6:安卓9.0 API-28

    • 6.1:限制明文流量的網(wǎng)絡(luò)請求柄慰,非加密的流量請求會被系統(tǒng)禁止掉
      解決方案:在xml目錄新建文件network_security_config.xml

      <?xml version="1.0" encoding="utf-8"?>
        <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
      </network-security-config>
      

      在manifest清單文件application節(jié)點配置android:networkSecurityConfig="@xml/network_security_config"

    • 6.2:使用apacheHttp支持包時出現(xiàn)classNotFound 錯誤鳍悠,從 Android 9 開始,Apache HTTP的支持內(nèi)容庫已從 bootclasspath 中移除坐搔,且默認情況下應(yīng)用無法使用它藏研。請在Manifest文件的application節(jié)點中加入如下設(shè)置:<uses-library android:name="org.apache.http.legacy" android:required="false" />

    • 6.3:java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
      安卓9.0對canvas#clipPath()中的Region.Op做了限制只能使用INTERSECT或者DIFFERENCE。

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
       canvas.clipPath(mPath);
      } else {
       canvas.clipPath(mPath, Region.Op.REPLACE);
      }
      
    • 6.4:棄用 Bouncy Castle 加密概行。Android 9 棄用了幾個來自 Bouncy Castle 提供程序中的加密技術(shù)蠢挡,代之以由 Conscrypt 提供程序提供的加密技術(shù)。調(diào)用請求 Bouncy Castle 提供程序的 getInstance() 時凳忙,會生成 NoSuchAlgorithmException 錯誤业踏。要解決這些錯誤,請不要在 getInstance() 中指定提供程序(也就是請求默認實現(xiàn))涧卵。

    • 6.5:前臺服務(wù)權(quán)限勤家。要使用前臺服務(wù)的應(yīng)用必須注冊普通權(quán)限 FOREGROUND_SERVICE。在未獲得此權(quán)限的情況下啟動前臺服務(wù)將會引發(fā) SecurityException柳恐。

    • 6.6:移除對 Build.serial 的直接訪問伐脖。使用Build.getSerial() 函數(shù)來替代 Build.serial獲取標識符热幔。應(yīng)用必須請求READ_PHONE_STATE 權(quán)限。

    • 6.7:Detected problems with API 彈窗的解決:https://blog.csdn.net/codekxx/article/details/86507470#comments

    • 更多細節(jié)參閱:https://developer.android.com/about/versions/pie


  • 7:安卓10.0 API-29

    • 7.1:TelephonyManager#getDeviceId(),需要申請READ_PRIVILEGED_PHONE_STATE權(quán)限讼庇,此權(quán)限只開發(fā)給系統(tǒng)app绎巨,按照谷歌的建議如果不是做framework層app開發(fā)就不要使用此api,普通app此處需要大量適配蠕啄,因為三方支付類統(tǒng)計類支持包都會調(diào)用此api认烁,如果不能全部更新就不要把target提升到29,否則會直接拋出SecurityException:
      getDeviceId: The user 10104 does not meet the requirements to access device identifiers
      at android.os.Parcel.createException(Parcel.java:2071)
      at android.os.Parcel.readException(Parcel.java:2039)
      at android.os.Parcel.readException(Parcel.java:1987)
      at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:10389)
      

      在安卓9.0時此方法已經(jīng)提示deprecated介汹,建議開發(fā)者用getImei()返回GSM網(wǎng)絡(luò)的IMEI却嗡,或者getMeid()返回CDMA網(wǎng)絡(luò)的MEID。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘹承,一起剝皮案震驚了整個濱河市窗价,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叹卷,老刑警劉巖撼港,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骤竹,居然都是意外死亡帝牡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門蒙揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靶溜,“玉大人,你說我怎么就攤上這事懒震≌窒ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵个扰,是天一觀的道長瓷炮。 經(jīng)常有香客問我,道長递宅,這世上最難降的妖魔是什么娘香? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮办龄,結(jié)果婚禮上烘绽,老公的妹妹穿的比我還像新娘。我一直安慰自己土榴,他們只是感情好诀姚,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布响牛。 她就那樣靜靜地躺著玷禽,像睡著了一般赫段。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矢赁,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天糯笙,我揣著相機與錄音,去河邊找鬼撩银。 笑死给涕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的额获。 我是一名探鬼主播够庙,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抄邀!你這毒婦竟也來了耘眨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤境肾,失蹤者是張志新(化名)和其女友劉穎剔难,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奥喻,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡偶宫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了环鲤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纯趋。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冷离,靈堂內(nèi)的尸體忽然破棺而出结闸,到底是詐尸還是另有隱情,我是刑警寧澤酒朵,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布桦锄,位于F島的核電站,受9級特大地震影響蔫耽,放射性物質(zhì)發(fā)生泄漏结耀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一匙铡、第九天 我趴在偏房一處隱蔽的房頂上張望图甜。 院中可真熱鬧,春花似錦鳖眼、人聲如沸黑毅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矿瘦。三九已至枕面,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缚去,已是汗流浹背潮秘。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留易结,地道東北人枕荞。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓袒炉,卻偏偏與公主長得像锦溪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鱼辙,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,160評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程鹦肿,因...
    小菜c閱讀 6,424評論 0 17
  • 本人初學Android玉控,最近做了一個實現(xiàn)安卓簡單音樂播放功能的播放器,收獲不少狮惜,于是便記錄下來自己的思路與知識總結(jié)...
    落日柳風閱讀 19,134評論 2 41
  • 1. 前世 你我相遇 你是萬人敬仰的君主 我是凡間普通醫(yī)女 一次救死扶傷的邂逅 愛便來了 2. 你愛的肆意 霸道...
    大小簡閱讀 385評論 0 1
  • 百年時間對一個家庭來說已反復(fù)更替了幾代人高诺,許多上一輩的事情都已淡忘。但百年前的世界發(fā)生了什么碾篡,相信很多人都能夠歷歷...
    塵世小書蟲閱讀 1,052評論 0 0