Obecné návody[NÁVOD] Jak zabránit Androidu vypínat aplikaci na pozadí

Odpovědět

Autor tohoto vlákna
xanthor
Kyborg
Příspěvky: 5055
Registrován: čtv 21. říj 2010 14:38:18
Reputace: 78
Typ mobilu / ROM: Samsung Galaxy S7 [SM-G930F]
Mobil 2 / ROM: Xiaomi Redmi Note 3 Pro 2/16 [kate]
Tablet: Samsung Galaxy Tab A 10.1 2016 [SM-T580]
Tablet 2 / ROM: Alcatel OneTouch Pixi 3 (10)
Rom: S7: stock, kate: NOS

[NÁVOD] Jak zabránit Androidu vypínat aplikaci na pozadí

Příspěvek od xanthor » pon 13. srp 2012 13:24:27

"Předmluva"
Jak všichni víme, Android si životní cyklus aplikací spravuje sám, což především znamená, že jako uživatelé můžeme jen těžko ovlivnit, aby nám neukončil aplikaci, která je na pozadí. Tímto můžeme poměrně snadno přijít o vložená data (což je ale většinou chyba autora aplikace) nebo se musíme složitě proklikávat aplikací tam, kde jsme skončili (např. opětovně načíst webovou stránku). Osobně mi to vadí u aplikace KeePassDroid na správu hesel - musím zadávat dlouhé "master" (hlavní) heslo a nemám tak všechna hesla hned po ruce, jak bych často potřeboval. Příkladů asi naleznete více. Zvlášť v dnešní době, kdy mají zařízení zpravidla alespoň půl giga RAM, mi přijde dost hloupé, že uživatel nemá k dispozici možnost, jak ručně nastavit prioritu aplikace, u které si nepřeje, aby ji systém vypínal. Nevím, jak je to u všech custom ROM, ale např. u CyanogenModu vývojáři o takovéto možnosti nechtějí ani slyšet, přestože (jak je to např. u jedné ROM pro Motorolu Milestone) to znamená pouze jednoduchou úpravu pár řádků zdrojového kódu v jednom souboru.

Alternativy k uvedenému postupu
Kromě alternativní ROM, která má takovouto možnost (dát nějakému programu vyšší prioritu) mě napadají 2 možnosti - v6 supercharger skript či podobný nebo swap oddíl (případně v kombinaci s compcache). Ani jedno mi z toho nepřijde jako příliš "systémové" řešení, navíc (především swap) mi přijde trochu riskantní a přinášející další nevýhody.

Myšlenka
Postup spočívá v úpravě souboru AndroidManifest.xml (který obsahuje každá Androidí aplikace) a nastavení atributu android:persistent na hodnotu true. (Rozbalení *.apk a následné opětovné zabalení provádím přes nástroj apktool). Takto upravené *.apk je potřeba podepsat (EDIT: možná není) a nainstalovat (zkopírovat) mezi systémové aplikace - tedy do /system/app. Toť vše.

Nevýhody
Hlavní nevýhody vidím 2 - jednak je potřeba apk upravit, takže když vyjde aktualizace aplikace, tak je potřeba tento postup provést znovu a druhá nevýhoda je, že ta aplikace bude běžet a užírat paměť po celou dobu běhu systému. Doporučuji tedy nepoužívat na aplikace, které mohou spotřebovat velké množství RAM (což je samozřejmě relativní vzhledem k tomu, kolik RAM má váš telefon).

Návod

Požadavky
Budete potřebovat root (jak jinak) a počítač (mám Windows, ale mělo by to fungovat všude, kde běží Java). Nainstalujte si do počítače (pokud ještě nemáte) Java Development Kit VERZE 6 (ve verzi 7 nebude fungovat podepisování aplikace!). Odkaz: http://www.oracle.com/technetwork/java/ ... 37591.html (pro Windows doporučuji Windows x86, i když máte 64b systém) Taky budete potřebovat dostatek místa pro *.apk aplikace na systémovém oddílu (dá se zjistit např. pomocí aplikace Elixir 2) - pokud máte málo místa, můžete zkusit smazat různé předinstalované Facebooky apod., případně smazat (doporučuji zálohovat) nepoužívané vyzváněcí tóny v /system/media/audio (u mě > 5 MB).

Postup

1. Zkopírujte si do počítače *.apk příslušné aplikace.
Podrobně:
Spoiler:
Soubor s příponou apk můžete získat jakkoliv, doporučuji ale nainstalovat aplikaci z Google Play a poté ono *.apk buď zkopírovat na kartu z adresáře /data/app nějakým file managerem (např. Total Commanderem či Root Explorerem) nebo použít specializovanou aplikaci - např. appSaver (vývojář Gregory House). Z karty už *.apk snadno zkopírujete do počítače.
2. Rozbalte *.apk pomocí aplikace apktool. (apktool d C:\apktool\app.apk C:\apktool\app) (Návod přejat odsud: http://pervasivecode.blogspot.cz/2011/1 ... iting.html.)
Podrobně:
Spoiler:
Stáhněte si z http://code.google.com/p/android-apktool/downloads/list apktool (název souboru bude něco jako apktool1.4.3.tar.bz2) a podle systému buď "něco jako" apktool-install-windows-r04-brut1.tar.bz2 nebo apktool-install-linux-r04-brut1.tar.bz2. Rozbalte oba archivy do jednoho adresáře (pro jednoduchost budu předpokládat adresář C:\apktool). (Pro rozbalení ve Windows můžete použít např. Universal Extractor.) Měli byste mít 3 soubory - ve Windows to budou aapt.exe, apktool.bat a apktool.jar.
Teď přejmenujte stáhnutý *.apk soubor na "app.apk" a přesuňte jej do C:\apktool (nebo tam, kam jste apktool rozbalili). Teď spusťte příkazový řádek - ve Windows klávesovou kombinací Win-R, do objevivšího se pole napište cmd a stiskněte Enter. Přesuňte se do adresáře s apktool, např. pomocí:
C:
Enter
cd \apktool
Enter
(zpětné lomítko napíšete pomocí Ctrl-Alt-Q na české klávesnici)
a napište příkaz
apktool d app.apk app
3. V rozbaleném adresáři nastavte v AndroidManifest.xml v tagu application atribut android:persistent na hodnotu true.
Podrobně:
Spoiler:
Otevřete si v nějakém rozumném editoru (např. PSPad, v Notepadu může být problém s konci řádků) soubor AndroidManifest.xml, najděte v něm tag application (začíná <application). Prozkoumejte všechny následující atributy, dokud nenarazíte na znak >. Např. relevantní část souboru AndroidManifest.xml programu KeePassDroid (verze k 13. 8. 2012) vypadá takto:

Kód: Vybrat vše

<application android:label="@string/app_name" android:icon="@drawable/launcher" android:name="com.keepassdroid.app.App" android:backupAgent="com.keepassdroid.backup.SettingsBackupAgent">
Na 99.99 % zde nenaleznete atribut android:persistent, tedy sem přidejte android:persistent="true". V našem konkrétním případě upravte výše uvedenou část souboru takto:

Kód: Vybrat vše

<application android:label="@string/app_name" android:icon="@drawable/launcher" android:name="com.keepassdroid.app.App" android:backupAgent="com.keepassdroid.backup.SettingsBackupAgent" android:persistent="true">
V tom minimu případů, kdy by zde bylo android:persistent="false" to jednoduše změňte na android:persistent="true". (Pokud zde již je android:persistent="true", tak samozřejmě není potřeba dělat nic a rozbalovali jsme *.apk úplně zbytečně.) :-)

Samozřejmě nezapomeňte uložit upravený AndroidManifest.xml.
4. Rozbalenou aplikaci opět zabalte do souboru *.apk. (apktool b C:\apktool\app C:\apktool\app2.apk) (Návod přejat odsud: http://pervasivecode.blogspot.cz/2011/1 ... iting.html.)
Podrobně:
Spoiler:
Jednoduché - prostě napište do otevřeného příkazového řádku příkaz apktool b C:\apktool\app C:\apktool\app2.apk a stiskněte Enter.
UPDATE: Prý není potřeba provádět podepisování systémových aplikací, takže následující krok by mělo být možno přeskočit.

5. Upravenou aplikaci podepište pomocí programu jarsigner (v JDK 6). Doporučuji použít klíč přiložený k tomuto příspěvku:
key.zip
Klíč který je možno použít k podepsání aplikace.
(2.15 KiB) Staženo 73 x
(Rozbalit do adresáře s apktool)
Spoiler:
Samozřejmě si můžete vygenerovat pomocí jarsigner vlastní klíč, příklad např. zde:
http://developer.android.com/tools/publ ... gning.html
Podepsání se pak provede podobným příkazem jako:
"C:\Program Files (x86)\Java\jdk1.6.0_32\bin\jarsigner.exe" -verbose -keystore key.keystore app2.apk key
(Případně nahraďte cestu k jarsigner.exe, pokud máte tento soubor někde jinde).
Jo a heslo ke klíči je keykey (jarsigner by se vás na něj měl zeptat).

(Zde by možná bylo ještě vhodné provést zipalign, ale k tomu je potřeba SDK a do popisu se mi zatím nechce.)

6. Výsledný soubor (app2.apk) si přejmenujte, abyste věděli co obsahuje (např. na KeePassDroid.apk) a nainstalujte na systémový oddíl.
Podrobně:
Spoiler:
Mělo by stačit zkopírovat soubor do /system/app (ideálně Root Explorerem, který má příkaz pro povolení zápisu na systémový oddíl - nezapomeňte po zkopírování nastavit zpět na "pouze pro čtení", případně se dá použít i Terminal Emulator či adb shell (součást Android SDK) a příkazy mount -o remount rw /system a po zkopírování mount -o remount ro /system.
Nejjednodušší je ale nainstalovat aplikaci standardním způsobem a poté použít funkci jako "Convert to system app" (nabízí ROM Toolbox Pro nebo Titanium Backup Donate, případně Link2SD).
7. Pro jistotu restartujte telefon. Hotovo!
Naposledy upravil(a) xanthor dne sob 06. dub 2013 10:41:33, celkem upraveno 4 x.


Moje otevírací hodiny - otevírací hodiny ve Vašem telefonu



Autor tohoto vlákna
xanthor
Kyborg
Příspěvky: 5055
Registrován: čtv 21. říj 2010 14:38:18
Reputace: 78
Typ mobilu / ROM: Samsung Galaxy S7 [SM-G930F]
Mobil 2 / ROM: Xiaomi Redmi Note 3 Pro 2/16 [kate]
Tablet: Samsung Galaxy Tab A 10.1 2016 [SM-T580]
Tablet 2 / ROM: Alcatel OneTouch Pixi 3 (10)
Rom: S7: stock, kate: NOS

Re: [Návod] Jak zabránit Androidu vypínat aplikaci na pozadí

Příspěvek od xanthor » pon 13. srp 2012 13:24:46

Poznámka: Některé aplikace nejsou pomocí apktoolu "překompilovat". Např. Firefox.
Naposledy upravil(a) xanthor dne sob 13. dub 2013 10:52:59, celkem upraveno 1 x.
Moje otevírací hodiny - otevírací hodiny ve Vašem telefonu


paulgaugin
Androiďák!
Příspěvky: 288
Registrován: úte 06. lis 2012 9:07:46
Reputace: 0
Typ mobilu / ROM: Lenovo A789

Re: [Návod] Jak zabránit Androidu vypínat aplikaci na pozadí

Příspěvek od paulgaugin » sob 13. dub 2013 9:54:09

Tak jsem to zkoušel s Firefoxem a výsledný APK je cca desetinový (2,8 MB oproti 20). Projel jsem postup celkem 3x, doufejme že dle návodu, ale soubor je pořád malý a hlavně nejde nainstalovat do telefonu. Nějaký tip?


Autor tohoto vlákna
xanthor
Kyborg
Příspěvky: 5055
Registrován: čtv 21. říj 2010 14:38:18
Reputace: 78
Typ mobilu / ROM: Samsung Galaxy S7 [SM-G930F]
Mobil 2 / ROM: Xiaomi Redmi Note 3 Pro 2/16 [kate]
Tablet: Samsung Galaxy Tab A 10.1 2016 [SM-T580]
Tablet 2 / ROM: Alcatel OneTouch Pixi 3 (10)
Rom: S7: stock, kate: NOS

Re: [Návod] Jak zabránit Androidu vypínat aplikaci na pozadí

Příspěvek od xanthor » sob 13. dub 2013 10:52:09

Tak bohužel to vypadá, že se složitějšími aplikacemi má apktool problém. Leda si vzít zdrojáky Firefoxu (je to open source), upravit si v nich ten manifest a zbuildovat si to sám. Holt Android je furt dost omezenej systém. Takže nezbývá, než se s tím smířit (a otevřené taby si např. ukládat do záložek). (Pochybuju totiž, že Google tuhle docela užitečnou věc dodá, zvlášť, když to neumí ani např. CyanogenMod.)
Moje otevírací hodiny - otevírací hodiny ve Vašem telefonu

Odpovědět

Zpět na „Obecné návody“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host