Paano palitan ang android system file. Paano ipasok ang folder ng system sa android, android system files

Isa sa mga sikat na operating system ngayon ay ang Android. Naka-install ito sa milyun-milyong mobile device. Ang system ay isang set ng mga folder at file na nagsisiguro sa operasyon nito. Ngunit naisip mo na ba kung ano ang nilalaman ng bawat folder? Ang ilan ay medyo mabigat, kaya ang kamay ay natutukso na tanggalin ang mga ito. Bago mo gawin ito, dapat mong tiyak na pamilyar sa kung ano ang responsable para sa bawat folder, pati na rin kung gaano kahalaga ito para sa operating system. Sasabihin din namin sa iyo kung anong mga paraan upang tanggalin ang isang hindi kinakailangang folder.

Mga pangunahing pangunahing direktoryo sa android operating system

Ang unang priyoridad bago magtanggal ay upang malaman kung ano ang nilalaman ng direktoryo, dahil tinutukoy nito kung maaari mo itong tanggalin o hindi. Kung nabura mo ang mahahalagang file nang hindi sinasadya, hindi mo lamang maaabala ang pagpapatakbo ng ilang mga application, ngunit maging sanhi din ng ganap na hindi gumagana ang buong operating system.

Ito ay nagkakahalaga na tandaan na ang listahan ng mga folder ay maaaring mag-iba depende sa device at bersyon ng android system. Gayundin, ang mga partikular na application ay maaaring gumawa ng sarili nilang mga folder sa memorya ng Android phone. Tingnan natin kung anong mga direktoryo ang available sa Android.

Ang cache ay isang folder para sa pag-iimbak ng mga pansamantalang file. Maaaring naglalaman ito ng pag-update ng system. Kung hindi ka mag-a-update sa isang mas kamakailang bersyon ng Android, hindi mo kailangan ang update file. Maaari mong tanggalin ang folder na ito, at sa ilang mga kaso ito ay kinakailangan.

Ang data ay isa sa pinakamalaking katalogo, na, gaya ng maaari mong hulaan mula sa pangalan, ay naglalaman ng iba't ibang data. Kabilang dito ang data ng account, impormasyon tungkol sa mga naka-save na password, Wi-Fi access point, atbp. Dahil ang folder na ito ay naglalaman ng maraming impormasyon, tingnan natin ang mga subdirectory nito:

  1. App – isang direktoryo na naglalaman ng mga file sa pag-install para sa iba't ibang mga application. Maaari mong tanggalin ito kung hindi mo kailangan ang lahat ng mga application na na-download sa iyong telepono;
  2. Data – kasama ang mga setting, pag-save at iba pang impormasyon ng serbisyo na kinakailangan para sa pagpapatakbo ng mga partikular na application. Kung walang data na mahalaga sa iyo sa mga application, maaari mo ring tanggalin ito;
  3. Ang Clipboard ay isang espesyal na clipboard ng data na naglalaman din ng mga pinakabagong screenshot. Posibleng tanggalin ang folder na ito, ngunit hindi ito inirerekomenda;
  4. Ang Dalvik-cache ay isang lugar ng cache para sa isang programa na tinatawag na Davlink. Ang application na ito ay isang Java virtual machine na nagpapahintulot sa telepono na magpatakbo ng mga application apk file. Upang pabilisin ang prosesong ito hangga't maaari, ang mga file ay nilikha sa memorya ng cache. Inirerekomenda na linisin nang regular ang mga nilalaman, ngunit hindi mo dapat tanggalin ang dalvik-cache.

Ang efs folder ay naglalaman ng impormasyon tungkol sa serial number (IMEI), MAC address, Bluetooth at Wi-Fi ng telepono. Hindi matatanggal ang direktoryo na ito. Bukod dito, inirerekomenda na gumawa ng isang backup ng folder na ito, dahil ang pagtanggal nito ay hahantong sa pagkawala ng natatanging numero ng iyong smartphone.

Ang etc na direktoryo ay naglalaman ng mga file ng pagsasaayos, pangunahing ginagamit sa panahon ng paglo-load ng OS, mga proseso ng iba't ibang mga programa, halimbawa, upang matukoy ang lokasyon ng GPS. Isa ito sa mga direktoryo ng system na hindi matatanggal.

lib directory - naglalaman ito ng iba't ibang mga aklatan na kinakailangan para sa tamang operasyon ng mga function at module ng program. Ang folder na ito ay naglalaman din ng mga file na tinitiyak na gumagana ang mga driver. Hindi ito matatanggal.

Ang mnt na direktoryo ay naglalaman ng mga larawan ng mga naka-mount na system. Maaaring matatagpuan dito ang mga partisyon ng naka-install na memory card, internal memory o iba pang virtual na device. Naturally, hindi mo rin matatanggal ang direktoryo na ito.

Ang proc folder - naglalaman ito ng lahat ng pangunahing impormasyon tungkol sa naka-install na Android OS: impormasyon tungkol sa kernel, mga parameter ng pagsasaayos at hardware. Ang lahat ng umiiral na mga file at folder ay virtual at timbangin ang zero byte. Awtomatikong ginagawa ng system ang mga ito kapag na-access ng user ang mga ito. Hindi matatanggal ang folder na ito gamit ang mga normal na karapatan ng user.

Ang direktoryo ng sbin ay isa sa mga pangunahing folder na kinakailangan para gumana ang telepono. Naglalaman ito ng mga executable na file ng lahat ng mga program na idinisenyo upang pamahalaan ang system. Alinsunod dito, hindi ito matatanggal.

Ang direktoryo ng sys ay naglalaman ng kasalukuyang configuration ng system. Ito ay isang dynamic na direktoryo. Ang impormasyon sa loob nito ay patuloy na nagbabago. Hindi mabubura ang folder na ito.

Ang seksyon ng system ay ang "backbone" ng buong operating system, dahil dito matatagpuan ang lahat ng mga file, kung wala ang android ay hindi maaaring gumana. Ang direktoryo ng System (tulad ng iba pang mga panloob na direktoryo) ay hindi matatanggal. Upang maging pamilyar, tingnan natin ang mga nilalaman ng direktoryong ito:

  1. App – wallpaper ng system, karaniwang mga application (kalendaryo, notebook, SMS) ay matatagpuan sa folder na ito.
  2. Kasama sa bin ang mga executable na file at link;
  3. Naglalaman ang Build.prop ng malaking bilang ng mga setting para sa telepono, halimbawa, kung gaano katagal naantala ang sensor pagkatapos ng pagpindot, ano ang density ng screen, at higit pa;
  4. Mga Font – impormasyon tungkol sa lahat ng mga stock na font na sinusuportahan sa telepono.
  5. Framework - lahat ng kailangan para sa interface, sa partikular na mga icon, kurtina at iba pang mga graphic na elemento;
  6. Lib – library ng application;
  7. Media – lahat ng karaniwang melodies at tunog (alarm clock, SMS notification, call tone);
  8. Kasama sa mga Tts ang mga language pack.

Mga Dokumento – isang folder na maaaring maglaman ng iba't ibang mga dokumento, lalo na ang mga .doc at .pdf na file. Kung hindi ka interesado sa mga nilalaman ng folder, maaari mo itong tanggalin.

Bluetooth – naglalaman ng lahat ng mga file na natanggap ng device sa pamamagitan ng Bluetooth. Kung walang mahalagang data dito, tatanggalin ito nang walang mga problema. Maaari itong matatagpuan hindi lamang sa panloob na memorya, kundi pati na rin sa isang SD card.

Ang DCIM ay isang espesyal na direktoryo para sa pag-save ng mga larawang kinunan gamit ang camera ng iyong smartphone. Bilang panuntunan, may kasama itong seksyon ng Camera, kung saan matatagpuan ang lahat ng larawan. Kung ang larawang kailangan mo ay wala sa iyong telepono, maaari mo itong tanggalin. Ang mga seksyon tulad ng Mga Larawan, Imahe, Audio, Musika (kung walang mahahalagang file sa loob) ay maaari ding tanggalin.

Mga paraan ng pag-alis

Paano ko matatanggal ang isang partikular na folder? Ang unang paraan ay ang paggamit ng mga karaniwang function. Upang gawin ito kailangan mo:

Naisip mo na ba kung paano gumagana ang fastboot o ADB? O bakit halos imposibleng gawing brick ang isang smartphone na nagpapatakbo ng Android? O baka matagal mo nang gustong malaman kung nasaan ang magic ng Xposed framework at bakit kailangan ang boot scripts /system/etc/init.d? Paano ang recovery console? Bahagi ba ito ng Android o isang bagay sa sarili nito at bakit hindi angkop ang regular na pagbawi para sa pag-install ng firmware ng third-party? Makakakita ka ng mga sagot sa lahat ng ito at marami pang ibang tanong sa artikulong ito.

Paano gumagana ang Android

Maaari mong malaman ang tungkol sa mga nakatagong kakayahan ng mga software system sa pamamagitan ng pag-unawa sa prinsipyo ng kanilang operasyon. Sa ilang mga kaso, mahirap itong gawin, dahil maaaring sarado ang system code, ngunit sa kaso ng Android, maaari nating pag-aralan ang buong system sa loob at labas. Sa artikulong ito, hindi ko pag-uusapan ang lahat ng mga nuances ng Android at tututuon lamang sa kung paano nagsisimula ang OS at kung anong mga kaganapan ang nagaganap sa pagitan ng pagpindot sa power button at ang hitsura ng desktop.

Kasabay nito, ipapaliwanag ko kung ano ang maaari nating baguhin sa hanay ng mga kaganapang ito at kung paano ginagamit ng mga custom na firmware developer ang mga kakayahang ito upang ipatupad ang mga bagay tulad ng pag-tune ng mga parameter ng OS, pagpapalawak ng espasyo sa storage ng application, pagpapalit ng pagkonekta, iba't ibang mga pagpapasadya at marami pa. Ang lahat ng impormasyong ito ay maaaring gamitin upang lumikha ng iyong sariling firmware at ipatupad ang iba't ibang mga hack at pagbabago.

Unang hakbang. ABOOT at partition table

Nagsisimula ang lahat sa pangunahing bootloader. Pagkatapos i-on ang power, ipapatupad ng system ang bootloader code na nakaimbak sa permanenteng memory ng device. Pagkatapos ay ililipat nito ang kontrol sa aboot bootloader na may built-in na suporta para sa fastboot protocol, ngunit ang tagagawa ng mobile chip o smartphone/tablet ay may karapatang pumili ng anumang iba pang bootloader na gusto niya. Halimbawa, ang Rockchip ay gumagamit ng sarili nitong bootloader na hindi compatible sa fastboot at nangangailangan ng mga proprietary tool upang mag-flash at pamahalaan.

Ang fastboot protocol, sa turn, ay isang sistema para sa pamamahala ng bootloader mula sa isang PC, na nagpapahintulot sa iyo na magsagawa ng mga aksyon tulad ng pag-unlock ng bootloader, pag-flash ng bagong kernel at pagbawi, pag-install ng firmware at marami pang iba. Ang raison d'être ng fastboot ay upang maibalik ang isang smartphone sa orihinal nitong estado sa isang sitwasyon kung saan nabigo ang lahat ng iba pang paraan. Ang Fastboot ay mananatili sa lugar kahit na, bilang resulta ng mga eksperimento, burahin mo ang lahat ng NAND memory partition na naglalaman ng Android at pagbawi mula sa iyong smartphone.

Ang pagkakaroon ng natanggap na kontrol, sinusuri ng aboot ang talahanayan ng partisyon at inililipat ang kontrol sa kernel na na-flash sa partition na pinangalanang boot, pagkatapos kung saan kinukuha ng kernel ang imahe ng RAM mula sa parehong partisyon patungo sa memorya at sinimulang i-load ang alinman sa Android o ang recovery console. Ang memorya ng NAND sa mga Android device ay nahahati sa anim na kondisyong kinakailangan na mga seksyon:

  • boot - naglalaman ng kernel at RAM disk, karaniwang nasa 16 MB ang laki;
  • pagbawi - recovery console, ay binubuo ng isang kernel, isang hanay ng mga console application at isang file ng mga setting, laki na 16 MB;
  • system - naglalaman ng Android, sa mga modernong device ang laki ay hindi bababa sa 1 GB;
  • cache - dinisenyo para sa pag-iimbak ng naka-cache na data, ginagamit din upang i-save ang firmware sa panahon ng pag-update ng OTA at samakatuwid ay may sukat na katulad ng laki ng partition ng system;
  • userdata - naglalaman ng mga setting, application at data ng user, lahat ng natitirang memory space ng NAND ay inilalaan dito;
  • misc - naglalaman ng flag na tumutukoy kung anong mode ang dapat mag-boot ng system: Android o pagbawi.

Bilang karagdagan sa mga ito, maaaring mayroon ding iba pang mga seksyon, ngunit ang pangkalahatang markup ay tinutukoy sa yugto ng disenyo ng smartphone at, sa kaso ng aboot, ay natahi sa bootloader code. Nangangahulugan ito na: 1) hindi maaaring patayin ang talahanayan ng partisyon, dahil maaari itong palaging maibalik gamit ang command na format ng fastboot oem; 2) para baguhin ang partition table, kailangan mong i-unlock at i-reflash ang bootloader gamit ang mga bagong parameter. Gayunpaman, mayroong mga pagbubukod sa panuntunang ito. Halimbawa, ang bootloader ng parehong Rockchip ay nag-iimbak ng impormasyon tungkol sa mga partisyon sa unang bloke ng memorya ng NAND, kaya ang pag-flash ng bootloader ay hindi kinakailangan upang baguhin ito.

Lalo na kawili-wili ang misc section. Mayroong isang palagay na ito ay orihinal na nilikha upang mag-imbak ng iba't ibang mga setting nang nakapag-iisa sa pangunahing system, ngunit sa sandaling ito ay ginagamit para sa isang layunin lamang: upang ipahiwatig sa bootloader kung saan dapat i-load ang partition - boot o pagbawi. Ang tampok na ito, sa partikular, ay ginagamit ng application ng ROM Manager upang awtomatikong i-reboot ang system sa pagbawi gamit ang awtomatikong pag-install ng firmware. Sa batayan nito, ang Ubuntu Touch dual boot mechanism ay binuo, na nagpapa-flash sa Ubuntu bootloader sa recovery at nagbibigay-daan sa iyong kontrolin kung aling system ang magbo-boot sa susunod. Binura ang misc partition - Naglo-load ang Android, napuno ito ng data - nag-load ng pag-recover... iyon ay, Ubuntu Touch.

Ikalawang hakbang. Seksyon ng boot

Kung ang misc section ay walang recovery boot flag, inililipat ng aboot ang kontrol sa code na matatagpuan sa boot section. Ito ay walang iba kundi ang Linux kernel; ito ay matatagpuan sa simula ng seksyon, at agad na sinundan ng isang RAM disk image na naka-pack gamit ang cpio at gzip archiver, na naglalaman ng mga direktoryo na kinakailangan para sa Android upang gumana, ang init initialization system at iba pang mga tool. Walang file system sa boot partition na sumusunod lang sa isa't isa. Ang mga nilalaman ng RAM disk ay:

  • data - direktoryo para sa pag-mount ng partisyon ng parehong pangalan;
  • dev - mga file ng device;
  • proc - procfs ay naka-mount dito;
  • res - isang hanay ng mga larawan para sa charger (tingnan sa ibaba);
  • sbin - isang hanay ng mga utility utility at daemon (adbd, halimbawa);
  • sys - sysfs ay naka-mount dito;
  • system - direktoryo para sa pag-mount ng partition ng system;
  • charger - application para sa pagpapakita ng proseso ng pagsingil;
  • build.prop - mga setting ng system;
  • init - sistema ng pagsisimula;
  • init.rc - pagsisimula ng mga setting ng system;
  • ueventd.rc - mga setting ng uventd daemon na kasama sa init.

Ito ay, wika nga, ang balangkas ng system: isang hanay ng mga direktoryo para sa pagkonekta ng mga file system mula sa mga partisyon ng memorya ng NAND at isang sistema ng pagsisimula na hahawak sa natitirang gawain ng pag-boot ng system. Ang pangunahing elemento dito ay ang init application at ang init.rc config nito, na tatalakayin ko nang detalyado sa ibang pagkakataon. Pansamantala, nais kong ituon ang iyong pansin sa mga file ng charger at ueventd.rc, pati na rin ang mga direktoryo ng sbin, proc at sys.

Ang charger file ay isang maliit na application na ang tanging trabaho ay ipakita ang icon ng baterya sa screen. Wala itong kinalaman sa Android at ginagamit kapag naka-off ang device sa charger. Sa kasong ito, hindi naglo-load ang Android, at nilo-load lang ng system ang kernel, ikinokonekta ang RAM disk at sinimulan ang charger. Ang huli ay nagpapakita ng icon ng baterya, ang imahe kung saan sa lahat ng posibleng estado ay naka-imbak sa mga ordinaryong PNG file sa loob ng res directory.

Ang ueventd.rc file ay isang config na tumutukoy kung aling mga device file sa sys directory ang dapat gawin sa panahon ng system boot. Sa mga system na nakabatay sa kernel ng Linux, ang pag-access sa hardware ay isinasagawa sa pamamagitan ng mga espesyal na file sa loob ng direktoryo ng dev, at ang ueventd daemon, na bahagi ng init, ay responsable para sa kanilang paglikha sa Android. Sa isang normal na sitwasyon, ito ay gumagana sa awtomatikong mode, tumatanggap ng mga utos upang lumikha ng mga file mula sa kernel, ngunit ang ilang mga file ay kailangang malikha nang nakapag-iisa. Nakalista ang mga ito sa ueventd.rc.

Ang direktoryo ng sbin sa stock Android ay karaniwang walang nilalaman maliban sa adbd, iyon ay, ang ADB daemon, na responsable para sa pag-debug ng system mula sa PC. Gumagana ito sa isang maagang yugto ng OS boot at nagbibigay-daan sa iyong tukuyin ang mga posibleng problema sa yugto ng pagsisimula ng OS. Sa mga custom na firmware, makakahanap ka ng grupo ng iba pang mga file sa direktoryong ito, halimbawa mke2fs, na maaaring kailanganin kung kailangang i-reformat ang mga partisyon sa ext3/4. Gayundin, madalas na inilalagay ng mga modder ang BusyBox doon, kung saan maaari kang tumawag ng daan-daang mga utos ng Linux.

Ang direktoryo ng proc ay pamantayan para sa Linux sa mga susunod na yugto ng boot, ang init ay kumonekta dito procfs, isang virtual na file system na nagbibigay ng access sa impormasyon tungkol sa lahat ng mga proseso sa system. Ikokonekta ng system ang mga sysfs sa direktoryo ng sys, na nagbubukas ng access sa impormasyon tungkol sa hardware at mga setting nito. Gamit ang sysfs, maaari mong, halimbawa, ilagay sa pagtulog ang device o baguhin ang power saving algorithm na ginamit.

Ang build.prop file ay idinisenyo upang mag-imbak ng mababang antas ng mga setting ng Android. Sa ibang pagkakataon, ire-reset ng system ang mga setting na ito at io-overwrite ang mga ito ng mga value mula sa kasalukuyang hindi naa-access na system/build.prop file.


Takeaways mula sa text

  • Mananatili ang Fastboot sa lugar kahit na, bilang resulta ng mga eksperimento, burahin mo ang mga nilalaman ng lahat ng seksyon ng memory ng NAND mula sa iyong smartphone
  • Ang seksyon ng pagbawi ay ganap na nakapag-iisa at naglalaman ng isang maliit na operating system na hindi nauugnay sa Android
  • Sa pamamagitan ng bahagyang pagbabago sa fstab file, maaari nating pilitin ang init na i-boot ang system mula sa memory card

Pangalawang hakbang, alternatibo. Seksyon ng pagbawi

Kung itinakda ang flag ng recovery boot sa misc section o i-on ng user ang smartphone habang pinipigilan ang volume down key, ililipat ng aboot ang kontrol sa code na matatagpuan sa simula ng seksyon ng pagbawi. Tulad ng boot partition, naglalaman ito ng kernel at isang RAM disk, na na-unpack sa memorya at nagiging ugat ng file system. Gayunpaman, ang mga nilalaman ng RAM disk ay medyo naiiba dito.

Hindi tulad ng boot partition, na gumaganap bilang isang transition link sa pagitan ng iba't ibang yugto ng paglo-load ng OS, ang recovery partition ay ganap na self-sufficient at naglalaman ng miniature operating system na hindi konektado sa Android. Ang pagbawi ay may sariling core, sarili nitong hanay ng mga application (mga utos) at sarili nitong interface na nagpapahintulot sa user na i-activate ang mga function ng serbisyo.

Sa isang karaniwang (stock) na pagbawi, karaniwang may tatlong ganoong mga pag-andar: pag-install ng firmware na nilagdaan gamit ang susi ng tagagawa ng smartphone, punasan at i-reboot. Ang mga binagong pagbawi ng third-party, tulad ng ClockworkMod at TWRP, ay may higit pang mga function. Maaari silang mag-format ng mga file system, mag-install ng firmware na nilagdaan gamit ang anumang mga key (basahin: custom), i-mount ang mga file system sa iba pang mga partisyon (para sa mga layunin ng pag-debug ng OS) at isama ang suporta sa script, na nagbibigay-daan sa iyong i-automate ang proseso ng firmware at marami pang ibang function.

Gamit ang mga script, halimbawa, maaari mong tiyakin na pagkatapos mag-boot, awtomatikong mahahanap ng pagbawi ang kinakailangang firmware sa memory card, mai-install ang mga ito at mag-reboot sa Android. Ang tampok na ito ay ginagamit ng ROM Manager, mga tool sa auto-flasher, pati na rin ang mekanismo ng awtomatikong pag-update para sa CyanogenMod at iba pang firmware.

Sinusuportahan din ng custom recovery ang mga backup na script na matatagpuan sa /system/addon.d/ directory. Bago mag-flash, sinusuri ng recovery ang mga script at ipapatupad ang mga ito bago i-flash ang firmware. Salamat sa gayong mga script, hindi nawawala ang mga gapps pagkatapos mag-install ng bagong bersyon ng firmware.

mga utos ng fastboot

Upang ma-access ang fastboot, kailangan mong i-install ang Android SDK, ikonekta ang iyong smartphone sa iyong PC gamit ang isang cable at i-on ito sa pamamagitan ng pagpindot sa parehong volume button. Pagkatapos nito, dapat kang pumunta sa platform-tools subdirectory sa loob ng SDK at patakbuhin ang command

Mga fastboot na device

Ang pangalan ng device ay ipapakita sa screen. Iba pang magagamit na mga utos:

  • fatsboot oem unlock- pag-unlock ng bootloader sa mga koneksyon;
  • i-update ang file.zip- pag-install ng firmware;
  • flash boot boot.img- pag-flash ng boot partition image;
  • flash recovery recovery.img- pag-flash ng recovery partition image;
  • flash system system.img- pag-flash ng imahe ng system;
  • format ng oem- pagpapanumbalik ng isang nawasak na talahanayan ng partisyon;

Ikatlong hakbang. Pagsisimula

Kaya, sa pagkakaroon ng natanggap na kontrol, ang kernel ay nagkokonekta sa RAM disk at, pagkatapos na simulan ang lahat ng mga subsystem at driver nito, sinimulan ang proseso ng init, na nagsisimula sa pagsisimula ng Android. Gaya ng nasabi ko na, ang init ay may configuration file na init.rc, kung saan natututo ang proseso kung ano ang eksaktong dapat nitong gawin upang maiangat ang system. Sa modernong mga smartphone, ang config na ito ay may kahanga-hangang haba na ilang daang linya at nilagyan din ng trailer ng ilang child config na konektado sa pangunahing gamit gamit ang import directive. Gayunpaman, ang format nito ay medyo simple at mahalagang hanay ng mga utos na nahahati sa mga bloke.

Ang bawat bloke ay tumutukoy sa yugto ng paglo-load o, sa Android developer parlance, isang aksyon. Ang mga bloke ay pinaghihiwalay sa isa't isa sa pamamagitan ng isang on directive na sinusundan ng pangalan ng aksyon, gaya ng sa early-init o sa post-fs. Ang block ng mga command ay isasagawa lamang kung ang trigger ng parehong pangalan ay gagana. Habang nagbo-boot ito, i-a-activate ng init ang early-init, init, early-fs, fs, post-fs, early-boot at boot trigger, kaya ilulunsad ang kaukulang command blocks.


Kung ang file ng pagsasaayos ay kumukuha ng ilang higit pang mga config na nakalista sa simula (at ito ay halos palaging ang kaso), kung gayon ang mga bloke ng command na may parehong pangalan sa loob ng mga ito ay isasama sa pangunahing config, upang kapag ang trigger ay nagpaputok, ang init ay magsagawa ng mga utos mula sa kaukulang mga bloke ng lahat ng mga file. Ginagawa ito para sa kaginhawaan ng paglikha ng mga configuration file para sa ilang device, kapag ang pangunahing config ay naglalaman ng mga command na karaniwan sa lahat ng device, at ang mga partikular sa bawat device ay nakasulat sa magkahiwalay na mga file.

Ang pinaka-kapansin-pansin sa mga karagdagang config ay pinangalanang initrc.device_name.rc, kung saan ang pangalan ng device ay awtomatikong tinutukoy batay sa mga nilalaman ng ro.hardware system variable. Ito ay isang configuration file na partikular sa platform na naglalaman ng mga command block na tukoy sa device. Bilang karagdagan sa mga utos na responsable para sa pag-tune ng kernel, naglalaman din ito ng isang bagay na tulad nito:

Mount_all ./fstab.device_name

Nangangahulugan ito na dapat na ngayong i-mount ng init ang lahat ng file system na nakalista sa file ./fstab.device_name, na may sumusunod na istraktura:

Device_name (partition) mount_point file_system fs_options iba pang mga opsyon

Karaniwan itong naglalaman ng mga tagubilin para sa pag-mount ng mga file system mula sa mga panloob na partisyon ng NAND hanggang sa /system (OS), /data (mga setting ng application) at /cache (naka-cache na data) na mga direktoryo. Gayunpaman, sa pamamagitan ng bahagyang pagbabago sa file na ito, maaari nating pilitin ang init na i-boot ang system mula sa memory card. Upang gawin ito, hatiin lamang ang memory card sa tatlong 4 na seksyon: 1 GB / ext4, 2 GB / ext4, 1 GB / ext4 at ang natitirang espasyo ng fat32. Susunod, kailangan mong tukuyin ang mga pangalan ng mga partisyon ng memory card sa direktoryo ng /dev (naiiba sila para sa iba't ibang device) at palitan ang mga ito ng orihinal na pangalan ng device sa fstab file.


Sa dulo ng boot init block, malamang na makakatagpo ito ng class_start default na utos, na magpapaalam sa iyo na dapat mong simulan ang lahat ng mga serbisyong nakalista sa config na nauugnay sa default na klase. Ang paglalarawan ng mga serbisyo ay nagsisimula sa direktiba ng serbisyo, na sinusundan ng pangalan ng serbisyo at ang utos na dapat isagawa upang simulan ito. Hindi tulad ng mga utos na nakalista sa mga bloke, ang mga serbisyo ay dapat na tumatakbo sa lahat ng oras, kaya sa buong buhay ng smartphone, ang init ay mag-hang sa background at susubaybayan ito.

Kasama sa modernong Android ang dose-dosenang mga serbisyo, ngunit dalawa sa kanila ang may espesyal na katayuan at tinutukoy ang buong ikot ng buhay ng system.

init.rc Mga Utos

Ang proseso ng init ay may built-in na set ng mga command, marami sa mga ito ay sumusunod sa standard Linux command set. Ang pinaka-kapansin-pansin sa kanila:

  • exec /path/to/command- magpatakbo ng isang panlabas na utos;
  • ifup interface- itaas ang interface ng network;
  • class_start class_name- simulan ang mga serbisyong kabilang sa tinukoy na klase;
  • class_stop class_name- itigil ang mga serbisyo;
  • insmod /path/to/module- i-load ang kernel module;
  • mount FS device directory- ikonekta ang file system;
  • halaga ng pangalan ng setprop- magtakda ng isang variable ng system;
  • simulan ang service_name- simulan ang tinukoy na serbisyo;
  • pangalan ng trigger- paganahin ang trigger (isagawa ang tinukoy na bloke ng mga utos);
  • isulat ang /path/to/file line- magsulat ng isang linya sa isang file.

Ikaapat na hakbang. Zygote at app_process

Sa isang tiyak na yugto ng paglo-load, ang init ay makakatagpo sa dulo ng config ng isang bagay tulad ng block na ito:

Serbisyo zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class default socket zygote stream 660 root system onrestart write /sys/android_power/request_state wake onrestart write /sys/power/state on onrestart restart media onrestart restart netd

Ito ay isang paglalarawan ng serbisyo ng Zygote, isang mahalagang bahagi ng anumang Android system na responsable para sa pagsisimula, pagsisimula ng mga serbisyo ng system, pagsisimula at paghinto ng mga application ng user, at marami pang ibang gawain. Ang Zygote ay inilunsad gamit ang isang maliit na application /system/bin/app_process, na napakalinaw na nakikita sa itaas na bahagi ng config. Ang app_proccess na gawain ay ilunsad ang Dalvik virtual machine, ang code nito ay matatagpuan sa /system/lib/libandroid_runtime.so shared library, at pagkatapos ay patakbuhin ang Zygote sa ibabaw nito.

Kapag tapos na ang lahat ng ito at kontrolado na ni Zygote, sisimulan na nitong buuin ang runtime ng Java application sa pamamagitan ng paglo-load ng lahat ng klase ng Java ng framework (kasalukuyang mahigit 2000 sa kanila). Pagkatapos nito ay magsisimula ang system_server, na kinabibilangan ng karamihan sa mataas na antas (nakasulat sa Java) na mga serbisyo ng system, kabilang ang Window Manager, Status Bar, Package Manager at, higit sa lahat, Activity Manager, na sa hinaharap ay magiging responsable para sa pagtanggap ng simula at pagtatapos. mga aplikasyon ng signal.

Pagkatapos nito, bubuksan ni Zygote ang socket /dev/socket/zygote at matutulog, naghihintay ng data. Sa ngayon, ang dating inilunsad na Activity Manager ay nagpapadala ng isang broadcast intent Intent.CATEGORY_HOME upang mahanap ang application na responsable sa paggawa ng desktop at ibigay ang pangalan nito sa Zygote sa pamamagitan ng socket. Ang huli, sa turn, ay tinidor at pinapatakbo ang application sa ibabaw ng virtual machine. Voila, mayroon kaming desktop sa aming screen, nakita ng Activity Manager at inilunsad ni Zygote, at isang status bar na inilunsad ng system_server bilang bahagi ng serbisyo ng Status Bar. Pagkatapos ng pag-tap sa icon, magpapadala ang desktop ng layunin na may pangalan ng application na ito, matatanggap ito ng Activity Manager at magpapadala ng command upang simulan ang application sa Zygote daemon

IMPORMASYON

Sa terminolohiya ng Linux, ang isang RAM disk ay isang uri ng virtual hard disk na umiiral lamang sa RAM. Sa unang bahagi ng proseso ng boot, kinukuha ng kernel ang mga nilalaman ng disk mula sa imahe at ini-mount ito bilang root file system (rootfs).

Sa panahon ng proseso ng pag-boot, ang Android ay nagpapakita ng tatlong magkakaibang mga boot screen: ang una ay lilitaw kaagad pagkatapos pindutin ang power button at na-flash sa Linux kernel, ang pangalawa ay ipinapakita sa mga unang yugto ng pagsisimula at naitala sa file /initlogo.rle (halos hindi ginagamit ngayon), ang huli ay inilunsad gamit ang bootanimation application at nakapaloob sa file /system/media/bootanimation.zip.

Bilang karagdagan sa mga karaniwang pag-trigger, pinapayagan ka ng init na tukuyin ang iyong sariling mga pag-trigger, na maaaring ma-trigger ng iba't ibang mga kaganapan: pagkonekta ng isang device sa USB, pagbabago ng estado ng isang smartphone, o pagbabago ng estado ng mga variable ng system.

Sa iba pang mga bagay, pinapatay din ng Activity Manager ang mga application sa background kapag walang sapat na memorya. Ang mga halaga ng libreng memory threshold ay nakapaloob sa file /sys/module/lowmemorykiller/parameters/minfree.

Ang lahat ng ito ay maaaring mukhang medyo nakalilito, ngunit ang pinakamahalagang bagay ay tandaan ang tatlong simpleng bagay:

Sa maraming paraan, ibang-iba ang Android sa iba pang mga operating system, at mahirap malaman ito nang mabilis. Gayunpaman, kung naiintindihan mo kung paano gumagana ang lahat, ang mga posibilidad ay walang katapusang. Hindi tulad ng iOS at Windows Phone, ang operating system ng Google ay may napaka-flexible na arkitektura na nagbibigay-daan sa iyong seryosong baguhin ang gawi nito nang hindi kinakailangang sumulat ng code. Sa karamihan ng mga kaso, sapat na upang itama ang mga kinakailangang config at script.

Ako na naman at ang mga tagubilin ko para sa mga teapot at coffee pot na may mga larawan.

Sa pagkakataong ito ay magsasalita ako nang detalyado tungkol sa pagpapalit ng mga bahagi ng system ng Android OS gamit ang halimbawa ng pag-install ng pagbabago sa status bar.

Ang Android ay isang maliit na Linux. Kinakailangan na sundin ang isang bilang ng mga patakaran kapag pinapalitan ang mga file upang ang telepono ay hindi maging isang ladrilyo, na maaari lamang mabuhay muli sa pamamagitan ng isang kumpletong pag-flash na may pagkawala ng lahat ng data mula sa panloob na memorya ng device. Ang mga panloob na partisyon ay naka-format sa isang file system na naiiba sa FAT32 sa mga flash drive. Sa iba pang mga bagay, ang mga katangian ng file ay nag-iimbak ng mga pahintulot para sa iba't ibang pangkat ng user (may-ari ng file, pangkat ng may-ari ng file, iba pang mga user). Kapag nagpapatakbo gamit ang mga file ng system, dapat silang i-save, dahil kapag naglo-load, maaaring hindi ma-access ng system ang mga ito at maaaring hindi mag-boot nang normal.
Magsimula tayo sa mga tool.

Kakailanganin namin ang:

  • Isang file manager na maaaring gumana sa mga karapatan sa ugat at mga pahintulot ng file. Pinakamahusay ang Root Explorer (Binili mo ito, tama ba?)
  • Ang binagong file mismo, na gusto naming ilagay sa lugar ng system isa (link sa dulo ng artikulo).

Ngayon ginagamit namin ang isa sa mga maginhawang function ng Root Explorer. Gumawa tayo ng mahabang pag-tap sa nais na file upang ilabas ang menu ng konteksto

At mag-click sa item " I-zip ang file na ito"upang i-save ang file sa isang zip archive sa SD card. Pagkatapos ma-archive, matatanggap namin ang sumusunod na mensahe:

Pindutin ang pindutan " Manatili" na manatili sa folder at gumawa ng isa pang bagay.

Ngayon ang lahat ay handa na upang palitan ang file.
Napag-usapan ko na ang tungkol sa mga karapatan sa pag-access ng bawat file. Upang muling likhain ang mga ito sa isang bagong file, dapat mo munang tingnan ang mga ito mula sa luma. Ang mga ito ay kinakatawan ng isang serye ng mga simbolo na "rwxrwxrwx". 1st triad - mga karapatan ng may-ari, 2nd - mga grupo ng may-ari, 3rd - lahat ng iba pang user. Ang aming file ay may mga pahintulot na "rw-r--r--".

Ngayon pumunta sa SD card, hanapin ang binagong file doon at mula sa menu ng konteksto nito piliin ang item " Kopyahin", ngunit huwag magmadali upang piliin ang folder na "/system/app" kaagad, dahil agad naming masisira ang system. Sa halip, kopyahin ang file sa isang espesyal na folder para sa mga pansamantalang file "/data/local/tmp" upang dalhin ang file sa isang form na kukuha ng system.
Una, tawagan ang menu ng konteksto ng file at piliin ang " Palitan ang pangalan" at ilagay ang pangalan ng file na "SystemUI.apk". Tama iyon, dahil sa Linux ang kaso ng mga titik sa pangalan ay mahalaga, ibig sabihin, "systemui.apk" at "SystemUI.apk" ay magkaibang mga file.
Susunod, kailangan mong baguhin ang mga pahintulot ng file, dahil ngayon ay halos tiyak na hindi tama ang pagkakatakda nila. Upang gawin ito, tawagan muli ang menu ng konteksto ng file na may mahabang tap at piliin ang item na " Mga Pahintulot". Para sa aming value na "rw-r--r--" ang mga checkbox ay dapat ilagay tulad nito:

I-click ang " OK" at tawagan muli ang menu ng konteksto. Ngayon ay kailangan mong baguhin ang may-ari at grupo para sa application na ito. Upang gawin ito, piliin ang item " Baguhin ang may-ari". Lilitaw ang isang window na may impormasyon tungkol sa kasalukuyang may-ari ng file.
Dito kailangan nating gumawa ng isang maliit na digression.
Sa folder na "/system/app", lahat ng file ay pagmamay-ari ng user na "root" (uid=0) at ng grupong "root" (gid=0), at sa folder na "/system/framework" ang user " system" (gid=1000) ay pag-aari. at pangkat na "system" (gid=1000).
Batay sa itaas, itakda ang mga kinakailangang halaga at i-click ang " OK".
At sa pangatlong beses, tawagan ang menu ng konteksto para sa file at piliin ang item " Kopyahin" at sa dialog ng kopya pumunta sa folder na "/system/app". Ngayon huwag mag-atubiling i-click ang " Idikit"at basahin nang mabuti.
Halos kaagad, ipapaalam sa iyo ng system na ang proseso ng status bar ay biglang natapos at nag-aalok na simulan ito. Ang lahat ng mga pagtatangka ay hindi magtatagumpay. Sa pagitan ng hitsura ng mga bintana, kailangan mong magkaroon ng oras upang gawin ang isang bilang ng mga aksyon. Bago pindutin ang pindutan, dapat mong tawagan ang menu upang i-off ang device lalabas ito sa ilalim ng babala. Ngayon ay kailangan mong ilagay ang iyong daliri nang humigit-kumulang sa kaliwang bahagi ng pindutan. Ngayon ay kailangan mong i-click ang iyong daliri nang tatlong beses nang napakabilis upang magkaroon ka ng oras upang isara ang babala, piliin ang opsyon sa pag-shutdown at kumpirmahin ang iyong mga intensyon.
Ngayon ay hinihintay namin na i-off ang telepono, i-restart ito at tamasahin ang resulta, o huwag mag-enjoy at maghanap ng mga error.

Maaaring i-demolish ang mga application ng system ng Google tulad ng Gmail, Google Maps, Google+, Gtalk, ngunit mas mainam na iwanan ang mga serbisyo, dahil ang kanilang kawalan ay hahantong sa mga malfunction ng Play Market, mga laro at iba pang mga programa, at madalas na mga error.

Bukod pa rito, hindi mo maaalis ang Mga Address at Navigation kung plano mong gamitin ang Google Maps, ngunit maaari mong alisin ang Street View dahil hindi ito kasama sa app na iyon.

Upang alisin ang mga application ng system, kailangan mo ng mga karapatan ng superuser, iyon ay, dapat munang ma-root ang device upang makagawa ka ng mga pagbabago sa mga folder at file ng system.

Ang mga katutubong programa ay matatagpuan sa folder ng /system/app at kinakatawan ng mga file na may mga extension na apk at odex. Kung na-deodex ang firmware, apk lang ang available. Upang makapunta sa folder kailangan mong gumamit ng isang third-party na file manager, halimbawa, Root Explorer.

Maaari mong alisin ang mga application nang manu-mano at sa pamamagitan ng mga karagdagang programa. Sa unang kaso kailangan mo:

  • sa pamamagitan ng Root Explorer pumunta sa /system/app;
  • mag-click sa pindutan ng "R/W Rights" sa kanang tuktok, muling i-mount ang recording folder;
  • lagyan ng tsek ang mga kahon para sa mga tinanggal na apk at odex application file na may parehong pangalan;
  • Piliin ang icon ng gunting sa ibaba;

  • pumunta sa folder sa flash drive;
  • pagkatapos ay "Ilipat dito".

Kinakailangang gumamit ng mga paggalaw, dahil maaaring ibalik ang mga file kung kinakailangan.

Upang gawing simple ang pamamaraan, maaari mong i-install ang Uninstaller pro.

Gamitin ito tulad nito:

  • pagkatapos ng unang paglunsad, kailangan mong bigyan siya ng mga karapatan ng superuser;
  • pindutin ang back button;
  • Hanapin ang kailangan mo sa listahan ng mga programa at mag-click dito;
  • pagkatapos ay "Tanggalin" at sumang-ayon.

Bilang karagdagan, dito maaari ka munang gumawa ng backup kung sakali.

Kung na-update ang karaniwang programa, dapat mo munang alisin ang pag-update sa karaniwang paraan:

  • pumunta sa "Mga Setting";
  • "Mga Application";
  • piliin ang isa na kailangan mo;
  • "I-uninstall ang update."

Pagkatapos burahin ang mga pangunahing file, ang natitirang mga file ay matatagpuan sa mga sumusunod na folder:

  • Ang /system/lib ay naglalaman ng .so mga aklatan na kailangan para sa pagpapatakbo ng mga kaugnay na aplikasyon, hindi tumutugma ang mga ito sa pangalan ng pangunahing file at hindi dapat hawakan sa anumang pagkakataon, dahil maaari nitong patayin ang device;
  • /data/dalvik-cache - kailangan nilang tanggalin, para dito mas mahusay na gumawa ng isang hard reset.

Dahil hindi ito magagawa gamit ang pampublikong API, nakahanap ako ng paraan para gawin ito sa napaka "hacky" na paraan na nangangailangan ng naka-embed na device.

Update: tulad ng nakasaad sa ibaba ng user864555, ito ay isa pang solusyon

"Hindi pinapagana ng code na ito ang SystemUI application, na talagang isang menu bar. Ano ang pagbabagong ito, makukuha mo rin ang espasyo ng panel ng system na ito, ngunit tiyaking patakbuhin ang pindutang "Bumalik" o isang bagay na lalabas."

Update: Narito ang ikatlong paraan. Ang paraan upang gawin ito ay programmatically o gamit ang command line. Natagpuan dito: http://android.serverbox.ch/?p=306

Nangangailangan ang paraang ito ng root access, ngunit hindi mo kailangang baguhin ang density ng LCD, na panatilihing pareho sa orihinal, at maaari mong mabilis na i-type ang UI navigation bar nang hindi nagre-reboot sa bawat oras.

Ipinapakita rin sa iyo ng blog kung paano ito ipatupad sa iyong Android app, tandaan na nangangailangan ito ng ugat at maaaring hindi ito isang mainam na ideya, maliban kung tumatakbo ang iyong app sa isang kiosk o sa sarili mong device, huwag gamitin ang paraang ito para sa app. na-publish sa Android market o kahit saan.

Upang ihinto/i-uninstall/i-disable ang system bar (dapat mong patakbuhin ang su command bago ibigay ang command na ito):

Upang ibalik ang system bar, patakbuhin lamang ang command na ito:

Ganun kasimple. Sana ay mai-release ang ICS sa lalong madaling panahon kasama ang source code para lahat ay makabuo ng Android para sa aming mga kiosk tablet.

Sa Android 2.3 at mas mababa, maaari mong gawing full screen ang app at pagkatapos ay "i-hijack" ang menu/back/search buttons sa pamamagitan lamang ng pagbabalik ng false onKeyDown()... at pagrerehistro ng app bilang karaniwang home run app, walang lalabas sa app.

Sa Android 3.0 (Honeycomb) ang mga navigation button (system bar) ay laging naroroon, gusto kong itago ito. pwede ba?

FYI, hindi ko pina-publish ang app na ito sa Android Market. Ito ay isang panloob na application para sa mga device na gagamitin sa loob, kailangan kong protektahan ang device.

Karamihan sa mga modernong smartphone at tablet ay may naka-install na Android operating system. Ang lahat ng mga file na matatagpuan sa isang smartphone o tablet ay maaaring direktang pamahalaan sa pamamagitan ng mismong mobile device, o maaari mo ring gawin ito gamit ang isang computer kung saan nakakonekta ang smartphone o tablet.

Ang isa sa mga programa para sa pamamahala ng mga Android file sa pamamagitan ng isang desktop computer ay ang Mobogenie. Gamit ang program na ito, hindi mo lamang mapapamahalaan ang mga file sa iyong mobile device, ngunit mag-download din ng mga bagong laro, musika, video at mga larawan dito sa pamamagitan ng Internet. Ang programa ay konektado sa isang serbisyo kung saan maaari mong i-download ang mga kinakailangang file.

Ang program mismo ay simple at nauunawaan; pagkatapos ng paglunsad, ito ay naghahanap ng isang mobile device at kung hindi ito mahanap, nag-aalok ito upang ikonekta ito at, para sa kaginhawahan, nag-aalok upang tingnan ang isang gabay sa kung paano kumonekta sa pamamagitan ng isang USB cable.

Ang window ng programa ay nahahati sa dalawang seksyon: sa unang bahagi, sa kaliwa ay ang Mobogenie menu, at sa kanan ay ang lahat ng mga uri ng mga application at musika na maaaring ma-download. Ang menu ng programa ay binubuo ng tatlong bahagi, sa itaas na bahagi mayroong mga kategorya ng mga file na maaaring ma-download, sa gitnang bahagi ay may mga setting, sa ikatlong bahagi mayroon ding mga kategorya ng mga file, ngunit hindi katulad sa itaas na bahagi, ang mga file na ito ay matatagpuan sa isang mobile device na nakakonekta sa computer.

Maaari kang mag-download ng iba't ibang mga file nang direkta sa device, o maaari mong i-download ang file sa iyong computer, at pagkatapos ay i-upload ito sa device sa pamamagitan ng folder ng programa.

Istraktura at layunin ng mga folder at file sa Android

Ang lahat ng na-download na file ay matatagpuan sa (mga) task menu, na matatagpuan sa pinakailalim. Doon, sa pamamagitan ng pag-click sa inskripsiyon sa tuktok ng bukas na window ng folder ng pag-download, maaari mong buksan ang folder kung saan ang lahat ng mga file ay na-download sa iyong computer. Upang makagawa ng backup na kopya o gumamit ng file manager upang pamahalaan ang mga file sa Android, dapat kang pumunta sa menu ng toolkit.

Sa pangkalahatan, pinapadali ng Mobogenie, isang programa para sa pamamahala ng mga Android file sa pamamagitan ng isang computer, na gumana sa mga mobile device.

Ginagawa nitong mas madali ang pag-download ng iba't ibang mga file, pamahalaan ang mga ito, baguhin ang mga contact, basahin ang mga mensahe ng SMS at MMS, atbp.

Pamamahagi: libre.
Operating system: Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10.
Interface: Ingles.
Website ng programa mobogenie.com

Android ADB- Ito plugin para sa Total Commander na nagbibigay-daan sa ganap na pag-access sa file system Android, at ilang iba pang mga function ng system.

Paano i-edit o palitan ang mga file at folder ng system?

Ang plugin ay napaka-maginhawa para sa mga user na hindi maaaring gumana nang wala itong maginhawang file manager. Pinapayagan ka ng plugin na ikonekta ang iyong device sa iyong computer at hindi nilayon para sa pag-synchronize. Maaari kang mag-install ng mga application sa pamamagitan ng pagkopya apk file sa root folder.apps.

Mga Katangian:

  • Pamamahala ng application (pag-install, pag-uninstall at backup)
  • Mga icon ng application at ang kanilang metadata sa mga column
  • Mga log, ulat ng error, kernel log, Shell
  • I-reboot mula sa menu (Shutdown, reboot, recovery)
  • Mga Screenshot (Simpleng pagkopya mula sa .screenshot na folder).
  • Ikonekta ang maraming device na may kakayahang palitan ang pangalan
  • Angkop para sa mga device na may at walang ugat
  • Buong suporta sa Unicode
  • Suportahan ang x32 at x64 system
  • TC command line integration
  • Isinasagawa ang pagkopya at paglipat ng mga utos sa background
  • Mga column ng data ng custom na file
  • Buong pamamahala ng file system
  • Kopyahin sa pagitan ng dalawang device
  • Pagbabago ng mga pahintulot ng file
  • ADB USB at wireless A.D.B.(hindi na kailangang mag-install ng Android SDK)
  • Suporta sa auto-mount ng device
  • Mga log ng pag-debug
  • Sari-saring Setting

Mga kinakailangan:

— Ang telepono ay dapat na "pinagana" USB Debugging«

— Dapat na naka-install ang mga driver ng telepono

WiFi ADB para sa wireless na koneksyon (Maaaring matagpuan sa Google Play), kung kinakailangan

Android SDK Walang kinakailangang plugin para sa operasyon!

Pag-install:

Kung susubukan mong buksan ang archive sa Total Commander, pagkatapos ay awtomatikong hihilingin sa iyo ng manager na i-install ang plugin.

Sa TS binuksan namin ang kapaligiran ng network, mukhang "\" sa tabi ng mga nakalistang drive. Piliin ang \ADB, pagkatapos ay ang iyong telepono MSM8225*, maaaring kailanganin mong i-reboot Total Commander.

Mga screenshot:

I-download ang ADBplugin_v7.3.zip 7247

Ang pag-edit ng mga application ng Android system ay kadalasang isinasagawa kapag ang gumagamit ng isang smartphone, tablet o iba pang device na kinokontrol ng operating system na ito ay hindi na nasisiyahan sa kasalukuyang hitsura ng mga program na naka-install sa device ng tagagawa o nagbebenta. Ang isa pang dahilan ay maaaring ang pangangailangan na gumawa hindi lamang ng mga pagbabago patungkol sa graphic na disenyo ng mga application ng Android, ngunit nakakaapekto rin sa lokasyon ng iba't ibang elemento at ang pagganap ng mga pangunahing pag-andar.

Upang makagawa ng mga pagbabago sa code, ang mga pangunahing kasanayan sa programming ay kinakailangan sa halos anumang wika (mas mabuti ang Java at C++). Upang palitan ang mga graphics, ang mga tuwid na kamay at ang kakayahang magtrabaho sa isang editor ng graphics ay magagawa.

Una sa lahat, kailangan mong magpasya kung kailangan mo lang palitan ang mga graphics sa mga Android application o kung kailangan mong baguhin ang pag-aayos ng mga elemento sa system at gumawa ng mas malalim na pagbabago sa code. Ang mga karagdagang hakbang ay nakasalalay dito, na kinabibilangan ng alinman sa pagtatrabaho sa application bilang isang archive, o ganap na pag-disassembling at pag-edit nito.

Pagbabago ng mga graphics sa mga application ng Android system

Upang palitan o baguhin lamang ang orihinal na mga graphics (baguhin ang mga kulay ng mga pindutan, i-redraw ang mga larawan, atbp.), Ito ay sapat na magkaroon ng isang karaniwang WinRAR archiver sa iyong computer. Sa device, ang user ay dapat magkaroon ng "root" na mga karapatan (katulad sa isang administrator account sa Windows), at ipinapayong magkaroon ng alternatibong pagbawi (CWM) at root explorer (upang ma-access ang Android file system nang direkta sa device. mismo).

Una sa lahat, kailangan mong paganahin ang "USB Debugging" sa device, pagkatapos ay ikonekta ito sa computer gamit ang USB cable at i-install ang mga kinakailangang driver. Karaniwang matatagpuan ang mga ito sa isang virtual disk na lumilitaw kapag kumonekta ka sa iyong computer.

Pagkatapos ay kailangan mo ring i-download ang ADB plugin para sa file manager mula sa Internet. Binibigyang-daan ka ng plugin na ito na makita ang buong Android system bilang konektadong disk na may mga folder. Ang lahat ng mga application ng system ay matatagpuan sa /system/app, pati na rin sa /system/framework. Kapag nahanap mo na ang application na kailangan mo, kopyahin lang ito sa iyong computer. Kung hindi naka-install ang plugin, maaari mong gamitin ang root explorer upang kopyahin ang application na may extension ng apk sa isang naaalis na SD card, at pagkatapos ay mula dito sa computer.

Mga folder sa isang Android smartphone at kung ano ang ibig sabihin ng mga ito

Pagkatapos kopyahin ang nais na application, maaari mong simulan ang pag-edit ng mga graphics. Sa pamamagitan ng paraan, ang lahat ng mga larawan sa mga application ng Android ay nai-save sa png na format, na madaling mabuksan sa anumang editor ng graphics. Kapag binuksan mo ang application file gamit ang WinRAR, makikita mo ang isang serye ng mga folder. Magiging interesado lamang kami sa res folder, sa loob kung saan makikita namin, sa turn, ng maraming iba't ibang mga folder. Sa mga ito, tanging ang may salitang "drawable" sa kanilang pangalan ang kailangan.

Ngayon tandaan natin ang uri ng device natin at ang resolution ng screen nito. Kung ito ay isang smartphone at ang resolution ay 240x320, kung gayon kami ay magiging pangunahing interesado sa mga drawable at drawable-ldpi na mga folder. Kung ang resolution ay 320x480 - ang drawable at drawable-mdpi folder, ayon sa pagkakabanggit, at para sa 480x800 resolution - ang drawable at drawable-hdpi na mga folder. Bilang karagdagan sa mga ito, karaniwang mayroon ding mga folder na ang mga pangalan ay naglalaman ng salitang "lupa" - ito ay mga graphics para sa portrait mode, i.e. kapag nakatagilid ang device.

Kung mayroon kang tablet sa iyong mga kamay, magiging interesado lamang kami sa mga drawable at drawable-mdpi na folder sa anumang resolution ng screen.

Sa pamamagitan ng pagkopya ng mga napiling folder sa iyong computer, maaari mong palitan o muling kulayan ang mga orihinal na larawan ng mga kailangan mo at kasiya-siya sa mata. Dapat mong bigyang-pansin ang mga larawang may resolution na 9.png. Ang katotohanan ay sa kahabaan ng perimeter ng naturang imahe mayroong isang espesyal na frame na isang pixel ang lapad na may mga espesyal na marka, paglabag sa integridad na kung saan ay hahantong sa isang malfunction ng application. Samakatuwid, ang matinding pag-iingat ay dapat gawin kapag nag-e-edit ng mga naturang file.

Pagkatapos i-edit ang folder, kailangan mong i-upload ito pabalik sa archive, na mismong application na may extension ng apk. Sa kasong ito, kinakailangan upang piliin ang opsyon na "walang compression" sa WinRAR.

Ang naitama na application ay dina-download pabalik sa device gamit ang root explorer (una ang file ay kinopya sa SD card, at mula dito sa device), o pagkatapos lumabas sa recovery - direkta mula sa computer papunta sa /system/app o / folder ng system/framework . Susunod, kailangan mong magtakda ng mga pahintulot sa file gamit ang naaangkop na mga opsyon sa root explorer o ADB plugin. Dapat ay nasa 644 na format ang mga ito Pagkatapos i-reboot ang device, makikita mo ang resulta ng na-update na application.

Pag-edit ng source code ng mga application ng system

Kailangan ng kaunting pagsisikap upang i-edit ang source code ng mga application ng system. Upang i-disassemble at muling buuin ang application pagkatapos gumawa ng mga pagbabago dito, kakailanganin mong kumpletuhin ang sumusunod na ilang hakbang.

1) I-install sa iyong computer ang kinakailangang software package sa kanilang pinakabagong mga bersyon: Java SE Runtime Environment at Android SDK Windows (mga program para sa pagtatrabaho sa mga application at mga bahagi ng mga ito), APKtool o APKManager o Firmware_tool (isa sa tatlong mga program para sa pag-disassembling at pag-decompile ng mga application ng system ), NotePad++ editor (para sa paggawa ng mga pagbabago sa source code ng mga application ng Android system).

2) Paganahin ang "USB Debugging" sa device, ikonekta ito sa computer gamit ang USB cable, i-install ang mga kinakailangang driver para gumana sa device.

3) Gamit ang isa sa mga nabanggit na programa upang gumana sa code ng aplikasyon, kailangan mong i-extract ang folder na /system/framework (buong) at mga application ng system mula sa folder ng /system/app mula sa telepono patungo sa naaangkop na folder ng programa. Halimbawa, para sa programa ng Firmware_tool, ang mga file mula sa telepono ay dapat makopya sa C: Firmwaretoolfw_project1_source2_system.img_unpacked folder sa naaangkop na mga subfolder (mga application - sa folder ng app, mga file mula sa framework - sa folder ng framework). Kapag ginagamit ito at ang iba pang mga program, siguraduhing basahin ang mga tagubilin para sa kanila.

4) I-install ang "balangkas ng suporta", i.e. isang hanay ng mga panuntunan alinsunod sa kung saan isasagawa ang decompilation (i.e. disassembling code) at compilation (i.e. assembling code) ng mga application.

Kinukumpleto nito ang paghahanda para sa pagtatrabaho sa mga application ng system.

Ang pag-unload ng mga application mula sa device at pag-load ng mga ito pabalik ay isinasagawa nang katulad ng pamamaraang inilarawan sa seksyong "Pagbabago ng mga graphics sa mga application ng Android system".

