Hari baik untuk semua! Artikel ini adalah tentang cara membuat profil game Unity di Android dengan Android Studio. Saya akan berbicara tentang cara mengonfigurasi Android Studio dan mendapatkan jumlah data maksimum. Masalah analisis dan kesimpulan berdasarkan hasilnya berada di luar ruang lingkup artikel ini.
Persyaratan
Untuk sepenuhnya profil aplikasi, Anda memerlukan ponsel dengan Android 8 atau yang lebih baru (API 27). Dalam pengalaman, membuat profil dengan versi Android yang lebih lama lebih menantang daripada bagus. Untuk alasan ini, saya sarankan untuk mendapatkan garis penuh perangkat Nexus, karena mereka memiliki perangkat keras lama dan pembaruan Android terbaru.
Menyiapkan proyek Persatuan
Untuk mendapatkan hasilnya, Anda harus mengkonfigurasi proyek Unity dengan cara tertentu.
Pengaturan dalam Pengaturan Bangun

- Pertama-tama, Anda harus mengganti Sistem Bangun ke "Gradle" dan centang kotak di sebelah "Ekspor Proyek" . Dengan demikian, kita akan mendapatkan proyek Android Studio yang sudah jadi, yang akan terus kita profil. Membuat profil APK yang sudah selesai juga dimungkinkan, tetapi lebih terbatas dan membutuhkan persiapan lebih banyak.
- Dianjurkan untuk mematikan mode "Pembangunan Pembangunan" , karena waktu yang dihasilkan dalam profiler akan sedekat mungkin dengan yang asli.
Pengaturan dalam Pengaturan Player

- Instal Scripting Backend di IL2CPP . Jika Anda meninggalkan Mono, maka dengan profil asli kita akan melihat banyak fungsi Mono, tanpa informasi tentang bagaimana mereka berhubungan dengan kode C #.
- Opsi 'C ++ Compiler Configuration' untuk Android tidak berpengaruh (dalam Unity 2018.3). Anda bisa memasukkannya ke dalam 'Release', mungkin di versi mendatang dari Unchain Android toolchain pengaturan ini akan memengaruhi pengaturan compiler.
- Dianjurkan untuk membatasi 'Arsitektur Target' ke ARMv7 . Jadi Anda menghemat waktu kompilasi dan mengalami banyak arsitektur terkadang membuat Android Studio dalam keadaan pingsan.
- Anda juga perlu mengatur sejumlah pengaturan tambahan:
- Instal Lokasi - 'Lebih suka eksternal'
- Akses Internet - 'Membutuhkan'
- Izin Menulis - 'Eksternal (SDCard)'
Android Studio dan profiler lain menggunakan simpleperf untuk mengumpulkan statistik, dan itu akan memerlukan akses ke kartu memori untuk merekam file sementara.
Mempersiapkan Proyek Gradle
Setelah Anda menginstal semua pengaturan, buat proyek Unity. Anda harus mendapatkan folder dengan proyek Gradle.

Unity default untuk membangun proyek sehingga Anda berencana untuk membangun APK final dari itu. Karena itu, semua informasi debug telah dihapus darinya, tetapi untungnya itu dapat dikembalikan. Untuk melakukan ini, Anda perlu mengganti libil2cpp.so dan libunity.so dengan versi dengan informasi debug.
libil2cpp.so
Ini adalah file yang berisi semua kode C ++ yang dihasilkan IL2CPP dari kode C # Anda. Unity menghasilkan semua informasi yang diperlukan untuk profil, tetapi untuk mengoptimalkan ukuran APK, memotongnya selama proses pembangunan. Untuk mengembalikannya:
- Buka folder proyek Anda
- Temukan subfolder Temp di dalamnya dan buka subfolder Temp / StagingArea / simbol / armeabi-v7a
- Cari 'libil2cpp.so.debug' di dalamnya. Ini adalah versi 'libil2cpp.so' dengan informasi debug.
- Sekarang pergi ke proyek Gradle dan temukan folder '\ src \ main \ jniLibs \ armeabi-v7a' di dalamnya
- Ganti 'libil2cpp.so' dengan file 'libil2cpp.so.debug'
libunity.so
Ini adalah file yang berisi bagian Unity Player tingkat rendah. Karena kami sedang melakukan rilis Rilis, Unity meletakkan file di proyek Anda tanpa informasi debug. Anda perlu mengganti libunity.so dengan file karakter.
- Buka folder tempat Anda menginstal Unity
- Buka folder "\ Data \ PlaybackEngines \ AndroidPlayer \ Variations \ il2cpp \ Development \ Libs \ armeabi-v7a \"
- Ambil file libunity.so dari sana, dan ganti file dalam proyek Anda, yang ada di folder '\ src \ main \ jniLibs \ armeabi-v7a'
Pembuatan profil
Sekarang Anda dapat mulai membuat profil di Android Studio, cukup klik tombol start profiler.

