升級到Android 10和gradle升級

gradle升級到3.5.2

build tools gradle 版本升級到 3.5.2
—— gradle最低版本是 5.4.1 https://services.gradle.org/distributions/gradle-5.4.1-all.zip

Plugin version Required Gradle version
1.0.0 - 1.1.3 2.2.1 - 2.3
1.2.0 - 1.3.1 2.2.1 - 2.9
1.5.0 2.2.1 - 2.13
2.0.0 - 2.1.2 2.10 - 2.13
2.1.3 - 2.2.3 2.14.1+
2.3.0+ 3.3+
3.0.0+ 4.1+
3.1.0+ 4.4+
3.2.0 - 3.2.1 4.6+
3.3.0 - 3.3.2 4.10.1+
3.4.0 - 3.4.1 5.1.1+
3.5.0+ 5.4.1-5.6.4

參考文獻:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=en#updating-gradle

遇到的問題:

1、 cannot generate view binders java.lang.StackOverflowError at
android.databinding.tool.expr.Expr.resolveListeners(Expr.java:209)
at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)

stackoverflow:
  	https://stackoverflow.com/questions/58763363/when-building-android-project-with-android-gradle-plugin-v-3-5-2-my-builds-fail

解決方法:
	去除xml文件中databing熟悉的get()方法,如在xml中定義了一個ObservableBoolean flag,不要使用flag.get()

2、INFO: DSL element 'useProguard' is obsolete and will be removed soon. Use 'android.enableR8' in gradle.properties to switch between R8 and Proguard..

android sdk版本升級

compileSdkVersion 	28 -> 29
targetSdkVersion  	26 -> 29
buildToolsVersion 	28.0.3 -> 29.0.2
  • 升級到android 9(28)需要注意點
    官方api:Android 9變更

    • Apache HTTP 客戶端棄用:從 Android 9 開始,該內容庫已從 bootclasspath 中移除,且默認情況下應用無法使用它。要繼續使用 Apache HTTP 客戶端,以 Android 9 及更高版本爲目標平臺的應用可以向其 AndroidManifest.xml 添加以下內容:

      <uses-library android:name="org.apache.http.legacy" android:required="false"/>
      
    • 現在強制執行 FLAG_ACTIVITY_NEW_TASK 要求。在 Android 9 中,您不能從非 Activity 環境中啓動 Activity,除非您傳遞 Intent 標誌 FLAG_ACTIVITY_NEW_TASK。 如果您嘗試在不傳遞此標誌的情況下啓動 Activity,則該 Activity 不會啓動,系統會在日誌中輸出一則消息。
      注:在 Android 7.0(API 級別 24)之前,標誌要求一直是期望的行爲並被強制執行。 Android 7.0 中的一個錯誤會臨時阻止實施標誌要求。

    • 屏幕旋轉變更。從 Android 9 開始,對縱向旋轉模式做出了重大變更。 在 Android 8.0(API 級別 26)中,用戶可以使用 Quicksettings 圖塊或 Display 設置在自動屏幕旋轉和縱向旋轉模式之間切換。 縱向模式已重命名爲旋轉鎖定,它會在自動屏幕旋轉關閉時啓用。 自動屏幕旋轉模式沒有任何變更。

    幕方向 行爲
    指定、user 在自動屏幕旋轉和旋轉鎖定下,Activity 可以縱向或橫向(以及顛倒縱向或橫向)呈現。 預期同時支持縱向和橫向佈局。
    serLandscape 在自動屏幕旋轉和旋轉鎖定下,Activity 可以橫向或顛倒橫向呈現。 預期只支持橫向佈局。
    serPortrait 在自動屏幕旋轉和旋轉鎖定下,Activity 可以縱向或顛倒縱向呈現。 預期只支持縱向佈局。
    ullUser 在自動屏幕旋轉和旋轉鎖定下,Activity 可以縱向或橫向(以及顛倒縱向或橫向)呈現。 預期同時支持縱向和橫向佈局。旋轉鎖定用戶將可選擇鎖定到顛倒縱向,通常爲 180º。
    ensor、fullSensor、sensorPortrait、sensorLandscape 忽略旋轉鎖定模式首選項,視爲自動屏幕旋轉已啓用。 請僅在例外情況下並經過仔細的用戶體驗考量後再使用此項。
    • 隱私權變更

      • 限制訪問通話記錄
      • 限制訪問電話號碼
    • 對使用非 SDK 接口的限制 —— 官方文檔介紹
      爲幫助確保應用穩定性和兼容性,此平臺對某些非 SDK 函數和字段的使用進行了限制;無論您是直接訪問這些函數和字段,還是通過反射或 JNI 訪問,這些限制均適用。 在 Android 9 中,您的應用可以繼續訪問這些受限的接口;該平臺通過 toast 和日誌條目提醒您注意這些接口。 如果您的應用顯示這樣的 toast,則必須尋求受限接口之外的其他實現策略。 如果您認爲沒有可行的替代策略,您可以提交錯誤以請求重新考慮此限制。

    黑名單中的非 SDK 接口

    Dalvik 指令引用某個字段
    alvik 指令引用某個方法
    過 Class.getDeclaredField() 或 Class.getField() 進行反射
    過 Class.getDeclaredMethod()、Class.getMethod() 進行反射
    過 Class.getDeclaredFields()、Class.getFields() 進行反射
    過 Class.getDeclaredMethods()、Class.getMethods() 進行反射
    過 env->GetFieldID() 進行 JNI 調用
    過 env->GetMethodID() 進行 JNI 調用
  1. 升級到android 10(29)

    • 對使用非 SDK 接口的限制進行了更新
    • 針對全屏 Intent 的權限變更
    • 支持可摺疊設備
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章