Cara menurunkan bit dari 64 ke 32

Mulai 1 Agustus 2019, semua aplikasi Anda yang dipublikasikan di Google Play harus mendukung arsitektur 64-bit. CPU 64-bit memberikan pengalaman yang lebih cepat dan lebih kaya kepada pengguna. Menambahkan aplikasi versi 64-bit akan memperbaiki performa, membuka peluang inovasi di masa depan, dan menyiapkan aplikasi untuk perangkat dengan hardware yang hanya mendukung arsitektur 64-bit.

Panduan ini menjelaskan langkah-langkah yang dapat Anda lakukan sekarang untuk memastikan bahwa aplikasi 32-bit Anda siap mendukung perangkat 64-bit.

Menilai aplikasi Anda

Jika aplikasi Anda hanya menggunakan kode yang ditulis dalam bahasa pemrograman Java atau Kotlin, termasuk semua library atau SDK, aplikasi tersebut sudah siap untuk perangkat 64-bit. Jika aplikasi Anda menggunakan kode native, atau Anda tidak yakin kode apa yang digunakan, sebaiknya nilai aplikasi Anda dan ambil tindakan.

Pemeriksaan status cepat

Untuk memeriksa dengan cepat apakah aplikasi Anda siap untuk persyaratan 64-bit atau tidak, buka Konsol Play, lalu tinjau rilis yang sudah ada untuk melihat apakah rilis tersebut telah mematuhi persyaratan:

Cara menurunkan bit dari 64 ke 32

Jika terdapat masalah terkait persyaratan 64-bit, Konsol Play akan menampilkan peringatan untuk rilis draf Anda. Berikut contohnya:

Cara menurunkan bit dari 64 ke 32

Jika melihat peringatan, ikuti langkah berikut untuk menyiapkan aplikasi.

Apakah aplikasi Anda menggunakan kode native?

Hal pertama yang harus dilakukan adalah memeriksa apakah aplikasi Anda menggunakan kode native. Aplikasi Anda menggunakan kode native jika:

  • Menggunakan kode C/C++ (native) pada aplikasi.
  • Terhubung dengan library native pihak ketiga.
  • Dibuat oleh pembuat aplikasi pihak ketiga yang menggunakan library native.

Apakah aplikasi Anda menyertakan library 64-bit?

Cara paling sederhana untuk memeriksa adanya library 64-bit pada aplikasi adalah dengan memeriksa struktur file APK Anda. Saat dibuat, APK akan dikemas dengan library native yang dibutuhkan oleh aplikasi. Library native disimpan di berbagai folder berdasarkan ABI. Dukungan pada setiap arsitektur 64-bit tidak diperlukan, tetapi Anda harus menyertakan arsitektur 64-bit yang sesuai untuk setiap arsitektur 32-bit native yang didukung.

Untuk arsitektur ARM, library 32-bit terletak di armeabi-v7a. Sementara itu, library 64-bit terletak di arm64-v8a.

Untuk arsitektur x86, cari x86 untuk 32-bit dan x86_64 untuk 64-bit.

Hal pertama yang perlu dilakukan adalah memastikan Anda memiliki library native di kedua folder ini. Ringkasnya:

Platform Folder library 32-bitFolder library 64-bit
ARM lib/armeabi-v7a lib/arm64-v8a
x86 lib/x86 lib/x86_64

Perlu diingat bahwa bergantung pada aplikasi Anda, mungkin akan ada set library yang sama persis di setiap folder dan mungkin juga tidak. Tujuannya adalah untuk memastikan aplikasi Anda berjalan dengan benar di lingkungan khusus 64-bit.

Pada umumnya, APK atau bundle yang dibuat untuk arsitektur 32-bit dan 64-bit akan memiliki folder untuk kedua ABI, masing-masing dengan set library native yang terkait. Jika tidak ada dukungan untuk 64-bit, Anda akan melihat folder ABI 32-bit tetapi tidak melihat folder 64-bit.

Mencari library native menggunakan APK Analyzer

