Jebakan Pengembangan Instan Google Play



Halo, Habr! Nama saya Kamo Spertsyan, saya terlibat dalam pengembangan Android di PROFI.RU. Saya baru-baru ini menulis aplikasi peluncuran instan untuk pelanggan kami. Jika Anda tidak terbiasa dengan teknologi ini, saya mengundang Anda untuk pertama kali mengunjungi Pengembang Android .

Lebih dari dua tahun telah berlalu sejak presentasi Aplikasi Instan (Google Play Instan) di Google I / O 2016. Ada banyak artikel di web tentang cara membuat aplikasi dengan peluncuran instan. Dilihat oleh mereka, tidak ada yang rumit tentang ini. Namun dalam kenyataannya ini tidak sepenuhnya benar. Saya akan mencoba menggambarkan kesulitan utama yang harus saya lalui dari membuat proyek kosong hingga menerbitkan Aplikasi Instan di Google Play. Saya harap artikel ini akan bermanfaat bagi pengembang yang belum datang.

Pilihan pendekatan


Sebagian besar sumber menggambarkan proses konversi seluruh aplikasi ke Aplikasi Instan. Namun, aplikasi kami tidak memenuhi batas 4 MB dengan cara apa pun dan memberikan fungsionalitas yang jauh lebih banyak daripada yang diperlukan untuk membiasakan diri dengan layanan sebelum instalasi. Sekarang dalam mode uji coba, Google telah meningkatkan ukuran aplikasi yang diizinkan dengan peluncuran instan menjadi 10 MB.

Saya punya pilihan dua pendekatan untuk membuat Aplikasi Instan. Yang pertama adalah mengambil aplikasi yang sudah selesai dan memotong fungsionalitas yang tidak perlu darinya. Yang kedua adalah membuat proyek kosong dan mentransfer fungsionalitas yang diperlukan ke dalamnya. Setelah mempertimbangkan pilihan pertama untuk menjadi cepat, kolega saya dan saya mengujinya pada hackathon lokal dan pada saat yang sama menjadi yakin akan keputusasaannya. Pertama, butuh banyak waktu (sekitar 40 jam kerja). Kedua, ukuran aplikasi ternyata sangat besar karena kelebihan kode dan sumber daya. Ketiga, perawatan ekstra kode rumit. Kami dengan panik mencoba menyesuaikan aplikasi yang dihasilkan menjadi 4 MB selama hackathon, dan pada akhirnya kami masih tidak punya waktu.

Transfer Fitur


Diajarkan oleh pengalaman pahit, saya membuat proyek kosong dan mulai menyalin ke dalamnya hanya modul aplikasi yang diperlukan. Kami mendukung arsitektur modular, jadi itu mudah dilakukan. Di sini saya mengalami masalah pertama - Anda tidak dapat menggunakan layanan di Aplikasi Instan. Dalam kasus saya, pembatasan ini tidak penting: kami menggunakan layanan untuk mengunggah foto, dan di Aplikasi Instan kami menolak fitur ini, memotivasi pengguna untuk mengunduh aplikasi utama. Tetapi poin ini layak dipertimbangkan jika aplikasi Anda juga menggunakan layanan.

Yang mengejutkan saya, aplikasi yang diperoleh dengan menyalin hanya potongan-potongan kode yang diperlukan masih tidak sesuai dengan 4 MB yang valid dan beratnya sekitar 5 MB. Dalam artikel ini, Google memberikan saran tentang kasus ini, tetapi mereka sedikit membantu saya. Satu-satunya hal yang dapat kami tolak adalah font khusus, tetapi bobotnya tidak mempengaruhi ukuran APK secara signifikan.

Kemudian saya ingat bahwa ProGuard dalam proyek kami dinonaktifkan pada rakitan debug. Inklusi sederhana

minifyEnabled true 

mengurangi ukuran aplikasi hingga hampir setengahnya. Oh miracle - batas 4 MB terpenuhi!

Migrasi data


Selanjutnya, masalah migrasi data harus diselesaikan. Seperti yang Anda ketahui, Aplikasi Instan didukung oleh sistem operasi Android dari versi 5.0. Pada saat yang sama, migrasi data otomatis hanya berfungsi sejak Android 8.0. Untuk melakukan ini, cukup menggunakan file preferensi bersama dengan nama yang sama di kedua aplikasi. Untuk versi 5.0 hingga 7.1, migrasi harus ditulis secara manual menggunakan Cookie API atau Storage API . Saya menggunakan Cookie dan tidak menemukan masalah khusus - namun, ini membutuhkan perubahan tidak hanya pada sisi Aplikasi Instan, tetapi juga pada aplikasi yang diinstal. Jadi pada akhirnya saya harus merilis versi baru aplikasi dan menggulungnya ke seluruh audiens untuk rilis Aplikasi Instan.

Debugging


Dengan debugging, semuanya ternyata tidak begitu sederhana.

Pertama, Google Play Instan tidak mendukung koneksi jaringan yang tidak aman, jadi lupakan http, hanya https. Bagi saya, ini berarti pengujian pada server produksi, karena semua bangku tes bekerja di http. Tidak kritis, tetapi tidak cukup menyenangkan.

Kedua, peluncuran Aplikasi Instan itu sendiri: Anda dapat menguji aplikasi seperti biasa, dapat diinstal, tetapi hanya untuk sementara waktu. Saat memulai melalui Android Studio, tidak mungkin untuk memeriksa pembaruan Aplikasi Instan ke aplikasi "penuh". Misalnya, untuk menguji seberapa benar data pengguna ditransfer. Untuk melakukan ini, jalankan aplikasi dengan peluncuran instan seperti App Instan. Ada dua cara untuk melakukan ini:

  1. meluncurkan aplikasi menggunakan utilitas khusus dari Android SDK;
  2. letakkan di konsol untuk pengujian internal dan jalankan melalui Play Market.

Metode pertama cukup mudah. Utilitas termasuk dalam Android SDK, tetapi tidak diinstal secara default. Untuk menginstal di Android Studio, Anda harus mengikuti langkah-langkah ini:

  1. pergi ke Preferensi -> Tampilan & Perilaku -> Pengaturan Sistem -> Android SDK ;
  2. pilih tab SDK Tools ;
  3. centang kotak di sebelah SDK Pengembangan Instan Google Play dan klik Terapkan .


Pada langkah terakhir, perhatikan direktori di mana utilitas akan diinstal. Selanjutnya di jalur ini, kami akan tertarik pada file ./extras/google/instantapps/ia . Dengannya, Anda dapat mensimulasikan peluncuran aplikasi secara instan dengan menjalankan perintah

 ia run <  APK-, bundle-  URL> 

Sampai saat saya menemukan utilitas ini, saya menggunakan metode kedua, dengan publikasi aplikasi yang konstan di Google Play Console. Tetapi karena aplikasi yang diterbitkan tidak langsung muncul di toko, tetapi setelah waktu yang tidak ditentukan (butuh setengah jam sampai sehari), cara pengujian ini tidak baik. Namun, ini tidak dimaksudkan untuk ini. Ngomong-ngomong, jika Anda menerbitkan Aplikasi Instan di Google Play Console dengan frekuensi tinggi, saya menyarankan Anda untuk mempertimbangkan kemungkinan menentukan kode versi aplikasi setelah peluncuran. Kalau tidak, akan sulit untuk memahami apakah versi yang terakhir diterbitkan atau yang sebelumnya diluncurkan.

Posting


Akhirnya, ketika aplikasi Anda diuji dan siap untuk dipublikasikan, jangan terburu-buru untuk bersantai! Pertama, kode versi ( versionCode ) Aplikasi Instan tidak boleh melebihi kode versi aplikasi yang diinstal. Saya sarankan Anda memberi ruang terlebih dahulu untuk kreativitas: ketika Anda merilis aplikasi utama, tentukan nilai kode yang jelas signifikan agar tidak mengikat tangan Anda. Menghapus Aplikasi Instan yang dirilis dari konsol untuk "melepaskan" kode versi untuk unit lain akan gagal. Secara formal, Anda memiliki kemampuan NM untuk meluncurkan Aplikasi Instan saat Anda memiliki aplikasi utama dengan versionCode = N dan aplikasi dengan peluncuran instan dengan versionCode = M di Google Play.

