Android-sovellukset kohteille “ armeabi-v7a ” ja “ x86 ” arkkitehtuuri: SoC vs. prosessori vs. ABI

Kun olen ladannut Android-sovelluksia, olen joskus nähnyt sovelluksia kohteelle armeabi-v7a ja x86 arkkitehtuuri.

Luin joitain viittauksia armeabi-v7a ja x86 arkkitehtuuri. Lopulta en kuitenkaan voinut viimeistellä, mitkä mobiiliprosessorit ja -arkkitehtuurit kuuluvat armeabi-v7a ja mitkä x86.

Tietojeni mukaan Android-laitteissa yleisesti käytettyjä mobiiliprosessoreita ovat Snapdragon (Qualcomm), MediaTek, Exynos (Samsung) ja Kirin (Huawei). Lähes kaikki tuotemerkit selittävät älypuhelimen tekniset tiedot ja melkein kaikki tekniset tiedot sanovat mobiiliprosessori on 64-bittinen vai ei. Pitäisikö minun päätellä, että 64-bittiset mobiiliprosessorit (Snapdragon, MediaTek, Exynos tai Kirin) kuuluvat ARM-arkkitehtuuriin?

MUOKKAA:
Ymmärrä, mikä SoC tukee armeabi-v7a Android apk: tä ja mikä SoC tukee x86 Android apk, olen käynyt läpi MediaTek Helio X30 – ja Snapdragon 855 -määritykset. Helio X30: n spesifikaatioiden mukaan se tukee kahta -core ARM Cortex-A73 ja neliytiminen ARM Cortex-A53, mutta ARM i Sitä ei mainita missään Snapdragon 855: n erittelyssä. Pitäisikö minun siis päätellä, että Helio X30 tukee armeabi-v7a Android-sovelluksia ja Snapdragon 855 ei tue armeabi-v7a sovellukset?

Selvitä sekaanni.

Vastaa

Tässä ovat puutteelliset yhteenvetoni aihe, mutta riittää vastaamaan kysymykseesi.

OHJEET:

Suorittimet on valmistettu puolijohdemalleista, yleensä elektronilaadukkaasta yksikiteisestä piistä. He eivät osaa englantia tai muuta ihmiskieliä, he ymmärtävät vain 0 ja 1. Joten prosessorin suunnittelija kertoo meille mitä Nollan ”s” ja ”yhden” sekvenssin voimme opettaa kyseiselle prosessorille. Tämä käskyjen numeerinen kieli on standardoitu nimellä Machine Language ja koneohjeiden joukkoa kutsutaan nimellä Instruction Set. Suoritin voi toimia vain tietyn tyyppisen käskysarjan mukaan.
Käskysarjat voivat olla 8/16/32/64-bittisiä (määrittää, kuinka monta käskyä prosessori voi käsitellä kerrallaan) ), viimeiset 2 ovat yleisiä näinä päivinä.

Matalan tason kielet:

Mutta ohjelmakoodin (ohjeiden) kirjoittaminen suoraan konekielellä (suoritettava tiedosto) on melkein mahdotonta, koska kohtuullisen suuremman ohjelman kirjoittaminen ja virheenkorjaus (jonka voimme kirjoittaa muutamassa tunnissa näinä päivinä) vie vuosia. ohjelmoijien tyydyttämiseksi, Assembly Languag Se kehitettiin edelleen prosessorikohtainen kieli, mutta suhteellisen helppo ymmärtää. Assembly-kielellä kirjoitettu koodi muunnetaan konekoodiksi Assembler – konekielellä kirjoitetun ohjelman avulla. Näitä molempia kutsutaan matalan tason kieliksi.

KORKEAT KIELET:

Inhimillisten ponnistelujen vähentämiseksi edelleen kommunikoinnissa laitteistojen kanssa kehitettiin korkean tason kieliä, jotka eivät ole sidottuja tiettyyn käskyjoukkoon (joka tarkoittaa tiettyä arkkitehtuuria). Nämä ovat identtisiä ihmiskielien kanssa, joten niitä on helppo kirjoittaa, ymmärtää, korjata ja soveltaa useisiin arkkitehtuureihin. Compiler – matalalla kielellä kirjoitettu ohjelma muuntaa korkean tason kielellä kirjoitetun koodin matalan tason kieleksi. Yksi yleisimmin käytetyistä korkean tason kielistä on C. Mutta joskus koodia ei käännetä ennalta konekoodiksi, vaan se suoritetaan suoraan (tai käännetään suorituksen aikana) Interpreter -toiminnolla. Java on yksi sellaisista ”kirjoita kerran, suorita missä tahansa” (WORA) kielistä, joka käännetään byte-code -kieleksi ja tulkitaan sitten Virtual Machine – jälleen käännetty ohjelma.

SOVELLUKSEN BINAARINEN LIITÄNTÄ (ABI):

Koska arkkitehtuurista riippumaton ohjelma (koodi) voidaan muuntaa minkä tahansa prosessorin arkkitehtuurista riippuvaiseksi koodiksi, kääntäjän velvollisuus on huolehtia tietyn arkkitehtuurin kaikista vaatimuksista. Application Binary Interface (ABI) määrittelee. Yksinkertaisesti sanottuna ABI edustaa yhtä tai useampaa tiettyä arkkitehtuuria. Lisätietoja upotetuista ABI: stä edellyttää käsitystä kokoamisen ja kääntämisen vaiheista; objektikoodi, suoritettava ja linkitettävä muoto (ELF), staattinen (arkistointi) ja kirjastojen dynaaminen linkitys jne.

Tulee nyt kysymykseesi:

MITÄ ON x86 JA ARM?

x86 on opetusjoukkoperhe, jonka ovat pääasiassa kehittäneet ja valmistaneet Intel ja AMD. ARM on toinen perhe, jonka on suunnitellut yksi yksikkö ARM Holdings ja joka on lisensoitu useille sulautettujen ratkaisujen valmistajille, kuten Qualcomm, Mediatek, Samsung ja Huawei. Snapdragon, Exynos ja Kirin ovat heidän tuotenimensä. Ne eivät ole prosessorivalmistajia, mutta heillä on lisenssit sisällyttää ARM-prosessorit omilla System on Chip (SoC) -piireillä.

MIKÄ ON SoC?

Järjestelmä sirulla (SoC) on pieni piiri, joka sisältää prosessorit muiden komponenttien kuten GPU: n, RAM: n, Flash / eMMC: n (vastaa kiintolevyä tai SSD: tä) kanssa , WiFi ja bluetooth-moduuli, USB-liitäntä, UART (sarjaportit), JTAG (hyvin alemman tason sarjaliikenneprotokolla), GPS, modeemit (matkapuhelinyhteyttä varten) ja mahdollisesti muut.

ARM ABI:

Vaikka suurin osa Android-sovelluksista on kirjoitettu Java-kielellä, voidaan ohjelmoida äidinkielillä, kuten C ja C ++, joka on käännettävä. Android tarjoaa oman Native Development Kit -sarjan ( NDK ), joka sisältää (kirjastot, otsikkotiedostot ja) kääntäjän, joka voi koota koodin useille ABI-tiedostoille, mukaan lukien ”>

(armhfLinux-yhteisössä) jax86.

Itse Android (Java) -sovellus ei ole arkkitehtuurille ominainen. Sovelluksen rakentamisen aikana Android SDK muuntaa Java-lähteen tavukoodiksi (.class -tiedostoiksi) ja kokoaa sen sitten D alvik EX ecutable (.dex) tiedosto, joka on pakattu .apk -tiedostoihin. Tämä Dalvikin tavukoodi tulkitaan ja suoritetaan erillisessä Dalvik Virtual Machine / ART jokaiselle sovellukselle prosessilla nimeltä Zygote. Tai se voidaan kääntää pysyvästi alkuperäiseen konekoodiin (.odex tai ) laitteen arkkitehtuurin mukaan sovelluksen asennuksen aikana (tai myöhemmin ). Mutta jos apk (zip) -tiedosto sisältää lisäksi ELF-binäärejä / kirjastoja, ne ovat arkkitehtuurikohtaisia. Kehittäjät sisällyttävät yleensä sovelluksiinsa natiivikirjastot useille arkkitehtuureille.