APK Analyzer adalah alat yang memungkinkan Anda mengevaluasi berbagai aspek APK yang telah dibuat. Dalam hal ini, kita akan menggunakannya untuk menemukan library native, dan memastikan adanya library 64-bit.

  1. Buka Android Studio, lalu buka project apa saja.
  2. Dari menu, pilih Build > Analyze APK

    Cara menurunkan bit dari 64 ke 32

  3. Pilih APK yang ingin Anda evaluasi.

  4. Lihat di dalam folder lib, tempat Anda akan menemukan file '.so'. Jika file '.so' tidak dapat ditemukan pada aplikasi Anda, maka aplikasi sudah siap dan Anda tidak perlu melakukan tindakan apa pun. Jika Anda melihat armeabi-v7a atau x86, maka Anda memiliki library 32-bit.

  5. Periksa untuk memastikan ada file '.so' yang mirip di folder arm64-v8a atau x86_64.

    Cara menurunkan bit dari 64 ke 32

  6. Jika library arm64-v8a atau x86_64 tidak ada, Anda harus mengupdate proses build untuk mulai membuat build dan mengemas artefak tersebut dalam APK Anda.

  7. Jika kedua library sudah dikemas, Anda dapat beralih ke menguji aplikasi pada hardware 64-bit.

Mencari library native dengan mengekstrak APK

File APK memiliki struktur seperti file zip, dan juga dapat diekstrak. Jika lebih suka menggunakan command line atau alat ekstraksi lainnya, pengekstrakan APK cocok untuk Anda.

Cukup ekstrak file APK (bergantung pada software ekstraksinya, Anda mungkin harus mengubah nama file menjadi .zip) dan temukan file yang telah diekstrak. Ikuti panduan di atas untuk mengetahui apakah Anda siap mendukung perangkat 64-bit.

Misalnya, Anda dapat menjalankan perintah berikut dari command line:

:: Command Line
> zipinfo -1 YOUR_APK_FILE.apk | grep \.so$
lib/armeabi-v7a/libmain.so
lib/armeabi-v7a/libmono.so
lib/armeabi-v7a/libunity.so
lib/arm64-v8a/libmain.so
lib/arm64-v8a/libmono.so
lib/arm64-v8a/libunity.so

Perhatikan bahwa dalam contoh ini, terdapat library armeabi-v7a dan arm64-v8a, yang berarti aplikasi Anda mendukung arsitektur 64-bit.

Membuat aplikasi dengan library 64-bit

Berikut ini adalah petunjuk untuk membuat library 64-bit. Namun, perlu diketahui bahwa petunjuk ini hanya mencakup pembuatan kode dan library yang dapat Anda buat dari sumber.

Jika menggunakan SDK atau library eksternal, pastikan Anda menggunakan versi 64-bit dengan mengikuti langkah-langkah di atas. Hubungi pemilik SDK atau library jika versi 64-bit tidak tersedia, dan pertimbangkan hal ini saat merencanakan dukungan Anda untuk perangkat 64-bit.

Membuat aplikasi dengan Android Studio atau Gradle

Sebagian besar project Android Studio menggunakan Gradle sebagai sistem build yang mendasarinya, sehingga bagian ini berlaku pada kedua kasus. Guna mengaktifkan build untuk kode native, Anda hanya perlu menambahkan arm64-v8a dan/atau x86_64 (bergantung pada arsitektur yang ingin Anda dukung) ke setelan ndk.abiFilters pada file 'build.gradle' aplikasi Anda:

Groovy

// Your app's build.gradle
plugins {
  id 'com.android.app'
}