Ang pag-edit ng code ng mga Android application ay karaniwang ginagawa gamit ang NotePad++ editor - isa sa mga pinaka-maginhawang text editor na may opsyon ng syntax highlighting ng napiling programming language. Bilang isang patakaran, kapag nag-e-edit, maaari mo ring baguhin ang mga graphics kasama ang paraan gamit ang napiling editor ng graphics.

Sa pagkumpleto ng pag-edit, ang binagong application ay ida-download pabalik sa device, at ang device mismo ay dapat na i-reboot. Gumagamit ang mga mas advanced na editor ng iba't ibang emulator, halimbawa, Eclipse mula sa Google, upang i-debug ang mga application bago i-download ang mga ito sa device.

Minsan ang ilang mga application sa Android ay hindi angkop sa user sa ilang paraan. Ang isang halimbawa ay mapanghimasok na advertising. At nangyayari rin na ang programa ay mabuti para sa lahat, ngunit ang pagsasalin sa loob nito ay baluktot o ganap na wala. O, halimbawa, ang programa ay isang pagsubok, ngunit walang paraan upang makuha ang buong bersyon. Paano baguhin ang sitwasyon?

Panimula

Sa artikulong ito, pag-uusapan natin kung paano i-disassemble ang isang APK package na may isang application, tingnan ang panloob na istraktura nito, i-disassemble at i-decompile ang bytecode, at subukan din na gumawa ng ilang mga pagbabago sa mga application na maaaring magdala sa amin ng isang benepisyo o iba pa.

Upang gawin ang lahat ng ito sa iyong sarili, kakailanganin mo ng hindi bababa sa pangunahing kaalaman sa wikang Java, kung saan nakasulat ang mga application ng Android, at ang wikang XML, na ginagamit saanman sa Android - mula sa paglalarawan ng application mismo at mga karapatan sa pag-access nito hanggang sa pag-iimbak ng mga string na ay ipapakita sa screen. Kakailanganin mo rin ang kakayahang gumamit ng espesyal na console software.

Kaya, ano ang isang APK package kung saan ganap na lahat ng Android software ay ipinamamahagi?

Decompilation ng application

Sa artikulong ito, nagtrabaho lamang kami gamit ang disassembled na code ng application, ngunit kung mas seryosong pagbabago ang gagawin sa malalaking application, ang pag-unawa sa smali code ay magiging mas mahirap. Sa kabutihang palad, maaari naming i-decompile ang dex code sa Java code, na, kahit na hindi orihinal at hindi pinagsama-sama, ay mas madaling basahin at maunawaan ang lohika ng application. Upang gawin ito, kakailanganin namin ng dalawang tool:

  • Ang dex2jar ay isang tagasalin ng Dalvik bytecode sa JVM bytecode, sa batayan nito ay makakakuha tayo ng code sa wikang Java;
  • Ang jd-gui ay isang decompiler mismo na nagbibigay-daan sa iyong makakuha ng nababasang Java code mula sa JVM bytecode. Bilang kahalili, maaari mong gamitin ang Jad (www.varaneckas.com/jad); Bagama't medyo luma na ito, sa ilang pagkakataon ay bumubuo ito ng mas nababasang code kaysa sa Jd-gui.

