2011-08-16 21 views
120

Güncel projemde birden fazla .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 azaltmam gerekiyor. Şişman bir APK dosyası yerine, sadece armeabi dosyalarını kullanmak ve armeabi-v7a klasörünü kaldırmak istiyorum.Armeabi kodu üzerinden armeabi-v7a kodu neden kullanılmalı?

NDK belgelerine göre, armeabi-v7a kodu ekstra CPU komutları içerebilen armeabi kodu uzatılır. Tüm bunlar benim uzmanlığımın ötesine geçiyor, ama neden birinin hem armeabi-v7a hem de armeabi koduna sahip olmasını istiyorum. İkisine de sahip olmak için iyi bir sebep olmalı, değil mi?

Test cihazımda, bunların hepsi iyi çalışıyor gibi görünüyor. Bunlar ARM v7 CPU'larına sahip. Her şeyin şimdi çalıştığını varsaymak güvenli mi?

+1

Bu blog yazısına şimdi okumak isteyebilirsiniz. Tam ve güncel: https://androidbycode.wordpress.com/tag/armeabi-v7a/ –

cevap

139

Yerel kodunuzun ne olduğuna bağlı olarak değişir, ancak v7a, donanım kayan nokta işlemleri için desteğe sahiptir ve bu da büyük bir fark yaratır. Armeabi tüm cihazlarda iyi çalışır, ancak çok daha yavaş olacak ve yeni cihazların CPU özelliklerinden yararlanmayacak. Özel uygulamanız için bazı ölçütler alın, ancak armeabi-v7a ikili dosyalarını kaldırmak genellikle iyi bir fikir değildir. Boyutu küçültmeniz gerekiyorsa, daha eski (armeabi) ve daha yeni (armeabi-v7a) cihazlar için iki ayrı dosyaya sahip olmak isteyebilirsiniz.

+0

Açık cevabınız için teşekkür ederiz. Uygulamayı 2 APK dosyasında bölme konusunda kıyaslama yapmak iyi bir fikir olacaktır. İkincisi aslında çok iyi bir fikir! Çok teşekkürler! – PaulT

+1

Hem ABI hem de arasındaki farkı nereden bulabilirim? Gerçek farklılıkları anlamak için çok insterleyim ... – webshaker

+7

ARM kılavuzları? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344c/Cacciced.html –

55

EABI = Tümleşik 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ındaki birlikte çalışma için gerekli olan derleme ve bağlantıların çeşitli yönlerini de belirtir. Bu bağlamda, armeabi hakkında konuştuğumuzda, ARM mimarisi ve GNU/Linux işletim sistemi hakkında konuşuyoruz. Android, küçük endian ARM GNU/Linux ABI'yi takip ediyor. Armut uygulaması ARMv5 (ör., ARM9) ve ARMv6 (ör., ARM11) üzerinde çalışacaktır. Uygulamanızı, -mfpu = vfpv3 -mfloat-abi = softfp gibi uygun GCC seçeneklerini kullanarak oluşturuyorsanız, derleyiciye VFP donanımı için kayan nokta yönergeleri üretmesini ve yumuşak-kayan çağrı kurallarını etkinleştirmesini söylerseniz, Floating Point donanımını kullanabilirsiniz. armeabi, hard-float çağrı kurallarını desteklemez (bu, FP kayıtlarının bir işlev için argümanları içermek için kullanılmadığı anlamına gelir), fakat HW'deki FP işlemleri hala desteklenmektedir.

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

+0

https://developer.android.com/ndk/guides/abis.html adresine göre : 'Armeabi-v7a ABI, -mfloat-abi = softfp anahtarını kullanır. Yani ne demek istiyorsun ** destekleri -mfloat-abi = hard **? –