android {
   compileSdkVersion 27
   defaultConfig {
       appId "com.google.example.64bit"
       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
// ...

Kotlin

// Your app's build.gradle
plugins {
    id("com.android.app")
}

android {
    compileSdkVersion(27)
    defaultConfig {
        appId = "com.google.example.64bit"
        minSdkVersion(15)
        targetSdkVersion(28)
        versionCode = 1
        versionName = "1.0"
        ndk {
            abiFilters += listOf("armeabi-v7a","arm64-v8a","x86","x86_64")
        }
// ...

Membuat aplikasi dengan CMake

Jika aplikasi Anda dibuat menggunakan CMake, Anda dapat membuat build untuk ABI 64-bit dengan menyertakan arm64-v8a ke parameter '-DANDROID_ABI':

:: Command Line
> cmake -DANDROID_ABI=arm64-v8a … or
> cmake -DANDROID_ABI=x86_64 …

Opsi ini tidak berpengaruh jika menggunakan externalNativeBuild. Lihat bagian Membuat aplikasi dengan Gradle.

Membuat aplikasi dengan ndk-build

Jika aplikasi dibuat dengan ndk-build, Anda dapat membuat build untuk ABI 64-bit dengan memodifikasi file 'Application.mk' menggunakan variabel APP_ABI:

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64

Opsi ini tidak berpengaruh jika menggunakan externalNativeBuild. Lihat bagian Membuat aplikasi dengan Gradle.

Melakukan porting kode 32-bit ke 64-bit

Jika kode Anda sudah berjalan pada desktop atau iOS, Anda tidak perlu melakukan tindakan tambahan untuk Android. Jika ini pertama kalinya Anda membuat kode untuk sistem 64-bit, masalah utama yang harus diatasi adalah pointer yang tidak lagi sesuai dengan jenis integer 32-bit seperti int. Anda harus memperbarui kode yang menyimpan pointer dalam jenis seperti int, unsigned, atau uint32_t. Pada sistem Unix, long cocok dengan ukuran pointer, tetapi berbeda halnya pada Windows. Jadi, Anda harus menggunakan jenis yang menampakkan intent uintptr_t atau intptr_t. Gunakan jenis ptrdiff_t untuk menyimpan perbedaan antara dua pointer.

Anda harus selalu memilih jenis integer lebar tetap tertentu yang ditentukan dalam , bukan jenis tradisional seperti int atau long, bahkan untuk non-pointer.

Gunakan flag compiler berikut untuk merekam kasus saat kode Anda salah mengonversi antara pointer dan integer:

-Werror=pointer-to-int-cast
-Werror=int-to-pointer-cast
-Werror=shorten-64-to-32

Class Java dengan kolom int yang menampung pointer untuk objek C/C++ memiliki masalah yang sama. Telusuri jint di sumber JNI dan pastikan Anda beralih ke long pada sistem Java dan jlong pada sistem C++.

Deklarasi fungsi implisit jauh lebih berbahaya untuk kode 64-bit. C/C++ menganggap int sebagai jenis nilai yang ditampilkan dari fungsi yang dideklarasikan secara implisit (artinya fungsi yang deklarasinya belum dilihat oleh compiler). Jika jenis nilai yang ditampilkan sebenarnya untuk fungsi Anda berupa pointer, jenis nilai yang ditampilkan ini akan berfungsi dengan baik pada sistem 32-bit, yaitu pointer akan sesuai dengan int. Namun, pada sistem 64-bit, compiler akan berada di separuh bagian atas pointer Anda. Contoh:

// This function returns a pointer:
// extern char* foo();

// If you don't include a header that declares it,
// when the compiler sees this:
char* result = foo();

// Instead of compiling that to:
result = foo();

// It compiles to something equivalent to:
result = foo() & 0xffffffff;

// Which will then cause a SIGSEGV if you try to dereference `result`.

Flag compiler berikut mengubah peringatan deklarasi fungsi implisit menjadi error sehingga Anda dapat menemukan dan memperbaiki masalah ini dengan lebih mudah:

-Werror=implicit-function-declaration

Jika menggunakan assembler inline, Anda harus menulis ulang flag compiler atau menggunakan implementasi C/C++ biasa.

Jika memiliki ukuran jenis hard code (misalnya 8 atau 16 byte), ganti dengan ekspresi sizeof(T) yang setara, seperti sizeof(void*).

Jika perlu mengompilasi kode yang berbeda secara kondisional untuk 32-bit dan 64-bit, Anda dapat menggunakan #if defined(__LP64__) untuk perbedaan 32/64 umum, atau __arm__, __aarch64__ (arm64), __i386__ (x86), dan __x86_64__ untuk arsitektur tertentu yang didukung oleh Android.

Anda harus menyesuaikan string format untuk fungsi yang menyerupai printf atau scanf, karena penentu format tradisional tidak mengizinkan Anda menentukan jenis 64-bit dengan cara yang benar untuk perangkat 32-bit dan juga 64-bit. Makro PRI dan SCN dalam dapat mengatasi masalah ini, PRIxPTR dan SCNxPTR untuk menulis/membaca pointer hex, serta PRId64 dan SCNd64 untuk menulis/membaca nilai 64-bit secara portabel.

Saat melakukan peralihan, Anda harus menggunakan 1ULL untuk beralih ke konstanta 64-bit, bukannya menggunakan 1 yang hanya 32-bit.

Mengurangi peningkatan ukuran dengan Android App Bundle

Penambahan dukungan arsitektur 64-bit ke aplikasi dapat menyebabkan ukuran APK bertambah besar. Kami sangat merekomendasikan penggunaan fitur Android App Bundle untuk meminimalkan dampak peningkatan ukuran pada kode native 32-bit dan 64-bit dalam APK yang sama.

Pengalihan aplikasi Anda ke Android App Bundle dapat meringkas ukuran APK, dengan menguranginya hingga lebih kecil daripada ukuran saat ini.

Developer game

Kami memahami bahwa memigrasikan mesin game pihak ketiga merupakan proses yang intensif dengan waktu pengerjaan yang lama. Untungnya, tiga mesin game yang paling sering digunakan sudah mendukung 64-bit:

  • Unreal sejak 2015
  • Cocos2d sejak 2015
  • Unity sejak 2018

Developer Unity

Upgrade ke versi yang mendukung

Unity mulai menyediakan dukungan 64-bit pada versi 2018.2 & 2017.4.16.

Jika menggunakan versi Unity yang tidak mendukung 64-bit, tentukan ke versi mana Anda ingin mengupgrade, dan ikuti panduan yang disediakan Unity untuk memigrasikan lingkungan Anda guna memastikan bahwa aplikasi Anda diupgrade ke versi yang dapat membuat library 64-bit. Unity merekomendasikan Anda memiliki akses ke fitur dan update terkini dengan mengupgrade ke versi LTS editor terbaru.

Berikut adalah diagram yang merangkum berbagai versi Unity dan tindakan yang harus Anda lakukan:

Versi UnityMendukung 64-bit?Tindakan yang disarankan

2020.x

✔️

Pastikan setelan build Anda menghasilkan library 64-bit.

2019.x

✔️

Pastikan setelan build Anda menghasilkan library 64-bit.

2018.4 (LTS)

✔️

Pastikan setelan build Anda menghasilkan library 64-bit.

2018.3

✔️

Pastikan setelan build Anda menghasilkan library 64-bit.

2018.2

✔️

Pastikan setelan build Anda menghasilkan library 64-bit.

2018.1

Memberikan dukungan 64-bit eksperimental.

2017.4 (LTS)

✔️

Didukung pada 2017.4.16. Pastikan setelan build Anda menghasilkan library 64-bit.

2017.3

✖️

Upgrade ke versi yang mendukung 64-bit.

2017.2

✖️

Upgrade ke versi yang mendukung 64-bit.

2017.1

✖️

Upgrade ke versi yang mendukung 64-bit.

<=5.6

✖️

Upgrade ke versi yang mendukung 64-bit.

Mengubah setelan build untuk menghasilkan library 64-bit

Jika menggunakan versi Unity yang mendukung library Android 64-bit, Anda dapat membuat aplikasi versi 64-bit dengan menyesuaikan setelan build. Anda juga harus menggunakan backend IL2CPP sebagai Scripting Backend (selengkapnya di sini). Untuk menyiapkan project Unity guna membuat build arsitektur 64-bit, lakukan hal berikut:

  1. Buka Build Settings dan pastikan Anda membuat build untuk Android dengan memverifikasi bahwa simbol Unity berada di sebelah Android pada Platform.
    1. Jika simbol Unity tidak berada di sebelah platform Android, pilih Android dan klik Switch Platform.
  2. Klik Player settings.

    Cara menurunkan bit dari 64 ke 32

  3. Buka Player Settings Panel > Settings for Android > Other settings > Configuration

  4. Tetapkan Scripting Backend ke IL2CPP.

  5. Pilih kotak centang Target Architecture > ARM64.

    Cara menurunkan bit dari 64 ke 32

  6. Buat build seperti biasa.

Perhatikan bahwa pembuatan build ARM64 akan mewajibkan semua aset Anda dibuat khusus untuk platform tersebut. Ikuti panduan Unity untuk mengurangi ukuran APK, dan pertimbangkan untuk memanfaatkan fitur Android App Bundle untuk membantu mengurangi peningkatan ukuran.

Kepatuhan terhadap persyaratan arsitektur 64-bit dan Multi-APK

Jika menggunakan dukungan multi-APK dari Google Play untuk memublikasikan aplikasi, perhatikan bahwa kepatuhan terhadap persyaratan 64-bit akan dievaluasi pada tingkat rilis. Namun, persyaratan 64-bit ini tidak berlaku untuk APK atau app bundle yang tidak didistribusikan ke perangkat yang menjalankan Android 9 Pie atau yang lebih baru.

Jika salah satu APK Anda ditandai sebagai APK yang tidak mematuhi persyaratan, tetapi versinya lebih lama dan tidak mungkin dibuat mematuhi persyaratan, salah satu strateginya adalah dengan menambahkan atribut maxSdkVersion="27" pada elemen uses-sdk dalam manifes APK tersebut. APK ini tidak akan dikirim ke perangkat yang menjalankan Android 9 Pie atau yang lebih baru, dan tidak lagi mengalami masalah kepatuhan.

Kepatuhan terhadap arsitektur 64-bit dan RenderScript

Jika aplikasi menggunakan RenderScript dan dibuat dengan alat Android versi lama, Anda mungkin akan mengalami masalah kepatuhan 64-bit untuk aplikasi tersebut. Dengan alat build versi sebelum 21.0.0, compiler dapat memproduksi bitcode ke file .bc eksternal. File .bc lama ini tidak lagi didukung untuk arsitektur 64-bit, jadi keberadaannya di dalam APK akan mengakibatkan masalah kepatuhan.

Untuk mengatasi masalah ini, hapus semua file .bc dalam project Anda, upgrade lingkungan Anda ke versi build-tools-21.0.0 atau yang lebih baru, dan tetapkan renderscriptTargetApi di Android Studio ke versi 21+, agar compiler tidak menghasilkan file .bc. Lalu, build ulang aplikasi Anda, periksa apakah file .bc ada, dan upload ke Konsol Play.

Menguji aplikasi pada hardware 64-bit

Aplikasi versi 64-bit Anda harus menawarkan kualitas dan set fitur yang sama dengan versi 32-bit. Uji aplikasi Anda untuk memastikan bahwa pengguna perangkat 64-bit terbaru mendapatkan pengalaman terbaik pada aplikasi Anda.

Untuk mulai menguji aplikasi, Anda harus memiliki perangkat yang mendukung 64-bit. Ada berbagai perangkat populer yang tersedia dan mendukung 64-bit, seperti Google Pixel serta perangkat unggulan lainnya.

Cara termudah untuk menguji APK Anda adalah dengan menginstal aplikasi menggunakan adb. Pada kebanyakan kasus, Anda dapat menyediakan --abi sebagai parameter untuk menunjukkan library yang akan diinstal ke perangkat. Tindakan ini akan menginstal aplikasi dengan hanya library 64-bit di perangkat.

:: Command Line
# A successful install:
> adb install --abi armeabi-v7a YOUR_APK_FILE.apk
Success

# If your APK does not have the 64-bit libraries:
> adb install --abi arm64-v8a YOUR_APK_FILE.apk
adb: failed to install YOUR_APK_FILE.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

# If your device does not support 64-bit, an emulator, for example:
> adb install --abi arm64-v8a YOUR_APK_FILE.apk
ABI arm64-v8a not supported on this device

Setelah Anda berhasil menginstal, uji aplikasi seperti biasanya untuk memastikan kualitasnya sama dengan versi 32-bit.

Publikasi

Setelah merasa aplikasi Anda siap, publikasikan seperti biasa. Terus ikuti praktik terbaik untuk men-deploy aplikasi Anda. Sebaiknya manfaatkan jalur pengujian tertutup untuk meluncurkan ke sejumlah kecil pengguna guna memastikan konsistensi kualitas aplikasi Anda.

Seperti saat meluncurkan update besar, pastikan Anda telah menjalankan pengujian secara menyeluruh pada perangkat yang mendukung 64-bit sebelum memublikasikan ke pengguna yang lebih luas.

Apakah laptop 64 bit bisa menjalankan aplikasi 32 bit?

Kompatibilitas Software Windows 32 bit tidak akan bisa menjalankan pada software 64 bit. Sedangkan Windows 64 bit lebih leluasa karena dapat menjalankan software 32 maupun 64 bit.

Apakah Windows 64 bit lebih berat dari 32 bit?

Teknologi prosesor Windows berbasis 64 bit lebih cocok digunakan untuk mengoperasikan kegiatan yang lebih berat, seperti desain, mengedit video, hingga bermain game. Sedangkan, prosesor Windows 32 bit ditujukkan untuk melakukan aktivitas yang ringan dan hanya dapat mengoperasikan aplikasi yang tidak terlalu berat.

Apakah bisa merubah 32 bit ke 64 bit?

Bagaimana cara memutakhirkan dari 32-bit ke Windows versi 64-bit? Memutakhirkan dari versi 32-bit ke Windows versi 64-bit mengharuskan Anda memformat ulang hard disk, menginstal Windows versi 64-bit, lalu menginstal ulang semua yang ada di perangkat Anda.

Apakah Windows 10 bisa 32 bit?

Selain itu, Microsoft pun masih menyediakan Windows 10 versi 32-bit lewat kanal non-OEM untuk mendukung berbagai jenis skenario pembaruan, demikian dikutip detikINET dari Techspot, Jumat (15/5/2020).