Ito ay kung paano sila dapat gamitin. Una, inilunsad namin ang dex2jar, na tumutukoy sa landas sa apk package bilang argumento:

% dex2jar.sh mail.apk

Bilang resulta, ang Java package mail.jar ay lalabas sa kasalukuyang direktoryo, na maaari nang mabuksan sa jd-gui upang tingnan ang Java code.

Pag-aayos ng mga APK package at pagtanggap ng mga ito

Ang Android app package ay karaniwang isang regular na ZIP file na hindi nangangailangan ng anumang mga espesyal na tool upang tingnan ang mga nilalaman nito o i-extract ito. Sapat na magkaroon ng archiver - 7zip para sa Windows o console unzip sa Linux. Ngunit iyon ay tungkol sa balot. Ano ang nasa loob? Sa pangkalahatan, mayroon kaming sumusunod na istraktura sa loob:

  • META-INF/- naglalaman ng isang digital na sertipiko ng application, pagkilala sa lumikha nito, at mga checksum ng mga file ng package;
  • res/ - iba't ibang mga mapagkukunan na ginagamit ng application sa trabaho nito, tulad ng mga imahe, deklaratibong paglalarawan ng interface, pati na rin ang iba pang data;
  • AndroidManifest.xml- paglalarawan ng application. Kabilang dito, halimbawa, ang isang listahan ng mga kinakailangang pahintulot, ang kinakailangang bersyon ng Android at ang kinakailangang resolution ng screen;
  • classes.dex- pinagsama-samang application bytecode para sa Dalvik virtual machine;
  • mapagkukunan.arsc- mga mapagkukunan din, ngunit sa ibang uri - sa partikular, mga string (oo, ang file na ito ay maaaring gamitin para sa Russification!).

Ang mga nakalistang file at direktoryo ay, kung hindi sa lahat, kung gayon, marahil, sa karamihan ng mga APK. Gayunpaman, may ilan pang hindi pangkaraniwang mga file/direktoryo na dapat banggitin:

  • mga ari-arian- analogue ng mga mapagkukunan. Ang pangunahing pagkakaiba ay upang ma-access ang isang mapagkukunan kailangan mong malaman ang identifier nito, ngunit ang listahan ng mga asset ay maaaring makuha nang pabago-bago gamit ang AssetManager.list() na paraan sa application code;
  • lib- mga katutubong aklatan ng Linux na isinulat gamit ang NDK (Native Development Kit).

Ang direktoryo na ito ay ginagamit ng mga producer ng laro na naglalagay ng game engine na nakasulat sa C/C++ doon, gayundin ng mga tagalikha ng mga application na may mataas na pagganap (halimbawa, Google Chrome). Nalaman namin ang device. Ngunit paano mo makukuha ang package file ng application na interesado ka? Dahil hindi posibleng kunin ang mga APK file mula sa device nang walang root (matatagpuan ang mga ito sa direktoryo ng /data/app), at hindi palaging maipapayo ang pag-rooting, mayroong hindi bababa sa tatlong paraan upang makuha ang application file sa iyong computer:

  • APK Downloader extension para sa Chrome;
  • Real APK Leecher app;
  • iba't ibang file hosting at Varezniks.

Alin ang gagamitin ay isang bagay ng panlasa; mas gusto naming gumamit ng hiwalay na mga application, kaya ilalarawan namin ang paggamit ng Real APK Leecher, lalo na dahil nakasulat ito sa Java at, nang naaayon, gagana sa Windows o Nix.

Pagkatapos simulan ang programa, kailangan mong punan ang tatlong field: Email, Password at Device ID - at pumili ng isang wika. Ang unang dalawa ay ang e-mail at password ng iyong Google account na ginagamit mo sa device. Ang pangatlo ay ang device identifier, at maaaring makuha sa pamamagitan ng pag-type ng code sa dialer # #8255## at pagkatapos ay hanapin ang linya ng Device ID. Kapag nag-fill out, kailangan mo lang ipasok ang ID nang walang android- prefix.

Pagkatapos punan at i-save, madalas na lumalabas ang mensaheng "Error habang kumokonekta sa server." Wala itong kinalaman sa Google Play, kaya huwag mag-atubiling huwag pansinin ito at maghanap ng mga pakete na interesado ka.

Tingnan at Baguhin

Sabihin nating nakakita ka ng package na interesado ka, na-download ito, na-unpack ito... at nang sinubukan mong tingnan ang ilang XML file, nagulat ka nang matuklasan mong hindi text ang file. Paano ito i-decompile at kung paano gumana sa mga pakete sa pangkalahatan? Kailangan ba talagang i-install ang SDK? Hindi, hindi kailangang i-install ang SDK. Sa katunayan, ang lahat ng mga hakbang upang i-extract, baguhin at i-package ang mga APK package ay nangangailangan ng mga sumusunod na tool:

  • ZIP archiver para sa pag-unpack at pag-iimpake;
  • smali- Dalvik virtual machine bytecode assembler/disassembler (code.google.com/p/smali);
  • aapt- isang tool para sa mga mapagkukunan ng packaging (bilang default, ang mga mapagkukunan ay naka-imbak sa binary form upang i-optimize ang pagganap ng application). Kasama sa Android SDK, ngunit maaaring makuha nang hiwalay;
  • pumirma- isang tool para sa digital na pagpirma ng isang binagong package (bit.ly/Rmrv4M).

Maaari mong gamitin ang lahat ng mga tool na ito nang hiwalay, ngunit ito ay hindi maginhawa, kaya mas mahusay na gumamit ng mas mataas na antas ng software na binuo sa kanilang batayan. Kung nagtatrabaho ka sa Linux o Mac OS X, mayroong isang tool na tinatawag na apktool. Binibigyang-daan ka nitong i-unpack ang mga mapagkukunan sa orihinal na anyo nito (kabilang ang mga binary XML at arsc file), muling buuin ang isang pakete na may mga binagong mapagkukunan, ngunit hindi nito alam kung paano mag-sign ng mga pakete, kaya kailangan mong patakbuhin nang manu-mano ang signer utility. Sa kabila ng katotohanan na ang utility ay nakasulat sa Java, ang pag-install nito ay medyo hindi pamantayan. Una kailangan mong makuha ang jar file mismo:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Kung nagtatrabaho ka sa Windows, mayroong isang mahusay na tool para dito na tinatawag na Virtuous Ten Studio, na nag-iipon din ng lahat ng mga tool na ito (kabilang ang apktool mismo), ngunit sa halip na isang CLI interface ay nagbibigay ito sa user ng isang intuitive na graphical na interface kung saan maaari mong magsagawa ng mga operasyon para sa pag-unpack, pag-disassemble at pag-decompile sa ilang mga pag-click. Ang tool na ito ay Donation-ware, ibig sabihin, kung minsan ay lumalabas ang mga bintana na humihiling sa iyo na kumuha ng lisensya, ngunit sa huli ito ay matitiis. Walang saysay na ilarawan ito, dahil mauunawaan mo ang interface sa loob ng ilang minuto. Ngunit ang apktool, dahil sa likas na katangian ng console nito, ay dapat na talakayin nang mas detalyado.


Tingnan natin ang mga opsyon sa apktool. Sa madaling salita, mayroong tatlong pangunahing utos: d (decode), b (build) at kung (i-install ang framework). Kung malinaw ang lahat sa unang dalawang utos, ano ang ginagawa ng pangatlo, kondisyonal na pahayag? Ina-unpack nito ang tinukoy na balangkas ng UI, na kinakailangan sa mga kaso kung saan na-dissect mo ang anumang package ng system.

Tingnan natin ang pinaka-kagiliw-giliw na mga pagpipilian ng unang utos:

  • -s- huwag i-disassemble ang mga dex file;
  • -r- huwag i-unpack ang mga mapagkukunan;
  • -b- huwag magpasok ng impormasyon sa pag-debug sa mga resulta ng pag-disassembling ng dex file;
  • --frame-path- gamitin ang tinukoy na balangkas ng UI sa halip na ang isa na binuo sa apktool. Ngayon tingnan natin ang ilang mga opsyon para sa b command:
  • -f- sapilitang pagpupulong nang hindi sinusuri ang mga pagbabago;
  • -a- ipahiwatig ang landas sa aapt (isang tool para sa pagbuo ng isang archive ng APK), kung sa ilang kadahilanan ay gusto mong gamitin ito mula sa ibang pinagmulan.

Ang paggamit ng apktool ay napaka-simple; upang gawin ito, tukuyin lamang ang isa sa mga utos at ang landas patungo sa APK, halimbawa:

$ apktool d mail.apk

Pagkatapos nito, lalabas sa direktoryo ng mail ang lahat ng na-extract at na-disassemble na mga file ng package.

Paghahanda. Hindi pagpapagana ng advertising

Ang teorya ay, siyempre, mabuti, ngunit bakit ito kailangan kung hindi natin alam kung ano ang gagawin sa hindi naka-pack na pakete? Subukan nating ilapat ang teorya sa ating kapakinabangan, ibig sabihin, baguhin ang ilang software upang hindi ito magpakita sa atin ng advertising. Halimbawa, hayaan itong maging Virtual Torch - isang virtual na tanglaw. Ang software na ito ay perpekto para sa amin, dahil ito ay puno ng nakakainis na advertising at, higit pa rito, ay sapat na simple upang hindi mawala sa gubat ng code.


Kaya, gamit ang isa sa mga pamamaraan sa itaas, i-download ang application mula sa merkado. Kung magpasya kang gumamit ng Virtuous Ten Studio, buksan lang ang APK file sa application at i-unpack ito, lumikha ng proyekto (File -> Bagong proyekto), pagkatapos ay piliin ang Import File sa menu ng konteksto ng proyekto. Kung ang iyong pinili ay nahulog sa apktool, pagkatapos ay magpatakbo lamang ng isang utos:

$ apktool d com.kauf.particle.virtualtorch.apk

