回覆列表
  • 1 # 劉某人程式設計師

    作為Android開發者,不請自來

    根據 Google Play 的政策,從 2019 年 8 月開始,所有在 Play 上架的新應用和已有應用的更新都必須包含原生 64 位版本,也就是說如果你的應用不支援64位CPU架構,可能會慘遭下架。

    那麼我們應當如何檢測自己的應用是否支援64位CPU呢?

    首先需要檢查您的應用是否使用了任何原生程式碼。如果您的應用符合以下情況,便是使用了原生程式碼:

    使用了任何 C/C++(原生)程式碼。與任何第三方原生庫關聯。透過使用原生庫的第三方應用構建程式構建而成。

    如果你有使用這三類,比如你的應用實現了JNI的一些引數,又或者關聯使用了一些第三方的SDK,他們很可能就存在使用JNI的問題。

    要確定應用是否包含 64 位庫,最簡單的方法就是檢查 APK 檔案的結構。在編譯時,APK 會與應用所需的所有原生庫打包在一起。原生庫會根據 ABI 而儲存在不同的資料夾中。您的應用無需支援所有 64 位架構,但對於您支援的每種原生 32 位架構,則應用都必須包含相應的 64 位架構。

    對於 ARM 架構,32 位庫位於 armeabi-v7a 中。對應的 64 位庫位於 arm64-v8a 中。

    對於 x86 架構,請查詢 x86(32 位)和 x86_64(64 位)。

    當然,還有很多的手段是可以自查的

    使用 APK 分析器查詢原生庫

    從選單中依次選擇 Build > Analyze APK…

    選擇您要評估的 APK。

    檢視 lib 資料夾,您可以在其中找到所有“.so”檔案。如果在您的應用中找不到任何“.so”檔案,則說明該應用已經準備好相應的庫,您無需採取進一步措施。如果您看到 armeabi-v7ax86,則說明您有 32 位庫。

    檢查是否在 arm64-v8ax86_64 資料夾中也有類似的“.so”檔案。

    如果您沒有任何 arm64-v8ax86_64 庫,則需要更新編譯流程以開始在 APK 中編譯並打包相應工件。

    如果您看到 32 位和 64 位的庫均已打包到軟體包中,則可以跳至在 64 位裝置上測試應用。

    在解壓縮的 APK 中查詢原生庫

    將APK解壓後,在libs下也可以檢視是否有32或者64位的so

    總結

    所以如何為安卓應用提供64位原生的支援?首先如果你的應用沒有使用到任何32位的CPU指令集,那麼你無需操作,但是如果你的應用支援32位的CPU指令集,那你必須支援64位,所以在編譯32位的時候你應該再編譯64位的支援so才行

  • 2 # JJ好劇看不停

    確保您的應用支援 64 位裝置

    2019 年 8 月 1 日開始,您在 Google Play 上釋出的應用必須支援 64 位架構。64 位 CPU 能夠為您的使用者提供更快、更豐富的體驗。新增 64 位的應用版本不僅可以提升效能、為未來創新創造條件,還能針對僅支援 64 位架構的裝置做好準備。

    本指南介紹瞭如何確保 32 位應用為支援 64 位裝置做好準備,供您隨時採用。

    評估您的應用

    如果您的應用僅使用以 Java 程式語言或 Kotlin 編寫的程式碼(包括任何庫或 SDK),那麼就表示該應用已經支援 64 位裝置。如果您的應用使用了任何原生程式碼,或者您不確定自己的應用是否使用了這類程式碼,那麼您需要評估應用並相應採取措施。

    您的應用是否使用了原生程式碼?

    首先需要檢查您的應用是否使用了任何原生程式碼。如果您的應用符合以下情況,便是使用了原生程式碼:

    使用了任何 C/C++(原生)程式碼。與任何第三方原生庫關聯。透過使用原生庫的第三方應用構建程式構建而成。

    您的應用是否包含 64 位庫?

    要確定應用是否包含 64 位庫,最簡單的方法就是檢查 APK 檔案的結構。在編譯時,APK 會與應用所需的所有原生庫打包在一起。原生庫會根據 ABI 而儲存在不同的資料夾中。您的應用無需支援所有 64 位架構,但對於您支援的每種原生 32 位架構,則應用都必須包含相應的 64 位架構。

    對於 ARM 架構,32 位庫位於 armeabi-v7a 中。對應的 64 位庫位於 arm64-v8a 中。

    對於 x86 架構,請查詢 x86(32 位)和 x86_64(64 位)。

    首先要確保這兩個資料夾中都有原生庫。總結如下:

    平臺32 位庫資料夾64 位庫資料夾ARM x86

    請注意,每個資料夾中的一套庫可能完全相同,也可能不完全相同,這取決於您的應用。您應達到的目標是確保您的應用能夠在僅支援 64 位架構的環境中正常執行。

    通常情況下,同時針對 32 位和 64 位架構編譯的 APK 或軟體包會具有這兩種 ABI 的資料夾,每個資料夾中都有一套相應的原生庫。如果您的應用不支援 64 位架構,那麼您很可能會看到 32 位 ABI 資料夾,但不會看到 64 位資料夾。

    使用 APK 分析器查詢原生庫

    開啟 Android Studio,然後開啟任一專案。從選單中依次選擇 Build > Analyze APK…選擇您要評估的 APK。

    檢視 lib 資料夾,您可以在其中找到所有“.so”檔案。如果在您的應用中找不到任何“.so”檔案,則說明該應用已經準備好相應的庫,您無需採取進一步措施。如果您看到 armeabi-v7ax86,則說明您有 32 位庫。

    檢查是否在 arm64-v8ax86_64 資料夾中也有類似的“.so”檔案。

    如果您沒有任何 arm64-v8ax86_64 庫,則需要更新編譯流程以開始在 APK 中編譯並打包相應工件。

    如果您看到 32 位和 64 位的庫均已打包到軟體包中,則可以跳至在 64 位裝置上測試應用。

    在解壓縮的 APK 中查詢原生庫

    APK 檔案的結構類似於 zip 檔案,可以像 zip 檔案一樣解壓縮。如果您更喜歡使用命令列或任何其他解壓縮工具,也可以採用解壓縮 APK 的方法。

    只需解壓縮 APK 檔案(根據您使用的解壓縮工具,您可能需要將其重新命名為 .zip),然後按照上文中的指南瀏覽解壓縮後的檔案,即可確定您的應用是否已經為支援 64 位裝置做好準備了。

    例如,您可以從命令列中執行如下命令:

    請注意,此示例中存在 armeabi-v7a 庫和 arm64-v8a 庫,這表明該應用支援 64 位架構。

    使用 64 位庫編譯應用

    下面針對編譯 64 位庫做出了相關的說明。不過,需要指出的是,以下內容僅介紹瞭如何編譯在原始碼的基礎上可編譯的程式碼和庫。

    如果您使用任何外部 SDK 或庫,請確保按照上文所述的步驟使用 64 位版本。如果沒有 64 位版本可用,請與相應 SDK 或庫的所有者聯絡,並在規劃支援 64 位裝置的方案時將這一點考慮在內。

    使用 Android Studio 或 Gradle 進行編譯

    大多數 Android Studio 專案都使用 Gradle 作為底層編譯系統,因此本部分適用於使用這兩種工具進行編譯的情況。針對原生程式碼進行編譯很簡單,只需將 arm64-v8a 和/或 x86_64(取決於您要支援的架構)新增到應用的“build.gradle”檔案中的 ndk.abiFilters 設定:

    使用 CMake 進行編譯

    如果您的應用是使用 CMake 編譯的,則可以透過將 arm64-v8a 傳遞到“-DANDROID_ABI”引數來編譯 64 位 ABI:

    在使用 時,此方法無效。請參閱使用 Gradle 進行編譯部分。

    使用 ndk-build 進行編譯

    如果您的應用是使用 ndk-build 編譯的,則可以透過 變數修改“app.mk”檔案,從而編譯 64 位 ABI:

    在使用 時,此方法無效。請參閱使用 Gradle 進行編譯部分。

    利用 Android App Bundle 減小大小增加量

    為您的應用新增 64 位架構支援可能會導致 APK 的大小增加。我們強烈建議您利用 Android APP Bundle 功能,以儘量減小因在同一 APK 中同時包含 32 位和 64 位原生程式碼而對 APK 大小產生的影響。

    實際上,讓應用改用 Android App Bundle 不僅能夠降低 APK 大小,甚至能讓其變得比現在更小。

    遊戲開發者

    我們知道,遷移第三方遊戲引擎是一個耗費人力的過程,並且需要很長的準備時間。慶幸的是,三大最常用的引擎目前都支援 64 位架構:

    Unreal(自 2015 年起)Cocos2d(自 2015 年起)Unity(自 2018 年起)

    Unity 開發者升級到支援的版本

    Unity 自版本 2018.2 和 2017.4.16 開始提供 64 位支援。

    如果您發現自己使用的 Unity 版本不支援 64 位架構,請確定要升級到的版本,並按照 Unity 提供的指南遷移您的環境,確保將您的應用升級到可編譯 64 位庫的版本。Unity 建議您升級到該編輯器的最新 LTS 版本,以獲取最新的功能和更新。

    下面的圖表概述了 Unity 的各個版本以及您應該採取的措施:

    Unity 版本版本是否支援 64 位架構?建議採取的措施

    2018.4 (LTS)

    ✔️

    (待發布)確保您的編譯設定能夠輸出 64 位庫。

    2018.3

    ✔️

    確保您的編譯設定能夠輸出 64 位庫。

    2018.2

    ✔️

    確保您的編譯設定能夠輸出 64 位庫。

    2018.1

    提供實驗性的 64 位支援。

    2017.4 (LTS)

    ✔️

    自 2017.4.16 起支援 64 位架構。確保您的編譯設定能夠輸出 64 位庫。

    2017.3

    ✖️

    升級到支援 64 位架構的版本。

    2017.2

    ✖️

    升級到支援 64 位架構的版本。

    2017.1

    ✖️

    升級到支援 64 位架構的版本。

    <=5.6

    ✖️

    升級到支援 64 位架構的版本。

    確保編譯設定能夠輸出 64 位庫

    如果您使用的 Unity 版本支援 64 位 Android 庫,則可以透過調整編譯設定來生成 64 位版本的應用。您還需要使用 IL2CPP 後端作為 Scripting Backend(詳見此處)。要為編譯 64 位架構而設定 Unity 專案,請執行以下操作:

    轉到 Build Settings,然後確認 Unity 標誌是否顯示在 Android 平臺旁邊,以確保您是在針對 Android 進行編譯。**如果 Unity 標誌未顯示在 Android 平臺旁邊,請選擇 Android,然後點選 Switch Platform

    點選 Player Settings

    依次轉到 Player Settings Panel > Settings for Android > Other Settings > Configuration

    Scripting Backend 設為 IL2CPP

    依次選擇**“Target Architectures”> ARM64 複選框。

    照常進行編譯!

    請注意,在編譯 ARM64 架構時,您需要專門針對該平臺編譯您的所有資源。請按照 Unity 的指南來縮減 APK 大小,同時考慮利用 Android APP Bundle 功能來減小大小增加量。

    在 64 位硬體上測試應用

    64 位版本的應用應提供與 32 位版本相同的質量和功能集。請對您的應用進行測試,以確保使用最新的 64 位裝置的使用者能夠在您的應用中獲得優質的體驗。

    要開始測試您的應用,您要有支援 64 位架構的裝置。時下有很多支援 64 位架構的熱門裝置,例如 Google 的 Pixel 以及其他旗艦裝置。

    要測試您的 APK,最簡單的方法就是使用 adb 安裝該應用。大多數情況下,您可以提供 引數,用以指示要將哪些庫安裝到裝置上。這樣在裝置上安裝該應用時便會僅包含 64 位庫。

    安裝成功後,請照常對應用進行測試,以確保其質量與 32 位版本相同。

  • 中秋節和大豐收的關聯?
  • 頻繁地接吻意味什麼?