Juga, untuk rilis Aplikasi Instan, pastikan itu tidak akan tersedia untuk audiens yang lebih besar daripada aplikasi utama. Dengan kata lain, setiap pengguna Aplikasi Instan harus dapat menginstal aplikasi utama.

Audiens dipengaruhi terutama oleh izin aplikasi yang ditentukan dalam file Manifest ( izin ) - mereka harus sama untuk kedua aplikasi (dengan pengecualian izin yang tidak mempengaruhi audiens). Katakanlah, jika aplikasi utama Anda memerlukan izin untuk menentukan geolokasi, dan dalam Aplikasi Instan ini tidak diperlukan, Anda masih perlu menentukannya baik di sana maupun di sana.

Juga, beberapa perpustakaan pendukung dapat mempersempit lingkaran pengguna akhir. Jadi itu dalam kasus kami. Konsol melempar kesalahan "penargetan perbedaan apk" , meskipun izin kedua aplikasi sama. Dalam mencari solusi, saya menemukan masalah ini dengan Stack Overflow, di mana disarankan untuk menjalankan file APK aplikasi melalui utilitas aapt . Ini akan menampilkan informasi terperinci tentang file, termasuk semua dependensi. Setelah menghitung perbedaan dalam output untuk kedua file, saya melihat petunjuk: aplikasi yang diinstal memiliki baris uses-gl-es: '0x20000' , yang tidak ada di App Instan. Penjelajahan singkat dari jaringan membawa saya ke sebuah solusi: baris ini mengatakan bahwa aplikasi tersebut menggunakan perpustakaan OpenGL, yang, pada gilirannya, digunakan dalam peta. Memang, aplikasi utama kami menggunakan perpustakaan play-services-maps , tetapi Aplikasi Instan tidak. Menambahkan ketergantungan ini ke Aplikasi Instan memungkinkan saya untuk akhirnya merilis aplikasi.

Untuk meringkas


  1. Aplikasi Instan tidak dapat menggunakan layanan dan jaringan tidak aman (http). Ukuran file APK final tidak boleh melebihi 4 MB (mungkin pembatasan ini akan segera disederhanakan menjadi 10 MB).
  2. Untuk mengurangi ukuran file APK, Anda dapat menggunakan pengoptimal dan pemecah kode (misalnya, ProGuard).
  3. SharedPreferences ditransfer dari Aplikasi Instan ke aplikasi utama secara otomatis untuk Android 8.0+, untuk versi sebelumnya perlu menulis secara manual melalui Cookie API atau Storage API . Perlu mempertimbangkan kebutuhan untuk merilis aplikasi yang dipersiapkan untuk migrasi data sebelum merilis Aplikasi Instan.
  4. Untuk men-debug Aplikasi Instan, Anda dapat menggunakan utilitas khusus dari Google Play SDK Pengembangan Instan yang termasuk dalam Android SDK.
  5. Munculnya Aplikasi Instan yang diterbitkan di konsol pada perangkat akhir dapat terjadi dengan penundaan setengah jam hingga sehari. Anda harus berhati-hati dengan kemampuan untuk menentukan versi App Instan mana yang sekarang telah diluncurkan dari Play Market.
  6. Kode versi Aplikasi Instan tidak boleh melebihi kode versi aplikasi utama.
  7. Daftar perangkat yang menyediakan Aplikasi Instan tidak boleh melebihi daftar perangkat yang menyediakan aplikasi utama. Untuk melakukan ini, Anda harus menentukan izin yang sama dalam file Manifest, serta memperhatikan batasan yang mungkin karena perpustakaan tambahan.

Itu saja. Saya harap Anda menemukan informasi ini bermanfaat. Saya akan dengan senang hati menerima umpan balik!

Sumber yang berguna:


  1. Google Play Dokumentasi Instan tentang Pengembang Android
  2. Kiat untuk mengurangi ukuran file APK App Instan
  3. Google Play FAQ Instan
  4. Migrasi Cookie
  5. Migrasi Data Menggunakan API Penyimpanan

Source: https://habr.com/ru/post/id436780/


All Articles