43 komentářů k článku Vyvíjíme pro Android: Suroviny, Intenty a jednotky:

  1. Ronon Dex

    Resources jako suroviny?

    Obvyklý překlad „resources“ je spíše „zdroje“. A nebál bych se podobností se slovy „source / sources / source code“ a jejich překladů „zdroják / zdrojáky / zdrojový kód“.

    Mně osobně přijdou podobné obrozenecké snahy o český překlad běžných vývojářských termínů poněkud úsměvné. Ovšem nelze jim (v některých případech, včetně tohoto) upřít i slušnou dávku vynalézavosti.

    Sice preferuji odborné texty v angličtině, ale chápu, že v rámci popularizace témat pro širokou veřejnost se česká verze hodí. I když dříve nebo později se člověk obecně rozšířenému jazyku autorů SDK a dokumentace naučit musí.

    1. Ronon Dex

      Re: Resources jako suroviny?

      Sákriš, nějak jsem opomněl…

      Jinak hodnotím článek pozitivně, jako celkem slušný náhled to Androidiího programování ;-)

      1. Matěj KonečnýAutor příspěvku

        Re: Resources jako suroviny?

        Děkuji za pochvalu.

        Nad slovem zdroje jsem uvažoval dlouho, ale pak mně přišlo takové…příliš obecné. Jednak by mohlo evokovat zdrojové kódy, jednak nějaké zdroje informací, ze kterých jsem čerpal, jednak, ale to je už hodně moc subjektivní, mi slovo zdroj přijde jako zdroj dat, tedy zdrojem bych rozuměl spíš nějakou webovou službu, z níž data získám. Nebo databázi.

        Suroviny jsou naopak ta samotná data. A pro resources mně osobně přišla popisnější tato varianta.

        Také nemusím přehnané puristy, kteří překládají všechno. Vůbec se nebráním používání anglických termínů, má to i tu výhodu, že člověk lépe porozumí anglickému textu o tomtéž. Ale se slovem resources jsem bojoval dost dlouho, jednak to není zas až tak jasný termín, ale hlavně je nesklonný. A to už se mi nelíbí a hlavně se mi to strašně špatně píše. A newspeak se mi vyloženě hnusí a nechci se k němu přibližovat.

        1. 2X4B-523P

          Re: Resources jako suroviny?

          připojuji se k pochvale a přidám do debaty svůj pohled na slovo resources

          pro sebe bych mohl chápat resources jako prostředky k přístupu ke zdrojům, takže v jednom případě jsou resources prostředky a ve druhém zdroje… slovo suroviny mi osobně sedí k RAW datům…

    2. langpa

      Re: Resources jako suroviny?

      +1 pro resources -> zdroje, co vím, tenhle překlad jsem slyšel už před snad patnácti lety v souvislosti s linkováním dat do binárek, ať už to byly string konstanty, binární data či třeba ikony – dodnes se např. ve Windows PE formátu (.exe, .dll, …) termíny resources a embedded resources používají a překlad v české literatuře byl právě jako „zdroje“.

      Pokud by byl překlad matoucí, je jepší nepřekládat vůbec

  2. phoose

    plurals

    Díky za článek. Jenom jedna připomínka k plurals. Konkrétně:
    „Nás bude speciálně zajímat jednička a potom malá čísla (2, 3, 4). Zbytek je stejný (včetně nuly).“ a „Polština používá few pro každé číslo končící na 2, 3 nebo 4, ale ne na 12, 13 a 14.“

    Abych to uvedl na pravou míru, podobně, jak je to tu uvedené u polštiny, to má i čeština. Všechna čísla končící 1 a 2 – 4 (kromě čísel končících 11 a 12 – 14) se zapisují podle stejného pravidla. Tedy např. 1 rok, 2 roky, 4 roky, 5 let, 11 let, ale dál je to 21 rok, 22 roky, 24 roky, 25 let, 103 roky. Spousta lidí to píše špatně (21 let, 103 let), protože je to pro ně jednodušší na přemýšlení (resp. na absenci přemýšlení), ale správně to má být podle zmíněného pravidla.

    Nevím tedy, jak to píše Android, ještě jsem program nezkoušel. Na to budu mít čas až později.

    1. Matěj KonečnýAutor příspěvku

      Re: plurals

      Nemáte, pravdu, dle Ústavu pro jazyk český je možná i lenivá varianta, která je v současné době mnohem používanější, dokonce mě osobně třicet jeden muž už trochu tahá za uši a připadá mi to hyperkorektní (což je samozřejmě jen osobní pocit). Já každopádně tuto variantu používám pouze s ironickým podtextem.

      Za chvíli vyzkouším, jak to dělá Android, jsem však přesvědčen (a mám pocit, že jsem si to i kdysi vyzkoušel), že používá lenivou variantu.

      1. Matěj KonečnýAutor příspěvku

        Re: plurals

        Za „Nemáte“ mám samozřejmě přebytečnou čárku – překlep.

        Jinak jsem vyzkoušel, jak plurály na Androidu fungují, a opravdu je to tak, jak jsem předpokládál, tedy že „few“ je pouze pro {2, 3, 4}, nikoli i pro čísla, která na tyto číslice končí, kromě {12, 13, 14} a čísel na {12, 13, 14} končících.

        Testovací aplikace vypadala nějak takto:

        /res/values/plu­rals.xml:

        <plurals name="test">
            <item quantity="one">%1$d one</item>
            <item quantity="few">%1$d few</item>
            <item quantity="other">%1$d other</item>
        </plurals>

        Activity:

        EditText et = (EditText)findViewById(R.id.test);
        Resources res = getResources();
        String val = res.getQuantityString(R.plurals.test, 1, 1)
                + "n" + res.getQuantityString(R.plurals.test, 2, 2)
                + "n" + res.getQuantityString(R.plurals.test, 4, 4)
                + "n" + res.getQuantityString(R.plurals.test, 12, 12)
                + "n" + res.getQuantityString(R.plurals.test, 21, 21)
                + "n" + res.getQuantityString(R.plurals.test, 24, 24)
                + "n" + res.getQuantityString(R.plurals.test, 152, 152)
                + "n" + res.getQuantityString(R.plurals.test, 9876373, 9876373);
        et.setText(val);

        Výsledek: http://public.shulik.cz/zdrojak_plurals.png

      2. phoose

        Re: plurals

        No já osobně taky používám „lenivou“ variantu, ale byl jsem přesvědčený o tom, že to není správně. Dá se někde na stránkách ÚJČ zjistit, jak stará je ta aktualizace, od kdy je možné onu „lenivou“ variantu používat?

    1. Matěj KonečnýAutor příspěvku

      Re: Fajn, tak u textu napíšu velikost v dp. Ale co obrázky?

      Byla, máš pravdu, tohle byl ode mě hodně nešťastně zvolený nadpis.

      Nechtěl jsem do jednotek zabředávat nějak více, takže jsem zmínil jen dp, neboť sp jsou jen pro text, a když se místo nich použije dp, aplikace bude dál fungovat, i když ne tak perfektně. Což nic nemění na tom, že jsem nemusel psát, že zrovna u textu napíšu dp.

      Děkuju moc za upřesnění. Poprosím Martina, jestli by místo textu dal do nadpisu třeba rozměry.

  3. pravdokop

    Když už překlad, tak ne polovičatý

    Když už někdo chce zbytečně počešt´ovat, tak proč nepřeložit i Intenty jako Úmysly?

  4. RDPanek

    Perfektní článek

    Ahoj,
    díky za perfektní článek a určitě přeji hodně energie do psaní dalších :-)

    Chtěl jsem se zeptat, zda-li by šlo ke každé kapitole / ukázce appky napsat i jednotkový či integrační test – podobně jak to má v tutoriálu AngularJs.
    Mohlo by se to u článků stát standardem, ať si na to programátoři zvykají, že psaní testů k aplikačkám je standard. Osobně bych to uvítal, už jen ohedně základů v JUnit? a testování android aplikací.
    Mohl by s tím i Matějovi někdo pomoci?

    A v poslední řadě bych jen upozornil na překlep:

    řetězce, jeden s id ###displayed_a­ge_1### a textem Je Ti (a nezapomeňte na mezeru na konci!) a druhý s id ###displayed_a­ge_1### a textem let.

    Ještě jednou díky za článek.

    PS: br mi v komentáři nefungují :-o

    1. Martin Hassman

      Re: Perfektní článek

      Autory psaním testů zatěžovat nebudeme, stačí kolik práce s nimi mají teď. Rozhodně se ale nebráníme, pokud někdo chce testy napsat 8-)

    2. Matěj KonečnýAutor příspěvku

      Re: Perfektní článek

      Děkuju za upozornění na překlep (a děkuju Martinovi za opravu).

      Co se testování týče, sám jsem „obětí” toho, že články, návody a dokumentace jsou beztesté. Zpočátku jsem testy opravdu plánoval, ale narazil jsem hned na dvě překážky – jednak na určitou netestovatelnost části toho, co jsme zatím napsali (a hlavně toho, co bude v příštím článku) a jednak na svou neschopnost psát stručně. Už bez testů jsou články mnohem delší, než je doporučená délka (4–8 tisíc znaků doporučených vs. velmi zhruba asi 30 tisíc znaků tohoto článku bez všech výpisů kódu (<pre>).

      Mám nicméně nápad na takový trochu neotřelý dvojčlánek, který by ukazoval, jak ve skutečnosti vývoj pro tak rychle se rozvíjející platformu funguje, tedy že člověk zná základy, ale plno věcí se nutně musí učit za běhu, kde by se uplatnilo i testování. Buďto to bude závěr tohoto seriálu, anebo to publikuju někde u sebe (anebo to vyšumí :D).

      Každopádně se nějakým způsobem v rámci našeho seriálu o testování zmíníme, ale rozhodně to nebude soustavné testování tak, jak by asi mělo být, ale spíše představení testování pro Android se zaměřením hlavně na nejavovské testování, tedy testování UI, zjišťování, zda se spustila správná activity, zda je v edittextu správná hodnota atp.

  5. phoose

    Instalace aplikace

    Už se nemůžu dočkat dalšího dílu seriálu a než se dočkám, chtěl bych se zeptat na jednu věc. Když aplikaci ladím na fyzickém HW, aplikace se v podobě apk balíčku zkopíruje do zařízení (případně se napřed odinstaluje předchozí verze), nainstaluje a spustí. Všechno jede v pořádku. Když ale zdrojové kódy dané aplikace zkopíruju na jiný PC (sdílím si je mezi víc PC přes SVN), tam spustím Eclipse a chci tu stejnou aplikaci ladit na tom stejném HW zařízení, jen z jiného PC, nadává mi to, že aplikaci nejdřív musím ručně odinstalovat (Re-installation failed due to different application signatures. You must perform a full uninstall of the application.). Dá se mu nějak vysvětlit, že je mi jedno, z kterého PC stejnou aplikaci instaluju? V chybě se píše něco o „different application signatures“, je tedy možné aplikaci nějakým způsobem podepsat, aby ji bylo možné ladit z jakéhokoliv PC bez nutnosti ruční odinstalace?

    1. Matěj KonečnýAutor příspěvku

      Re: Instalace aplikace

      Děkuji za pochvalu :).

      Předem se omlouvám, že mé vysvětlení je spíše hypotéza – nikdy jsem podepisování nestudoval ani z informatického, ani z matematického hlediska. Ale na základě Signing Your Applications (speciálně Signing in Debug Mode) a hodně zběžného prolétnutí dokumentace Keytoolu si dovolím tvrdit následující odstavce (a mimochodem děkuji za námět na studium, až si budeme ke konci povídat a podepisování a zveřejňování aplikace, pokusím se zahrnout i hodně stručný popis, jak to funguje).

      Každý .apk soubor musí být podepsaný. Podepsání nejspíše znamená několik bajtů, které si může každý rozkódovat podle veřejného klíče, čímž zjistí jejich obsah, ale jen já znám celý, privátní klíč, bez něhož nelze data zašifrovat.

      Podepsané jsou i .apk soubory, které se nahrávají do AVD respektive na telefon při debugování. Jsou ale díky Eclipse podepsané automaticky, že o tom vůbec nevíme, a jsou podepsané klíčem vytvořeným s přesně specifikovanými daty, která jsou vypsána ve výše odkázaném článku na Android Developers.

      Klíče se vytvoří tak, že keytool předám nějaká data (alias, heslo, atd.) a on vygeneruje náhodný klíč (nějaké číslo). Ten klíč stačí k rozšifrování informace, ale abych ji mohl zašifrovat, potřebuji znát privátní klíč, který se skládá z toho náhodného, veřejného, a ještě k tomu z předaných dat.

      Díky tomu může Android zjistit, zda je aplikace podepsána debugovacím či nedebugovacím klíčem, a podle toho mi například zakázat takové .apk nahrát na Play Store.

      Myslím si, že proces podepisování .apk se neliší od jakéhokoli jiného elektronického podepisování dokumentů (až na to, že nemusím platit certifikační autoritě za klíč, ale vyrobím si ho sám).

      Protože do generování klíče vstupuje i náhoda, na každém z Tvých počítačů je klíč jiný, přestože soukromou část mají vlastně stejnou. Proto musíš .apk vždycky odinstalovat.

      Ale ještě jednou radši zmíním, že celé to, co jsem napsal, je jenom hypotéza založená na asi třech minutách proběhnutí dokumentace, jakés takés znalosti RSA šifry a předpokladu, že podepsání je vlastně opačná verze RSA (dešifrovat může každý, šifrovat jen já).

      Pokud je můj předpoklad správný (o čemž pochybuju, neboť jsem ho vyrobil prakticky z ničeho), mohlo by stačit najít, kde je uložený klíč na jednom počítači a překopírovat ho na druhý (to je ale opět jen hypotéza).

      Další možnost (opět jen hypotéza, nikdy jsem s tím nedělal) by mohla možná být taková, že by sis vytvořil vlastní debugovací klíč a ANTový program, který by se spustil při kliknutí na eclipsovou zelenou šipku místo toho původního a dělal by vlastně to samé, co Eclipse, akorát se stejným klíčem.

      Jestli existuje i jednodušší varianta, nevím, ale myslím, že je-li má hypotéza správná, tak ne.

      Budu moc rád, pokud to někdo vysvětlí pořádně a správně anebo mě odkáže na srozumitelný článek pro dummies.

      1. phoose

        Re: Instalace aplikace

        Díky za vysvětlení a za odkazy. Zkusím s tím podepisováním něco pokoumat a pokud na něco přijdu, určitě se o to podělím.

  6. Radek

    Chybička ve článku?

    Jen se chci zeptat, zda je myšleno správně u příkladu použití modifikátorů „res/values/en-GB“? Nemá tam být „res/values-en-GB“?

  7. rogisoft

    Spouštění aplikace v AVD

    S programováním pro android začínám (jinak 25 let v různých jazycích a prostředích). Mám Eclipse Indigo, podle návodů jsem si nainstaloval všechno pro Android. Postupuji podle toho seriálu (jinak dík za něj), aplikaci „přeložím“ a je bez chyb, ale když ji spouštím přes AVD, tak se rozjede jen AVD a nic. žádné Hellou světe nebo edity a tlačítko.
    Nevíte někdo mi poradit. Předem díky

    Igor Vodička

    1. Matěj KonečnýAutor příspěvku

      Re: Spouštění aplikace v AVD

      Vážně? To se mi nikdy nestalo…

      Děláte to tak, že si vytvoříte AVD, vytvoříte projekt a potom stisknete velkou bílou šipečku uvnitř zeleného kroužku nahoře ( Ctrl + F11)? Počkáte chvíli, než se AVD pořádně spustí a aplikace se do něj stihne nahrát?

      Zkuste se podívat, jestli se aplikace vůbec nahrála, tzn. zjistěte, jestli je na ni v menu AVD odkaz.

      Co vypisuje konzole ( Shift + Alt + Q → Pustit a pak zmáčknout C)? Co vypisuje ADB (taková ta malinká zelená ikonka ležícího Androida)?

      1. rogisoft

        Re: Spouštění aplikace v AVD

        Moje chyba! Byl jsem netrpělivý, dal jsem tomu čas a AVD se po několika minutách spustilo i s aplikací.
        Přesto dík za reakci.

  8. Jan Ptacek

    Nesrovnalosti v kódu

    V první řadě díky za super článek, už dlouho jsem se chystal začít s androidem, ale odradil mě nedostatek podrobných článků.

    Myslíte, že byste mohl upravit tu část článku, ve které je uvedený kód metody getAge? Na několik minut mě zarazila, protože se mi nedařilo konečný kód hned rozběhnout. Soubory ke stažení jsem nezkoušel, je možné, že tam tahle chyba není.

    místo :
    String text = res.getString(R­.string.displa­yed_age, age);
    by tam mělo být, pokud jsem něco nepřehlédl:
    String text = res.getQuanti­tyString(R.plu­rals.displayed_a­ge, age, age);
    první varianta nepůjde ani zkompilovat. Bez 3. parametru, se vypíše pouze formátovací řetězec.

    Jen pro budoucí generace, které se podle tohoto článku budou chtít v androidu učit programovat, já si s tím nakonec poradil.

    A ještě jednou díky za článek, doufám, že se tento seriál uchytí a budou přibývat další díly.

  9. msx

    eclipse - poriadok v projektoch

    Keď robím v eclipse na tomto ukážkovom projekte, vidím v časti Problems (dole v záložke) warningy aj z iných projektov. Ja chcem vidieť len warningy z projektu, ktorý mám práve otvorený, aby som mal prehľad. Ako to dosiahnem? Medzi toľkými warningami je ťažko si všimnúť, že mi nejaký pribudol.

      1. msx

        Re: eclipse - poriadok v projektoch

        Tak to si ma pobavil. Nič v zlom. Ja tie projekty nechcem potom otvárať znova. Otvorené sú preto, lebo s nimi niečo robím. Len chcem prefiltrovať tie varovania tak, aby som videl len varovania z projektu, na ktorom mám nastavený kurzor. Skúšal som aj vytvorenie workspace, čo som myslel, že je práve na niečo také, ale nepomohlo.

  10. xXx

    Chybicka?

    Neviem ci to iba mne, ale podla navodu sa mi nepodarilo vypisat zadany vek.
    Namiesto konkretneho cisla mi vypisovalo %1$d.

    Vyriesl som to tym, ze som riadok:

    String text = res.getQuanti­tyString(R.plu­rals.displayed_a­ge, age);
    // pouzivam plurals a nie 1 identifikator

    zamenil za riadok:

    String text = String.format(res­.getQuantityS­tring(R.plural­s.displayed_a­ge, age), age);

    Aj v tom odkaze na manual prace so String pouzivali String.format na vratenie(aj ked oni tam pracovali s metodou getString()).

    1. dioda

      Re: Chybicka?
      Zbytečně složité. Použij:
      String text = res­.getQuantityS­tring(R.plural­s.displayed_a­ge, age, age);

  11. Kubíík

    Předávání argumentů

    Já jenom nechápu, jak jedna activity předá hodnotu proměnný age tý druhý co to zobrazí…

    1. Matěj KonečnýAutor příspěvku

      Re: Předávání argumentů

      Pomocí Intent extra, je to přesně tento řádek:

      intent.putExtra(AgeDisplayerActivity.AGE, age);
    1. Matěj KonečnýAutor příspěvku

      Re: unfortunately .. stop :(

      Jaký element má name=“display­ed_age“? je to <string>, anebo <plurals>?. O <plurals> jsem mluvil jen pro zajímavost, ty do aplikace nepatří. Patří tam

      <string name="displayed_age">Je Ti %1$d let. To je ten nejlepší věk!</string>
  12. n00ber

    Kódy
    Všechny články se mi líbí, ale je to trochu nepřehledné – začínám se ztrácet, člo bi udělat nějakou jednoduchou verzi – popsáno co jak dělá – řečeno co kam dát a podobně.
    PS: jaká je klávesová zkratka na špičatou závorku??? :)

    1. Pyro

      Re: Kódy
      (na slovenskej klavesnici)
      AltGr + , =
      AltGr + f = [
      AltGr + g = ]
      AltGr + b = {
      AltGr + n = }
      AltGr + q = \
      AltGr + p = ‚

      celkom to urychli pracu… hlavne ked sa mi nechce zvykat na anglicku klavesnicu :)

      1. Pyro

        Re: Kódy
        sakra… spicate zatvorky tu nejdu pisat a skryje co je v nich.. pardon…
        AltGr + , = spicata dolava (znak mensi)
        AltGr + . = spicata doprava (znak vacsi)

  13. Pyro

    Pada pri kliknuti na tlacitko
    Zdravim,
    postupoval som (skoro) presne podla navodu a ako dam aplikaciu do mojho telefonu (HTC Desire C – 4.0.3 android) a stlacim tlacitko, tak to padne. Napise ze aplikacia prestala pracovat. Napise to ale iba v pripade, ked tam zadam nejake cislo. Ak to necham prazdne, tak napise ze som zadal zle cislo. Skusal som aj zdrojaky ktore ste tu zavesili (mimochodom ked si ich dam importovat do Eclipse, tak mi asi v kazdom riadku pise chybu tak som sa to rozhodol prekopirovat do noveho projektu a uz to ide – nenadavajte mi prosim :) ) ale v tom mi to robi rovnaku chybu. Nenapada vas v com by to mohlo byt ? Ja si myslim, ze tam bude nieco nekompatibilne s novsim androidom ale to je len moj nazor. Za odpoved vopred dakujem

    1. Pyro

      Re: Pada pri kliknuti na tlacitko
      ospravedlnujem sa za spam… uz mi to ide.. mal som chybicku v manifeste kt. som si nevsimol a uz mi to ide. Kazdopadne by ma zaujimalo, ako importovat vase projekty tak, aby isli

  14. karel.cervicek.7

    Nechápu proč tak složitě
    Aplikace funguje jen v případě, že se plní informAboutInvalidAge, avšak když vyplním věk, tak padá.
    Za druhé , já nemůžu pochopit proč to řešit přes 2 activity. Nechápu proč dělat další třídu pro zobrazení výsledku. Možná je asi problém v tom, že byhc si měl projet OOP v jave.
    Jinak zkoušel jsem z toho udělat aplikaci , která sčítá dvě čísla v 1 activitě, ale taky padá.
    chybu to neukazuje a vše jsem překonvertoval.

    public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Toast.makeText(this, „neco napis“,
    Toast.LENGTH_LONG).show();
    }

    public void buttonClicked(View button) {
    int prvni = getprvni();
    int druhy = getprvni();
    /*if(age < 0){
    informAboutInvalidAge();
    } else{
    startAgeActivity(age);
    }*/
    int vysledek = prvni + druhy;
    String text = getString(vysledek);
    Toast.makeText(this, text ,Toast.LENGTH_SHORT).show();
    }

    protected void informAboutInvalidAge(){
    Toast.makeText(this, "spatny vek" ,Toast.LENGTH_SHORT).show();
    EditText ageInput = ((EditText)findViewById(R.id.prvni));
    ageInput.setText("");
    ageInput.requestFocus();
    }

    protected int getprvni(){

    EditText cislo = ((EditText)findViewById(R.id.prvni));
    String intcislo = cislo.getText().toString();
    int Cislo = 0;
    try{
    Cislo = Integer.parseInt(intcislo);
    }catch(NumberFormatException e){

    }
    return Cislo;
    }
    protected int getdruhy(){

    EditText cislo = ((EditText)findViewById(R.id.druhy));
    String intcislo = cislo.getText().toString();
    int Cislo = 0;
    try{
    Cislo = Integer.parseInt(intcislo);
    }catch(NumberFormatException e){

    }
    return Cislo;
    }

    }

  15. Robo

    Precvicenie
    Prosim vas ako pridam do druhej activity napr dva TextView aby som mohol do jedneho dat Vek a do druheho Meno? Ked tam mam len jeden tak sa to navzajom prepisuje najprv sa zobrazi meno a hned sa to prepise na vek a to meno tam uz nevidno. Dakujem.

  16. Libor

    Nezadaný věk
    Nemyslím že ošetřit věk výjimkou, jak píšeš, je lepší řešení. Výjimky jsou náročné a navíc tady to není nutné, protože věk 0 nedává smysl. Tudíž pokud jsi použil malý int, který má jako default 0 (nic nebylo zadano) nebo někdo záda věk 0, je to stejně špatný vstup.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3675