Natiivisovellukset / ohjelmat / binäärit / suoritettava / kirjastot, jotka on rakennettu kääntäjäpaketeilla, jotka on kohdennettu ARM Embedded ABI v7a ( armeabi-v7a ) voidaan käyttää Application profile of 7th version of ARM processors ( Armv7-A ).
Koodin, joka on koottu muiden toimittajien tarjoamilla -työkaluketjuilla ja kohdistettu samaan arkkitehtuuriin (vaikka eri ABI-nimillä), pitäisi toimia myös Android-laitteilla.

32-bittinen VS. 64-bittinen:

ARM-prosessori voi olla 32- tai 64-bittinen. SoC-valmistajista riippuu, mitä he haluavat rakentaa upotetulla järjestelmällä, esim. Snapdragon voi olla 32- tai 64-bittinen. 32-bittisiä ARM-prosessoreita parannettiin suorituskyvyn parantamiseksi ja uusia ominaisuuksia lisättiin versiosta 2 versioon 7. 64-bittinen tuki otettiin käyttöön ARMv8: ssa.

Voit selvittää, onko laite 32-bittinen vai 64-bittinen. sinun on tarkistettava sen SoC: n ja sitten prosessorin tekniset tiedot. Esimerkiksi Redmi Note 4: n SoC on Qualcomm Snapdragon 625 (MSM 8953) , joka sisältää prosessori Cortex-A53. Cortex-53: n teknisistä eritelmistä käy ilmi, että se perustuu ARMv8 -arkkitehtuuriin, joka voi käsitellä Kahden tyyppiset ohjeet: aarch64 (joita Android ”s arm64-v8a ABI käyttää) ja aarch32 (jota Android ”s armeabi-v7a ABI käyttää eli taaksepäin yhteensopivaa ARMv7 kanssa ).

Joten se voi ajaa binäärejä / kirjastoja, jotka on koottu molemmille ABI: lle, mutta ei x86 tai armeabi (nimeltään armel Linux-yhteisössä; joka kohdisti arkkitehtuurin ARMv5/v6 ja oli poistettu ryhmästä NDK r17).


LIITTYVÄT: Voisiko 64-bittinen laitteisto käyttää 32-bittistä Android-versiota?

kommentit

Vastaa

x86: ta käyttävien laitteiden määrä ei koskaan ollut kovin suuri. Joitakin vuosia sitten Intelillä oli joitain x86-prosessoreita (Intel Atom), joita käytettiin joissakin Android-tableteissa (esim.Samsung Galaxy Tab 10.3).

Nämä tabletit eivät kuitenkaan koskaan saavuttaneet suurta määrää markkinoilla. Enkä ole varma, onko markkinoilla x86-älypuhelinta tai -tablettia, joka edelleen käyttää x86-prosessoria.

On kuitenkin yksi hyvin yleinen käyttötapa, jossa kohtaat ”x86-Android-laitteen”: Android Emulaattori.

Koska emulaattoria käyttävä tietokone käyttää tyypillisesti x86-suorittimen emulaattoreita, jotka suorittavat x86-kuvaa (ARMv7- tai ARMv8 / ARM64-pohjaisen kuvan sijasta), voivat käyttää integroituja suorittimen virtualisointitekniikoita, jotka paljon nopeammin.

Kommentit

  • Kiitos, että selitit yksityiskohtaisesti. Haluaisin ottaa esimerkin. Jos olen oikeassa, olkoon se prosessori tai SoC, termi x86 liittyy samanaikaisesti Intelin ja AMD: n kanssa. Haluan ottaa esimerkin.
  • Olen käynyt läpi linkin apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -julkaisu Firefox android apk: n lataamiseen. Olen nähnyt siellä kaksi vaihtoehtoa; Firefox android apk for armeabi-v7a architecture and Firefox android apk for x86 architecture. Hämmennysni alkoi sieltä.
  • Tunnettujen Android-laitteiden SoC ovat Snapdragon, MediaTek, Exynos, Kirin jne. Siksi uskon, että minun on ladattava Android-apk ARM: lle. Olenko oikeassa?
  • @ user741975 Tällä hetkellä, jos valitset armeabi-v7a, se toimii suuremmalla mahdollisuudella kuin 99%. Jos sinulla on nykyinen keskiluokan tai huippuluokan laite, myös arm64-v8a voi olla vaihtoehto. Joka tapauksessa voit vain ladata sen ja yrittää asentaa sen. Jos arkkitehtuuri on väärä, asennus epäonnistuu.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *