Armeabi-v7a kodunu neden armeabi kodunun üzerinde kullanıyorsunuz?


141

Mevcut projemde birden çok .so dosyası kullanıyorum. Bunlar armeabi ve armeabi-v7a klasöründe bulunur. Ne yazık ki .so dosyalarından biri 6MB ve dosya boyutunu azaltmak gerekiyor. Şişman bir APK dosyasına sahip olmak yerine, sadece armeabi dosyalarını kullanmak ve armeabi-v7a klasörünü kaldırmak istiyorum.

NDK belgelerine göre, armeabi-v7a kodu, ekstra CPU talimatları içerebilen genişletilmiş armeabi kodudur. Tüm bunlar benim uzmanlığımın ötesine geçiyor, ancak neden hem armeabi-v7a hem de armeabi koduna sahip olmak istediğini soruyorum. Her ikisine de sahip olmak için iyi bir neden olmalı, değil mi?

Test aygıtlarımda her şey yolunda görünüyor. Bunlar ARM v7 işlemcilere sahiptir. Şimdi her şeyin işe yaradığını varsaymak güvenli midir?


2
Bu blog yazısını şimdi okumak isteyebilirsiniz. Kapsamlı ve güncel: androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
Ve şimdi doktor diyor ki:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Amir Rezazadeh

1
Daha sonra gelecek olanlar için buraya bir bakın .
Amir Rezazadeh

Yanıtlar:


163

Yerel kodunuzun ne yaptığına bağlıdır, ancak v7a donanım kayan nokta işlemleri için desteğe sahiptir, bu da büyük bir fark yaratır. armeabi tüm cihazlarda iyi çalışır, ancak çok daha yavaş olacaktır ve yeni cihazların CPU özelliklerinden faydalanmayacaktır. Özel uygulamanız için bazı kriterler alın, ancak armeabi-v7a ikili dosyalarını kaldırmak genellikle iyi bir fikir değildir. Boyutu azaltmanız gerekiyorsa, eski (armeabi) ve daha yeni (armeabi-v7a) cihazlar için iki ayrı apkiniz olmasını isteyebilirsiniz.


1
Her iki ABI arasındaki farkı nerede bulabilirim? Gerçek farklılıkları anlamak için çok beceriksizim ...
webshaker


1
Bu iki farklı APK'yı yüklemenize izin vermek için Google Play'i almak için herhangi bir fikir var mı? Manifest'te farklı olduklarını ayırt etmenin bir yolu yok, bu yüzden Google Play sadece birini diğeriyle değiştirmek istiyor (farklı sürüm kodları var)
Dean Wild

11
@DeanWild Google artık Play Store çoklu APK özelliğinde farklı CPU mimarilerini hedeflemek için destek ekledi: developer.android.com/guide/google/play/publishing/…
Charles Harley

1
@IgorGanapolsky, bunu belirttiğin için teşekkürler. Bu şimdi doğru bağlantı: developer.android.com/google/play/publishing/…
Charles Harley

60

EABI = Gömülü Uygulama İkili Arabirimi. Belirli bir yürütme ortamında yürütmek için bir yürütülebilir dosyanın uyması gereken özelliklerdir. Ayrıca ARM Mimarisi için kullanılan takım zincirleri arasında birlikte çalışma için gerekli olan derleme ve bağlantının çeşitli yönlerini de belirtir. Bu bağlamda armeabi hakkında konuşurken ARM mimarisi ve GNU / Linux işletim sistemi hakkında konuşuyoruz. Android, küçük endian ARM GNU / Linux ABI'yi takip ediyor.

armeabi uygulaması ARMv5 (örn. ARM9) ve ARMv6 (ör. ARM11) üzerinde çalışacaktır. Uygulamanızı -mfpu = vfpv3 -mfloat-abi = softfp gibi uygun GCC seçeneklerini kullanarak derleyiciye VFP donanımı için kayan nokta talimatları oluşturmasını söyleyen ve yumuşak kayan arama kurallarını etkinleştiren Kayan Nokta donanımını kullanabilirsiniz. armeabi sabit arama çağrı kurallarını desteklemez (FP kayıtlarının bir işlev için argümanlar içermek için kullanılmadığı anlamına gelir), ancak HW'deki FP işlemleri hala desteklenmektedir.

armeabi-v7a uygulaması Cortex A8, A9 ve A15 gibi Cortex A # cihazlarında çalışır. Çok çekirdekli işlemcileri destekler ve -mfloat-abi = hard'ı destekler . Dolayısıyla, uygulamanızı -mfloat-abi = hard komutunu kullanarak oluşturursanız, işlev çağrılarınızın çoğu daha hızlı olur.


1
Göre developer.android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch. Peki -mfloat-abi = hard destekleri ile ne demek istiyorsun ?
IgorGanapolsky

8

Şişman bir APK dosyasına sahip olmak yerine, sadece armeabi dosyalarını kullanmak ve armeabi-v7a klasörünü kaldırmak istiyorum.

Bunun tersi çok daha iyi bir stratejidir. minSdkVersion14 sürümüne sahip olmanız ve apk'nizi oyun mağazasına yüklemeniz gerekiyorsa, destekleseniz de desteklemeseniz de aynı sayıda cihazı destekleyeceğinizi fark edeceksiniz armeabi. Bu nedenle, Android 4 veya daha yeni bir sürüme sahip hiçbir cihaz yoktur armeabi.

Muhtemelen Android armeabiNDK'nin revizyon r17b'ye göre artık desteklememesinin nedeni budur. [ kaynak ]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.