Android Studio meluncurkan aplikasi dan sesi pembuatan profil dimulai

Secara default, Android Studio menampilkan grafik, tetapi tidak mengambil sampel data. Untuk memulai proses, Anda perlu mengklik jalur CPU sehingga profiler beralih ke tampilan CPU. Dalam hal ini, dropdown dan tombol 'Rekam' akan muncul di atas jendela.

Pilih Sampel 'Asli' (Dalam Android Studio 3.3 - C / C ++ Asli), dan klik tombol 'Rekam'.
Karena perekaman dilakukan pada disk perangkat, sebaiknya jangan merekam lebih dari 5-8 detik dari pengalaman, banyak perangkat juga akan gagal pada jumlah data yang lebih kecil (lihat daftar perangkat yang diuji di akhir artikel).
Untuk mendapatkan hasilnya, klik 'Stop' dan kemudian kotak merah untuk menghentikan sesi. Sulit untuk memahami ide penulis, tetapi jika Anda tidak menghentikan rekaman sepenuhnya, profiler tidak selalu mulai menganalisis data yang diterima dan segmen Anda dengan data akan pergi jauh.

Setelah itu, tetap hanya menunggu sedikit, setelah 30-50 detik profiler akan memberi Anda hasilnya. Jika semuanya diatur dengan benar, Anda akan mendapatkan tangkapan dengan semua nama fungsi

Fitur yang Diketahui
- Hasil paling stabil dapat diperoleh pada perangkat root
- Jangan gunakan Samsung, dan mereka memiliki banyak bel dan peluit pelindung yang mengganggu proses debug
- Di banyak tempat, tumpukan kolektif Anda akan masuk ke fungsi dari bentuk 'kernel.kptr + address'. Ini adalah panggilan di dalam Android Kernel yang dilindungi karena kebijakan keamanan. Pada perangkat yang di-rooting, perlindungan dapat dinonaktifkan:
- Jalankan `adb shell`
- Jalankan `su` untuk mendapatkan hak akses root
- Jalankan 'sysctl -w kernel.kptr_restrict = 0' - ini akan menghapus perlindungan dari kernel
- [!] Setelah debugging selesai, jalankan 'sysctl -w kernel.kptr_restrict = 1'. Beberapa perangkat tidak akan dapat mem-boot OS jika tidak setelah reboot. Dalam banyak kasus, ini diperlakukan hanya dengan mem-flash core yang bersih.
- Jika Android Studio sering crash, Anda dapat mencoba menambah tumpukan Java VM:
- 2Gb - untuk proyek berukuran sedang ('-Xmx2g')
- 4Gb - untuk proyek besar ('-Xmx4g')
- Pada perangkat yang tidak di-root, kadang-kadang beralih kernel ke 'mode permisif' meningkatkan situasi.
- Jalankan perintah 'adb shell setenforce 0'
Spesifik kesatuan
- Utas Unity utama disebut UnityMain, tetapi Anda dapat melihat banyak UnityMain saat membuat profil. Ini adalah utas pengguna yang Anda buat di dalam kode C #. Secara default, mereka mendapatkan nama yang sama. Utas utama Unity biasanya mudah dibedakan, karena akan menjadi yang paling banyak dimuat.
- Aliran grafik disebut UnityGfxWorkerW
- Utas sistem Unity Job disebut Worker Thread.
- Sayangnya, beberapa fungsi tunggu yang digunakan Unity (futex), Android Studio menunjukkan dan menganggap bukan sebagai waktu tunggu, tetapi sebagai aktivitas.
- Saat Anda melihat grafik panggilan dalam tampilan Top Down, Anda harus melewati banyak level dengan panggilan Java, sayangnya Anda tidak dapat memfilternya di Android Studio.

Perangkat yang Direkomendasikan
Kami menggunakan perangkat berikut untuk eksperimen:
- Samsung Galaxy S8
- Google Pixel 2XL
- Google pixel
- Sony Xperia XA1
- Huawei Honor 7
- Huawei Nexus 6P
- Moto G5P
- Asus Nexus 7 (2013)
Semua perangkat dipasang, untuk Huawei Nexus 6P kami telah mengumpulkan inti dan
AOSP . Alhasil, Google dan Sony ternyata menjadi yang paling bebas masalah dan mudah dikerjakan. Sony memiliki situs yang bagus untuk pengembang -
Perangkat Terbuka . Huawei tidak lagi memungkinkan Anda membuka kunci perangkat dengan cara yang mudah, Samsung menyebabkan kesulitan konstan dengan tingkat perlindungan tambahan. Moto G5P sering membuat crash proses pengumpulan data profiler (simpleperf).