بیشتر گوشیهای اندروید دارای چیپستهای ARM هستند. با این حال، بسیاری از دستگاههای ChromeOS از چیپستهای x86 استفاده میکنند. این تفاوت برای برنامههای نوشته شده با Kotlin یا Java مهم نیست. با این حال، برای برنامههای نوشته شده با Android NDK، از جمله برنامههایی که با موتورهای بازی ایجاد شدهاند، چیپست موجود در دستگاه میتواند یک نگرانی مهم باشد.
در حالت ایدهآل، تمام برنامههایی که کد NDK اندروید را دارند باید با هر چهار ABI اصلی اندروید (رابطهای دودویی برنامه) ارائه شوند: armeabi-v7a (arm32)، arm64-v8a (arm64)، x86 (x86_32) و x86_64.
این بهترین عملکرد و کمترین مصرف باتری را برای هر دستگاه فراهم میکند. برای مثال، یک فایل build.gradle مبتنی بر cmake ممکن است شامل موارد زیر باشد:
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}اندازه APK
هر ABI در یک APK یکپارچه، حجم خود را افزایش میدهد. این میتواند بر میزان استفاده کاربران از دیسک، حجم دانلود برنامه تأثیر بگذارد و ممکن است با محدودیتهای حجم Play Store مواجه شود. بهترین راه برای جلوگیری از این امر، استفاده از Android App Bundles است. App Bundles به شما امکان میدهد به راحتی هر چهار ABI را از داخل Android Studio بستهبندی کنید، اما حجم دانلود را برای کاربران خود افزایش نمیدهند. آنها همچنین استفاده از Dynamic Delivery را آسان میکنند و به کاربران اجازه میدهند محتوای بازی حجیم را فقط در صورت درخواست دانلود کنند. اگر App Bundles برای شما امکانپذیر نیست، میتوانید از multi-APK قدیمیتر برای رفتار مشابه استفاده کنید.
۳۲ در مقابل ۶۴ بیتی
همه برنامههای اندروید باید نسخه ساخت ۶۴ بیتی ارائه دهند. نسخه ساخت ۳۲ بیتی برای دستگاههای ARM و x86 اختیاری است. برای اطلاعات بیشتر به مستندات اندروید ۶۴ بیتی مراجعه کنید.
اگرچه ارائه فقط نسخههای ۶۴ بیتی تعداد اهداف ساخت مورد نیاز و سطح آزمایش شما را کاهش میدهد، اما انواع دستگاههایی را که میتوانند بازی شما را اجرا کنند نیز محدود میکند. به عنوان مثال، به دلیل محدودیتهای سختافزاری دیگر، بسیاری از کرومبوکهای قدیمیتر با وجود داشتن پردازندههای ۶۴ بیتی، فقط میتوانند برنامههای اندروید ۳۲ بیتی را اجرا کنند. برای اطمینان از اینکه برنامه شما میتواند روی این دستگاهها اجرا شود، پشتیبانی از هر دو نسخه ۳۲ و ۶۴ بیتی را در نظر بگیرید.
توجه: همه برنامههای جدید و بهروزرسانیشده باید نسخه ۶۴ بیتی داشته باشند. فروشگاه Play ارائه برنامههای ۳۲ بیتی را برای دستگاههایی که قادر به پشتیبانی از نسخه ۶۴ بیتی هستند، متوقف کرده است. بسیاری از کرومبوکها از نسخه ۶۴ بیتی پشتیبانی میکنند و توصیه میکنیم در اسرع وقت برنامه خود را بهروزرسانی کنید تا نسخه ۶۴ بیتی را شامل شود تا از تداوم عملکرد برنامه برای کاربران ChromeOS اطمینان حاصل شود.
ترجمه ARM
کرومبوکهای x86 سعی میکنند تا حد امکان کد ARM را ترجمه کنند. با این حال، ترجمه، عملکرد را کند کرده و مصرف باتری را افزایش میدهد. حتی بازیهای ساده نیز باید برای بهترین تجربه کاربری، ارائه بیلدهای x86 را در نظر بگیرند. اگر نمیتوانید بیلدهای x86 را ارائه دهید، توجه داشته باشید که برخی از کرومبوکهای x86 نمیتوانند کد arm64 را ترجمه کنند. در این صورت، باید ABIهای arm32 و arm64 را در بیلدهای خود لحاظ کنید.
اگرچه ترجمه arm32 در تمام کرومبوکهای سازگار با اندروید موجود است، اما همه کرومبوکها نمیتوانند کد arm64 را ترجمه کنند. این بدان معناست که اگر بازی شما فقط اهداف ساخت arm64 را داشته باشد، برای تعداد زیادی از دستگاههای ChromeOS در دسترس نخواهد بود. اگر قادر به ارسال فایلهای باینری x86 نیستید، ABI های arm32 و arm64 را در ساختهای خود لحاظ کنید.
| شامل ABI ها | پشتیبانی از سیستم عامل کروم |
|---|---|
بازوی64 | ضعیف |
بازوی ۳۲/بازوی ۶۴ | باشه (با ترجمه) |
arm32/arm64/x86_32/x86_64 | بهترین |