Pagkatapos nito, lalabas ang isang file tree na katulad ng inilarawan sa nakaraang seksyon sa com.kauf.particle.virtualtorch directory, ngunit may karagdagang smali directory sa halip na mga dex file at apktool.yml file. Ang una ay naglalaman ng na-disassembled na code ng executable dex file ng application, ang pangalawa ay naglalaman ng impormasyon ng serbisyo na kinakailangan para sa apktool upang maibalik ang package.

Ang unang lugar na dapat nating tingnan ay, siyempre, AndroidManifest.xml. At narito agad naming nakatagpo ang sumusunod na linya:

Hindi mahirap hulaan na responsable ito sa pagbibigay ng mga pahintulot sa application na gamitin ang koneksyon sa Internet. Sa katunayan, kung gusto lang nating tanggalin ang advertising, malamang na kailangan lang nating harangan ang application mula sa Internet. Subukan nating gawin ito. Tinatanggal namin ang tinukoy na linya at subukang buuin ang software gamit ang apktool:

$ apktool b com.kauf.particle.virtualtorch

Ang resultang APK file ay lalabas sa com.kauf.particle.virtualtorch/build/ directory. Gayunpaman, hindi ito posibleng i-install, dahil wala itong digital signature at mga file checksum (wala lang itong META-INF/ directory). Dapat nating lagdaan ang package gamit ang apk-signer utility. Inilunsad. Ang interface ay binubuo ng dalawang tab - sa una (Key Generator) lumikha kami ng mga susi, sa pangalawa (APK Signer) kami ay pumirma. Upang gawin ang aming pribadong key, punan ang mga sumusunod na field:

  • Target na File- keystore output file; ito ay karaniwang nag-iimbak ng isang pares ng mga susi;
  • Password At Kumpirmahin- password para sa imbakan;
  • alyas- pangalan ng susi sa imbakan;
  • Alias ​​na password At Kumpirmahin- sikretong key password;
  • Ang bisa- panahon ng bisa (sa mga taon). Ang default na halaga ay pinakamainam.

Ang natitirang mga field ay, sa pangkalahatan, opsyonal - ngunit hindi bababa sa isa ay dapat punan.


BABALA

Upang mag-sign ng isang application gamit ang apk-signer, dapat mong i-install ang Android SDK at tukuyin ang buong path papunta dito sa mga setting ng application.

Ang lahat ng impormasyon ay ibinigay para sa mga layuning pang-impormasyon lamang. Ang mga editor o ang may-akda ay walang pananagutan para sa anumang posibleng pinsala na dulot ng mga materyales ng artikulong ito.

Maaari mo na ngayong lagdaan ang APK gamit ang key na ito. Sa tab na APK Signer, piliin ang bagong nabuong file, ilagay ang password, key alias at password, pagkatapos ay hanapin ang APK file at matapang na i-click ang button na "Mag-sign". Kung magiging maayos ang lahat, pipirmahan ang package.

IMPORMASYON

Dahil nilagdaan namin ang package gamit ang sarili naming susi, salungat ito sa orihinal na application, na nangangahulugan na kapag sinubukan naming i-update ang software sa pamamagitan ng market, makakatanggap kami ng error.

Ang isang digital na lagda ay kinakailangan lamang para sa software ng third-party, kaya kung binabago mo ang mga application ng system na naka-install sa pamamagitan ng pagkopya sa mga ito sa direktoryo ng /system/app/, hindi mo na kailangang pirmahan ang mga ito.

Pagkatapos nito, i-download ang package sa iyong smartphone, i-install ito at ilunsad ito. Voila, wala na ang ad! Sa halip, gayunpaman, lumitaw ang isang mensahe na wala kaming Internet o wala kaming naaangkop na mga pahintulot. Sa teorya, maaaring sapat na ito, ngunit mukhang nakakainis ang mensahe, at, sa totoo lang, sinuwerte lang kami sa isang hangal na aplikasyon. Ang karaniwang nakasulat na software ay malamang na linawin ang mga kredensyal nito o titingnan ang isang koneksyon sa Internet at kung hindi man ay tatangging ilunsad. Ano ang gagawin sa kasong ito? Siyempre, i-edit ang code.

Karaniwan, ang mga may-akda ng application ay gumagawa ng mga espesyal na klase para sa pagpapakita ng mga ad at mga paraan ng pagtawag ng mga klase na ito kapag ang application o ang isa sa mga "aktibidad" nito (sa simpleng mga termino, mga screen ng application) ay inilunsad. Subukan nating hanapin ang mga klaseng ito. Pumunta kami sa direktoryo ng smali, pagkatapos ay com (naglalaman lamang ang org ng bukas na graphic library na cocos2d), pagkatapos ay kauf (ito ay kung saan ito, dahil ito ang pangalan ng developer at lahat ng kanyang code ay naroroon) - at narito ito, ang direktoryo ng marketing. Sa loob nakita namin ang isang bungkos ng mga file na may smali extension. Ito ay mga klase, at ang pinakakilala sa mga ito ay ang Ad.smali class, mula sa pangalan kung saan madaling hulaan na ito ang nagpapakita ng advertising.

Maaari naming baguhin ang lohika ng pagpapatakbo nito, ngunit magiging mas madaling alisin ang mga tawag sa alinman sa mga pamamaraan nito mula sa application mismo. Samakatuwid, iniiwan namin ang direktoryo ng marketing at pumunta sa katabing direktoryo ng particle, at pagkatapos ay sa virtualtorch. Ang MainActivity.smali file ay nararapat na espesyal na pansin dito. Ito ay isang karaniwang klase ng Android na nilikha ng Android SDK at naka-install bilang entry point sa application (katulad ng pangunahing function sa C). Buksan ang file para sa pag-edit.

Sa loob ay may smali code (lokal na assembler). Ito ay medyo nakakalito at mahirap basahin dahil sa mababang antas nito, kaya hindi namin ito pag-aaralan, ngunit hahanapin lamang ang lahat ng mga reference sa Ad class sa code at magkomento sa kanila. Pumasok kami sa linyang "Ad" sa paghahanap at makarating sa linya 25:

Pribadong ad sa field:Lcom/kauf/marketing/Ad;

Dito nilikha ang field ng ad upang mag-imbak ng object ng Ad class. Nagkokomento kami sa pamamagitan ng paglalagay ng ### sign sa harap ng linya. Ipinagpatuloy namin ang paghahanap. Linya 423:

New-instance v3, Lcom/kauf/marketing/Ad;

Dito nagaganap ang paglikha ng bagay. Comment tayo. Ipinagpatuloy namin ang paghahanap at paghahanap sa mga linyang 433, 435, 466, 468, 738, 740, 800 at 802 na mga tawag sa mga pamamaraan ng Ad class. Comment tayo. Ganun daw. I-save. Ngayon ang pakete ay kailangang isama muli at suriin para sa pag-andar at pagkakaroon ng advertising. Para sa kadalisayan ng eksperimento, ibinabalik namin ang linyang inalis mula sa AndroidManifest.xml, i-assemble ang package, lagdaan at i-install.

Ang guinea pig natin. Nakikita ang advertising

Oops! Nawala lang ang advertising habang tumatakbo ang application, ngunit nanatili sa pangunahing menu, na nakikita namin kapag inilunsad namin ang software. Kaya, maghintay, ngunit ang entry point ay ang klase ng MainActivity, at ang advertisement ay nawala habang tumatakbo ang application, ngunit nanatili sa pangunahing menu, kaya iba ang entry point? Upang matukoy ang totoong entry point, muling buksan ang AndroidManifest.xml file. At oo, naglalaman ito ng mga sumusunod na linya:

Sinasabi nila sa amin (at, higit sa lahat, ang android) na dapat ilunsad ang isang aktibidad na pinangalanang Start bilang tugon sa pagbuo ng intent (event) android.intent.action.MAIN mula sa android.intent.category.LAUNCHER na kategorya. Nabubuo ang kaganapang ito kapag nag-tap ka sa icon ng application sa launcher, kaya tinutukoy nito ang entry point, katulad ng Start class. Malamang, ang programmer ay unang nagsulat ng isang application na walang pangunahing menu, ang entry point kung saan ay ang karaniwang klase ng MainActivity, at pagkatapos ay nagdagdag ng isang bagong window (aktibidad) na naglalaman ng menu at inilarawan sa klase ng Start, at manu-manong ginawa itong entry punto.

Buksan ang Start.smali file at muling hanapin ang linyang "Ad", makikita namin sa mga linya 153 at 155 ang pagbanggit ng klase ng FirstAd. Ito rin ay nasa source code at, sa paghusga sa pangalan, responsable ito sa pagpapakita ng mga ad sa pangunahing screen. Tingnan pa natin, mayroong paglikha ng isang instance ng FirstAd class at isang layunin na, ayon sa konteksto, ay nauugnay sa instance na ito, at pagkatapos ay ang cond_10 label, ang conditional transition na kung saan ay isinasagawa nang eksakto bago lumikha ng isang instance ng klase:

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Malamang, kahit papaano, random na kinakalkula ng program kung dapat ipakita ang advertising sa pangunahing screen, at, kung hindi, direktang tumalon sa cond_10. Ok, pasimplehin natin ang kanyang gawain at palitan ang conditional transition ng walang kondisyon:

#if-ne p1, v0, :cond_10 goto:cond_10

Wala nang mga pagbanggit ng FirstAd sa code, kaya isinara namin ang file at muling buuin ang aming virtual na sulo gamit ang apktool. Kopyahin ito sa iyong smartphone, i-install ito, ilunsad ito. Voila, lahat ng advertising ay nawala, kung saan binabati namin ang lahat sa amin.

Mga resulta

Ang artikulong ito ay isang maikling panimula lamang sa mga paraan ng pag-hack at pagbabago ng mga Android application. Maraming isyu ang nanatili sa likod ng mga eksena, gaya ng pag-alis ng proteksyon, pag-parse ng na-obfuscate na code, pagsasalin at pagpapalit ng mga mapagkukunan ng application, pati na rin ang pagbabago ng mga application na nakasulat gamit ang Android NDK. Gayunpaman, ang pagkakaroon ng pangunahing kaalaman, ito ay isang bagay lamang ng oras upang malaman ang lahat ng ito.