V XE 5 appce na Google Play nefunguje přístup na Internet

vložil djenne 8. října 2013 00:13

V průběhu přípravy recenze na XE5 jsem narazil na nepříjemnou chybu IDE, která mě připravila nepříjemnou hodinku. Měl jsem odladěnou appku a přišel čas, abych jí zapublikoval na Google Play. Vše se podařilo, ale po stažení appky přes Play jsem zjistil že nemá práva přístupu na Internet (tedy lépe řečeno na TCP/IP). Jo aháá, nejsou nastavena práva pro aplikaci… jenže jsou. Dokonce právo Internet je jedno ze standardně povolených práv, když založíte prázdný projekt.

Takže co jsem zjistil. Práva (a ostatní důležité informace) pro sestavování APK jsou definovány v manifestu - soubor AndroidManifest.xml ve složce Android-Debug/Release v projektu. Pokud je nastaveno v Target Platforms-Android-Configuration-Debug (pozor, neplést s Build Configuration-Debug/Release), vypadá část která v manifestu definuje soubor přistupových práv takhle:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Appka funguje normálne. Pokud ale přepnete na Application Store a provedete znovu Build, vypadá stejná část takhle:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Že chybí INTERNET? Ano chybí a appka opravdu nemá přístup na Internet (tedy lépe řečeno obecně na síť). Teenager by na mém místě pravděpodobně prohlásil WTF! Já jsem se spokojil s konstatováním že je chyba v IDE a začal hledat nějaké řešení (a ano, zkontroloval jsem, že v nastavení projektu v IDE jsou opravdu pro všechny varianty práva nastavená stejně). Modifikovat přímo soubor AndroidManifest.xml nemá význam, sestavuje se vždy znova. Naštěstí mě Radek Červinka se kterým jsem to konzultoval navedl na template manifestu. Je to soubor AndroidManifestTemplate.xml v hlavní složce projektu. Část která nás zajímá vypadá takhle:

    <!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="%minSdkVersion%" />
<%uses-permission%>
    <application android:persistent="%persistent%" 
        android:restoreAnyVersion="%restoreAnyVersion%" 

Vyznačený metatag <%uses-permission%> se zcela zřejmě nahrazuje seznamem přístupových práv. Takže jsem ho upravil takhle:

    <!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="%minSdkVersion%" />
    <uses-permission android:name="android.permission.INTERNET" />
<%uses-permission%>
    <application android:persistent="%persistent%" 
        android:restoreAnyVersion="%restoreAnyVersion%" 

Jednoduše jsem přidal chybějící řádku s přidělením práv INTERNET. V debug režimu je pak ve výsledku tato řádka duplikovaná ale zřejmě to ničemu nevadí. Appka začala v konfiguraci Application Store fungovat jak při lokální distribuci, tak přes Play.

Ještě jsem chvíli hledal jestli někde nenajdu předlohu AndroidManifest.template.xml aby nebylo nutné jí měnit v každém novém projektu, ale na první výstřel jsem to nenašel. Jestli někdo odhalíte jak na to, podělte se. Beztak to považuji za dočasnou věc s životností do SP1 (nebo jiného nejbližšího upgrade).

Co mě ale na celé kauze překvapilo nejvíc, že na to někdo nepřišel během testování. To jsem první, kdo se snažil umístit appku na Play, která chce přístup k Internetu?!

Daniel Jenne, Praha, říjen 2013

Pozn editora: aspoň že má člověk možnost do toho sáhnout, když už je tam chyba. Jinak obecně o nastavování permission delphi.org/2013/10/delphi-xe5-android-uses-permissions/.

Tagy:

Delphi

Komentáře

12.10.2013 17:59:15 #

Tomas

Když se takovéto chyby takhle odprezentují, zahrnuje je Embarcadero do dalších updatů?

Tomas

12.10.2013 19:45:20 #

JFK

Když se chyby prezentují *takhle*, tak se opravdu do updatu nedostanou. Pokud se ale odprezentují například takhle: http://qc.embarcadero.com/wc/qcmain.aspx?d=119595, tak jistá šance už je. Navíc je zde i workaround.

JFK

14.10.2013 12:55:20 #

radekc

Jak napsal JFK - QC je základ. Tento článek byl míněn jako okamžitý workaround, lépe viditelný než na QC pro normálního uživatele.

radekc

16.10.2013 21:40:43 #

Tomas

Omlouvám se za jemně OT, ale nevím, kam s tím. XE5 neumí zavolat web service na androidu - totéž sestavené pro win32 funguje ok, ale target android zhavaruje chybou. Volání web services na mobilu je nejzásadnější věc na světě a zde to nefunguje. Snad to brzy vyřeší. Má někdo nějaké lepší info?

http://qc.embarcadero.com/wc/qcmain.aspx?d=118795

Tomas

16.10.2013 21:52:14 #

Tomas

Vrazil jsem to do fóra, omlouvám se, klidně to smažte:

http://forum.delphi.cz/index.php/topic,13961.msg83100.html#msg83100

Tomas

16.10.2013 22:46:49 #

JFK

Takovou pomoc bych zde nehledal (vážně ani s nadsázkou). Tohle jsem na QC viděl v několika variacích a jediné co lze udělat, je doufat ve vyřešení v Update 1 (čekám ho cca do týdne) a nebo si něco načíst na https://forums.embarcadero.com/category.jspa?categoryID=12, to je rozhodně největší a nejsolidnější základna informací (dummies jsou samozřejmě všude) + občas mile překvapí Stack Overflow. Pro méně znalé jen doplnění, že nově má Android na EMBF svou vlastní sekci: https://forums.embarcadero.com/forum.jspa?forumID=522

JFK

17.10.2013 11:14:50 #

radekc

JFK: jak jsi přišel na ten tyden?

radekc

17.10.2013 17:44:04 #

JFK

Jelikož je již týden venku template pro Release Notes Update 1, tak ze zkušenosti lze říci, že reálné uvolnění bývá v rozmezí 2-3 týdnů od daného okamžiku.

JFK

17.10.2013 18:10:58 #

JFK

Zpět k problému. Další podobenství zde: http://qc.embarcadero.com/wc/qcmain.aspx?d=118633. Bohužel EMBT z mně neznámého důvodu dává do svých RTM i Update verzí chorobné Indy a to je jeden z důsledků. Obecně bych řekl, že Indy nejsou tak špatné, ale EMBT jim kazí jméno tím, že do release dává verze výrazně starší oproti aktuálnímu SVN a to k velké nelibosti TeamuB, který se mimo jiné o Indy stará.

JFK

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců