Home | History | Annotate | Download | only in components
      1 page.title=Fundamentos de aplicativos
      2 @jd:body
      3 
      4 <div id="qv-wrapper">
      5 <div id="qv">
      6 
      7 <h2>Neste documento</h2>
      8 <ol>
      9 <li><a href="#Components">Componentes de aplicativo</a>
     10   <ol>
     11     <li><a href="#ActivatingComponents">Ativao de componentes</a></li>
     12   </ol>
     13 </li>
     14 <li><a href="#Manifest">O arquivo de manifesto</a>
     15   <ol>
     16     <li><a href="#DeclaringComponents">Declarao de componentes</a></li>
     17     <li><a href="#DeclaringRequirements">Declarao de requisitos do aplicativo</a></li>
     18   </ol>
     19 </li>
     20 <li><a href="#Resources">Recursos do aplicativo</a></li>
     21 </ol>
     22 </div>
     23 </div>
     24 
     25 <p>Os aplicativos do Android so programados em linguagem de programao Java. As ferramentas Android SDK compilam
     26 o cdigo &mdash; em conjunto com todos os arquivos de dados e recursos &mdash; em um APK, que  o <i>pacote do Android</i>,
     27 um arquivo de arquivamento com sufixo {@code .apk}. Os arquivos de APK contm todo o contedo
     28 de um aplicativo do Android e so os arquivos que os dispositivos desenvolvidos para Android usam para instalar o aplicativo.</p>
     29 
     30 <p>Depois de instalado em um dispositivo, cada aplicativo do Android  ativado em sua prpria rea de segurana: </p>
     31 
     32 <ul>
     33  <li>O sistema operacional Android  um sistema Linux multiusurio em que cada aplicativo
     34  um usurio diferente.</li>
     35 
     36 <li>Por padro, o sistema atribui a cada aplicativo um ID de usurio do Linux exclusivo (o ID  usado somente
     37 pelo sistema e  desconhecido para o aplicativo). O sistema define permisses para todos os arquivos
     38 em um aplicativo, de modo que somente o ID de usurio atribudo quele aplicativo pode acess-los. </li>
     39 
     40 <li>Cada processo tem sua prpria mquina virtual (VM), portanto o cdigo de um aplicativo  executado isoladamente
     41 de outros aplicativos.</li>
     42 
     43 <li>Por padro, cada aplicativo  executado em seu prprio processo Linux. O Android inicia o processo quando  preciso
     44 executar algum componente do aplicativo; em seguida, encerra-o quando no mais 
     45 necessrio ou quando o sistema precisa recuperar memria para outros aplicativos.</li>
     46 </ul>
     47 
     48 <p>Assim, o sistema Android implementa o <em>princpio do privilgio mnimo</em>. Ou seja,
     49 cada aplicativo, por padro, tem acesso somente aos componentes necessrios para a execuo do seu trabalho
     50 e nada mais. Isso cria um ambiente muito seguro em que o aplicativo no pode acessar partes
     51 do sistema para o qual no tem permisso.</p>
     52 
     53 <p>No entanto, sempre existe uma maneira de um aplicativo compartilhar dados com outros aplicativos
     54 e acessar servios do sistema:</p>
     55 
     56 <ul>
     57   <li> impossvel fazer com que dois aplicativos compartilhem o mesmo ID de usurio do Linux, caso em que
     58 eles so capazes de acessar os arquivos um do outro.  Para preservar os recursos do sistema, os aplicativos com o mesmo
     59 ID de usurio tambm podem ser combinados para serem executados no mesmo processo Linux e compartilhar a mesma VM
     60 (tambm  preciso atribuir o mesmo certificado aos aplicativos).</li>
     61   <li>Um aplicativo pode solicitar permisso para acessar dados de dispositivo como
     62 contatos do usurio, mensagens SMS, o sistema montvel (carto SD), cmera, Bluetooth etc. Todas
     63 as permisses de aplicativo devem ser concedidas pelo usurio no momento da instalao.</li>
     64 </ul>
     65 
     66 <p>Essas so as informaes bsicas de como um aplicativo do Android existe dentro do sistema. O restante
     67 deste documento apresenta o leitor a:</p>
     68 <ul>
     69   <li>Componentes fundamentais de estrutura que definem o aplicativo.</li>
     70   <li>O arquivo de manifesto em que os componentes so declarados e os recursos de dispositivo necessrios
     71 ao aplicativo.</li>
     72   <li>Recursos separados do cdigo do aplicativo que permitem
     73 otimizar o comportamento de uma variedade de configuraes de dispositivo.</li>
     74 </ul>
     75 
     76 
     77 
     78 <h2 id="Components">Componentes de aplicativo</h2>
     79 
     80 <p>Os componentes de aplicativo so os blocos de construo fundamentais de um aplicativo do Android.
     81 Cada componente  um ponto diferente pelo qual o sistema pode entrar no aplicativo. Nem todos
     82 os componentes so pontos de entrada reais para o usurio e alguns dependem uns dos outros, mas cada um existe
     83 como uma entidade independente e desempenha uma funo especfica &mdash; cada um  um bloco de construo exclusivo
     84 que ajuda a definir o comportamento geral do aplicativo.</p>
     85 
     86 <p>H quatro tipos diferentes de componentes de aplicativo. Cada tipo tem uma finalidade distinta
     87 e tem um ciclo de vida especfico que define a forma pela qual o componente  criado e destrudo.</p>
     88 
     89 <p>A seguir apresentam-se os quatro tipos de componentes de aplicativos:</p>
     90 
     91 <dl>
     92 
     93 <dt><b>Atividades</b></dt>
     94 
     95 <dd>As <i>atividades</i> representam uma tela nica com uma interface do usurio. Por exemplo:
     96 um aplicativo de e-mails pode ter uma atividade que mostra uma lista de novos
     97 e-mails, outra atividade que compe um e-mail e outra ainda que l e-mails. Embora
     98 essas atividades funcionem juntas para formar uma experincia de usurio coesa no aplicativo de e-mails,
     99 elas so independentes entre si. Portanto, um aplicativo diferente pode iniciar qualquer uma
    100 dessas atividades (se o aplicativo de e-mails permitir). Por exemplo: um aplicativo de cmera pode iniciar
    101 a atividade no aplicativo de e-mail que compe o novo e-mail para que o usurio compartilhe uma foto.
    102 
    103 <p>Uma atividade  implementada como uma subclasse de {@link android.app.Activity}  saiba mais sobre isso
    104 no guia do desenvolvedor
    105 <a href="{@docRoot}guide/components/activities.html">Atividades</a>.</p>
    106 </dd>
    107 
    108 
    109 <dt><b>Servios</b></dt>
    110 
    111 <dd>Os <i>servios</i> so componentes executados em segundo plano para realizar operaes
    112 de execuo longa ou para realizar trabalho para processos remotos. Eles
    113 no apresentam uma interface do usurio. Por exemplo: um servio pode tocar msica em segundo plano
    114 enquanto o usurio est em um aplicativo diferente ou buscar dados na rede sem bloquear
    115 a interao do usurio com uma atividade. Outro componente, como uma atividade, pode iniciar
    116 o servio e deix-lo executar ou vincular-se a ele para interagir.
    117 
    118 <p>Um servio  implementado como uma subclasse de {@link android.app.Service}  saiba mais sobre isso
    119 no guia do desenvolvedor
    120 <a href="{@docRoot}guide/components/services.html">Servios</a>.</p>
    121 </dd>
    122 
    123 
    124 <dt><b>Provedores de contedo</b></dt>
    125 
    126 <dd>Os <i>provedores de contedo</i> gerenciam um conjunto compartilhado de dados do aplicativo.  possvel armazenar os dados
    127 no sistema de arquivos, em um banco de dados SQLite ou em qualquer local de armazenamento persistente
    128 que o aplicativo possa acessar. Por meio do provedor de contedo, outros aplicativos podem consultar ou at modificar
    129 os dados (se o provedor de contedo permitir). Por exemplo: o sistema Android oferece um provedor
    130 de contedo que gerencia as informaes de contato do usurio. Assim, qualquer aplicativo
    131 com as permisses adequadas pode consultar parte do provedor de contedo (como {@link
    132 android.provider.ContactsContract.Data}) para ler e gravar informaes sobre uma pessoa especfica.
    133 
    134 <p>Os provedores de contedo so teis para ler e gravar dados privados
    135 no aplicativo e no compartilhados. Por exemplo: o exemplo de aplicativo <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> usa
    136 um provedor de contedo para salvar notas.</p>
    137 
    138 <p>Um provedor de contedo  implementado como uma subclasse de {@link android.content.ContentProvider}
    139 e precisa implementar um conjunto padro de APIs que permitem a outros aplicativos
    140 realizar transaes. Para obter mais informaes, consulte o guia de desenvolvedor
    141 <a href="{@docRoot}guide/topics/providers/content-providers.html">Provedores de contedo</a>.</p>
    142 </dd>
    143 
    144 
    145 <dt><b>Receptores de transmisso</b></dt>
    146 
    147 <dd>Os <i>receptores de transmisso</i> so componentes que respondem a anncios de transmisso
    148 por todo o sistema.  Muitas transmisses se originam do sistema &mdash; por exemplo, uma transmisso que anuncia
    149 que uma tela foi desligada, a bateria est baixa ou uma tela foi capturada.
    150 Os aplicativos tambm podem iniciar transmisses &mdash; por exemplo, para comunicar a outros dispositivos
    151 que alguns dados foram baixados no dispositivo e esto disponveis para uso. Embora os receptores
    152 de transmisso no exibam nenhuma interface do usurio, eles podem <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">criar uma notificao na barra de status</a>
    153 para alertar ao usurio quando ocorre uma transmisso. Mais comumente, no entanto, um receptor de transmisso
    154  somente um "portal" para outros componentes e realiza uma quantidade mnima de trabalho. Por
    155 exemplo: ele pode iniciar um servio para executar um trabalho baseado no evento.
    156 
    157 <p>Os receptores de transmisso so implementados como subclasses de {@link android.content.BroadcastReceiver}
    158 e cada transmisso  entregue como um objeto {@link android.content.Intent}. Para obter mais informaes,
    159 consulte a classe {@link android.content.BroadcastReceiver}.</p>
    160 </dd>
    161 
    162 </dl>
    163 
    164 
    165 
    166 <p>Um aspecto exclusivo do projeto do sistema Android  que qualquer aplicativo pode iniciar
    167 um componente de outro aplicativo. Por exemplo: se voc quiser que o usurio capture
    168 uma foto com a cmera do dispositivo, provavelmente haver outro aplicativo que faz isso
    169 e o seu aplicativo poder us-lo, ou seja, no ser necessrio desenvolver uma atividade para capturar uma foto. No 
    170 necessrio incorporar nem mesmo vincul-lo do aplicativo da cmera ao cdigo.
    171 Em vez disso, basta iniciar a atividade no aplicativo da cmera que captura
    172 uma foto. Quando concluda, a foto at retorna ao aplicativo em questo para ser usada. Para o usurio,
    173 parece que a cmera  realmente parte do aplicativo.</p>
    174 
    175 <p>Quando o sistema inicia um componente, ele inicia o processo daquele aplicativo (se ele j
    176 no estiver em execuo) e instancia as classes necessrias para o componente. Por exemplo: se o aplicativo
    177 iniciar a atividade no aplicativo da cmera que captura uma foto, aquele aplicativo
    178  executado no processo que pertence ao aplicativo da cmera e no no processo do aplicativo.
    179 Portanto, ao contrrio dos aplicativos na maioria dos outros sistemas, os aplicativos do Android no tm um ponto
    180 de entrada nico (no h a funo {@code main()}, por exemplo).</p>
    181 
    182 <p>Como o sistema executa cada aplicativo em um processo separado com permisses de arquivo
    183 que restringem o acesso a outros aplicativos, o aplicativo no pode ativar diretamente um componente
    184 a partir de outro aplicativo. No entanto, o sistema Android pode. Portanto, para ativar um componente
    185 em outro aplicativo,  preciso enviar uma mensagem ao sistema que especifique a <em>inteno</em>
    186 de iniciar um componente especfico. Em seguida, o sistema ativa o componente.</p>
    187 
    188 
    189 <h3 id="ActivatingComponents">Ativao de componentes</h3>
    190 
    191 <p>Trs dos quatro tipos de componente &mdash; atividades, servios
    192 e receptores de transmisso &mdash; so ativados por uma mensagem assncrona chamada <em>inteno</em>.
    193 As intenes vinculam componentes individuais entre si em tempo de execuo (como
    194 mensageiros que solicitam uma ao de outros componentes), seja o componente pertencente
    195 ao aplicativo ou no.</p>
    196 
    197 <p>A inteno  criada com um objeto {@link android.content.Intent}, que define uma mensagem
    198 para ativar um componente especfico ou um <em>tipo</em> especfico de componente &mdash; as intenes
    199 podem ser explcitas ou implcitas, respectivamente.</p>
    200 
    201 <p>Para atividades e servios, as intenes definem a ao a executar (por exemplo, "exibir" ou
    202 "enviar" algo) e podem especificar a URI dos dados usados na ao (entre outras coisas
    203 que o componente a iniciar precisa saber). Por exemplo: uma inteno pode transmitir uma solicitao
    204 de uma atividade para exibir uma imagem ou abrir uma pgina da web. Em alguns casos,  preciso iniciar
    205 uma atividade para receber um resultado; nesse caso, a atividade tambm retorna
    206 o resultado em um {@link android.content.Intent} (por exemplo,  possvel emitir uma inteno para
    207 que o usurio selecione um contato pessoal e o retorne a voc &mdash; a inteno de retorno contm
    208 uma URI que aponta para o contato selecionado).</p>
    209 
    210 <p>Para receptores de transmisso, a inteno simplesmente define
    211 o anncio que est sendo transmitido (por exemplo, uma transmisso para indicar que a bateria do dispositivo est acabando
    212 contm uma string de ao conhecida que indica "nvel baixo da bateria").</p>
    213 
    214 <p>O outro tipo de componente, o provedor de contedo, no  ativado por intenes. Em vez disso,
    215 ele  ativado por uma solicitao de um {@link android.content.ContentResolver}. O resolvedor
    216 de contedo manipula todas as transaes diretas com o provedor de contedo para que o componente
    217 que executa as transaes com o provedor no precise e, em vez disso, chama os mtodos no objeto {@link
    218 android.content.ContentResolver}. Isso deixa uma camada de abstrao entre o provedor
    219 de contedo e o componente que solicita informaes (por segurana).</p>
    220 
    221 <p>H dois mtodos separados para ativar cada tipo de componente:</p>
    222 <ul>
    223   <li> possvel iniciar uma atividade (ou dar-lhe algo novo para fazer)
    224 passando uma {@link android.content.Intent} a {@link android.content.Context#startActivity
    225 startActivity()} ou {@link android.app.Activity#startActivityForResult startActivityForResult()}
    226 (para que, quando desejado, a atividade retorne um resultado).</li>
    227   <li> possvel iniciar um dispositivo (ou dar novas instrues a um servio em andamento)
    228 passando uma {@link android.content.Intent} a {@link android.content.Context#startService
    229 startService()}. Ou ento,  possvel vincular ao servio passando uma{@link android.content.Intent}
    230 a {@link android.content.Context#bindService bindService()}.</li>
    231   <li> possvel iniciar uma transmisso passando uma{@link android.content.Intent} a mtodos como
    232 {@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}, {@link
    233 android.content.Context#sendOrderedBroadcast(Intent, String) sendOrderedBroadcast()} ou {@link
    234 android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</li>
    235   <li> possvel iniciar uma consulta a um provedor de contedo chamando {@link
    236 android.content.ContentProvider#query query()} em um {@link android.content.ContentResolver}.</li>
    237 </ul>
    238 
    239 <p>Para obter mais informaes sobre intenes, consulte o documento
    240 <a href="{@docRoot}guide/components/intents-filters.html">Intenes e filtros de intenes</a>. Veja mais informaes sobre a ativao de componentes especficos
    241 nos seguintes documentos: <a href="{@docRoot}guide/components/activities.html">Atividades</a>, <a href="{@docRoot}guide/components/services.html">Servios</a>, {@link
    242 android.content.BroadcastReceiver} e <a href="{@docRoot}guide/topics/providers/content-providers.html">Provedores de contedo</a>.</p>
    243 
    244 
    245 <h2 id="Manifest">O arquivo de manifesto</h2>
    246 
    247 <p>Antes de o sistema Android iniciar um componente de aplicativo,  preciso ler o arquivo {@code AndroidManifest.xml}
    248 (o arquivo de "manifesto")
    249 do aplicativo para que o sistema saiba se o componente existe. O aplicativo precisa declarar todos os seus componentes nesse arquivo, que deve estar na raiz
    250 do diretrio do projeto do aplicativo.</p>
    251 
    252 <p>O manifesto faz outras coisas alm de declarar os componentes do aplicativo,
    253 por exemplo:</p>
    254 <ul>
    255   <li>Identifica todas as permisses do usurio de que o aplicativo precisa, como acesso  internet
    256 ou acesso de somente leitura aos contatos do usurio.</li>
    257   <li>Declara o <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">nvel de API</a> mnimo
    258 exigido pelo aplicativo com base nas APIs que o aplicativo usa.</li>
    259   <li>Declara os recursos de hardware e software usados ou exigidos pelo aplicativo, como cmera,
    260 servios de bluetooth ou tela multitoque.</li>
    261   <li>As bibliotecas de API s quais o aplicativo precisa vincular-se (outras alm das APIs
    262 de estrutura do Android), como a <a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">biblioteca
    263 Google Maps</a>.</li>
    264   <li>E outros.</li>
    265 </ul>
    266 
    267 
    268 <h3 id="DeclaringComponents">Declarao de componentes</h3>
    269 
    270 <p>A principal tarefa do manifesto  informar ao sistema os componentes do aplicativo. Por
    271 exemplo: um arquivo de manifesto pode declarar uma atividade da seguinte forma: </p>
    272 
    273 <pre>
    274 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    275 &lt;manifest ... &gt;
    276     &lt;application android:icon="@drawable/app_icon.png" ... &gt;
    277         &lt;activity android:name="com.example.project.ExampleActivity"
    278                   android:label="@string/example_label" ... &gt;
    279         &lt;/activity&gt;
    280         ...
    281     &lt;/application&gt;
    282 &lt;/manifest&gt;</pre>
    283 
    284 <p>No elemento <code><a
    285 href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
    286 , o atributo {@code android:icon} aponta para recursos de um cone que identifica
    287 o aplicativo.</p>
    288 
    289 <p>No elemento <code><a
    290 href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>,
    291 o atributo {@code android:name} especifica o nome da classe totalmente qualificada da subclasse de {@link
    292 android.app.Activity} e o atributo {@code android:label} especifica uma string
    293 a usar como a etiqueta da atividade visvel ao usurio.</p>
    294 
    295 <p> preciso declarar todos os componentes desta forma:</p>
    296 <ul>
    297   <li>Elementos <code><a
    298 href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
    299 para atividades</li>
    300   <li>Elementos <code><a
    301 href="{@docRoot}guide/topics/manifest/service-element.html">&lt;service&gt;</a></code>
    302 para servios</li>
    303   <li>Elementos <code><a
    304 href="{@docRoot}guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></code>
    305 para receptores de transmisso</li>
    306   <li>Elementos <code><a
    307 href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code>
    308 para provedores de contedo</li>
    309 </ul>
    310 
    311 <p>Atividades, servios e provedores de contedo includos na fonte, mas no declarados
    312 no manifesto, no ficam visveis para o sistema e, consequentemente, podem no ser executados.  No entanto, receptores
    313 de transmisso
    314 podem ser declarados no manifesto dinamicamente no cdigo (como objetos
    315 {@link android.content.BroadcastReceiver}) e registrados no sistema chamando-se
    316 {@link android.content.Context#registerReceiver registerReceiver()}.</p>
    317 
    318 <p>Para obter mais informaes sobre a estrutura do arquivo de manifesto de aplicativos, consulte a documentao
    319 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">O arquivo AndroidManifest.xml</a>. </p>
    320 
    321 
    322 
    323 <h3 id="DeclaringComponentCapabilities">Declarao de recursos de componentes</h3>
    324 
    325 <p>Conforme abordado acima, em <a href="#ActivatingComponents">Ativao de componentes</a>,  possvel usar
    326 uma {@link android.content.Intent} para iniciar atividades, servios e receptores de transmisso. Isso pode ser feito
    327 nomeando-se explicitamente o componente-alvo (usando o nome da classe do componente) na inteno. No entanto,
    328 a verdadeira fora das intenes reside no conceito de <em>intenes implcitas</em>. As intenes implcitas
    329 descrevem simplesmente o tipo de ao a executar (e, opcionalmente, os dados em que
    330 a ao deve ser executada) e permitem ao sistema encontrar e iniciar um componente no dispositivo que pode executar
    331 a ao. Se houver mais de um componente que possa executar a ao descrita
    332 pela inteno, o usurio selecionar qual deles usar.</p>
    333 
    334 <p>Para o sistema identificar os componentes que podem responder a uma inteno, compara-se
    335 a inteno recebida com os <i>filtros de intenes</i> fornecidos no arquivo de manifesto de outros aplicativos
    336 do dispositivo.</p>
    337 
    338 <p>Ao declarar uma atividade no manifesto do aplicativo, pode-se incluir
    339 filtros de intenes que declarem os recursos da atividade para que ela responda
    340 a intenes de outros aplicativos. Para declarar um filtro de intenes no componentes,
    341 adiciona-se um elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
    342 &lt;intent-filter&gt;}</a> como filho do elemento de declarao do componente.</p>
    343 
    344 <p>Por exemplo: se voc estiver programando um aplicativo de e-mail com uma atividade de compor um novo e-mail,
    345  possvel declarar um filtro de intenes para responder a intenes "enviar" (para enviar um novo e-mail), assim:</p>
    346 <pre>
    347 &lt;manifest ... >
    348     ...
    349     &lt;application ... &gt;
    350         &lt;activity android:name="com.example.project.ComposeEmailActivity">
    351             &lt;intent-filter>
    352                 &lt;action android:name="android.intent.action.SEND" />
    353                 &lt;data android:type="*/*" />
    354                 &lt;category android:name="android.intent.category.DEFAULT" />
    355             &lt;/intent-filter>
    356         &lt;/activity>
    357     &lt;/application&gt;
    358 &lt;/manifest>
    359 </pre>
    360 
    361 <p>Em seguida, se outro aplicativo criar uma inteno com a ao {@link
    362 android.content.Intent#ACTION_SEND} e pass-la para {@link android.app.Activity#startActivity
    363 startActivity()}, o sistema poder iniciar a atividade de forma que o usurio possa rascunhar e enviar
    364 um e-mail.</p>
    365 
    366 <p>Para obter mais informaes sobre filtros de intenes, consulte o documento <a href="{@docRoot}guide/components/intents-filters.html">Intenes e filtros de intenes</a>.
    367 </p>
    368 
    369 
    370 
    371 <h3 id="DeclaringRequirements">Declarao de requisitos do aplicativo</h3>
    372 
    373 <p>Existem vrios dispositivos desenvolvidos para Android e nem todos apresentam os mesmos
    374 recursos e caractersticas. Para evitar que o aplicativo seja instalado em dispositivos
    375 que no contenham os recursos que o aplicativo necessita,  importante definir um perfil
    376 para os tipos de dispositivo compatveis com o aplicativo.  preciso declarar os requisitos de dispositivo e software
    377 no arquivo de manifesto. A maior parte dessas declaraes  somente informativa e o sistema no as l,
    378 mas servios externos, como o Google Play, as leem para oferecer uma filtragem
    379 aos usurios quando buscam esses aplicativos para seu dispositivo.</p>
    380 
    381 <p>Por exemplo: se o aplicativo exige uma cmera e usa APIs introduzidas no Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API de nvel</a> 7),
    382 deve-se declarar esses requisitos no arquivo de manifesto da seguinte forma:</p> 
    383 
    384 <pre>
    385 &lt;manifest ... >
    386     &lt;uses-feature android:name="android.hardware.camera.any"
    387                   android:required="true" />
    388     &lt;uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    389     ...
    390 &lt;/manifest>
    391 </pre>
    392 
    393 <p>Assim, dispositivos que <em>no</em> tenham cmera e tenham
    394 verso Android <em>anterior</em> a 2.1 no podero instalar o aplicativo a partir do Google Play.</p>
    395 
    396 <p>No entanto, tambm  possvel declarar que o aplicativo usa a cmera como recurso 
    397 <em>no obrigatrio</em>. Nesse caso, o aplicativo precisa definir o atributo <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a>
    398  como {@code "false"} e verificar em tempo de execuo
    399 se o dispositivo tem cmera e desativar os recursos da cmera conforme o necessrio.</p>
    400 
    401 <p>Veja mais informaes sobre o gerenciamento da compatibilidade do aplicativo com diferentes dispositivos
    402 no documento <a href="{@docRoot}guide/practices/compatibility.html">Compatibilidade
    403 do dispositivo</a>.</p>
    404 
    405 
    406 
    407 <h2 id="Resources">Recursos do aplicativo</h2>
    408 
    409 <p>Os aplicativos Android so compostos por mais do que somente cdigos &mdash; eles requerem recursos
    410 separados do cdigo-fonte, como imagens, arquivos de udio e tudo o que se relaciona
    411 com a apresentao visual do aplicativo. Por exemplo: deve-se definir animaes, menus, estilos, cores
    412 e o layout das interfaces do usurio da atividade com arquivos XML. O uso de recursos de aplicativo facilita
    413 a atualizao de diversas caractersticas do aplicativo sem a necessidade de modificar
    414 o cdigo e &mdash; fornecendo conjuntos de recursos alternativos &mdash; permite otimizar o aplicativo
    415 para diversas configuraes de dispositivo (como idiomas e tamanhos de tela diferentes).</p>
    416 
    417 <p>Para todo recurso includo no projeto Android, as ferramentas de programao SDK definem
    418 um ID inteiro exclusivo que o programador pode usar para referenciar o recurso do cdigo do aplicativo
    419 ou de outros recursos definidos no XML. Por exemplo: se o aplicativo contiver um arquivo de imagem de nome {@code
    420 logo.png} (salvo no diretrio {@code res/drawable/}), as ferramentas de SDK geraro um ID de recurso
    421 chamado {@code R.drawable.logo}, que pode ser usado para referenciar a imagem e inseri-la
    422 na interface do usurio.</p>
    423 
    424 <p>Um dos aspectos mais importantes de fornecer recursos separados do cdigo-fonte
    425  a capacidade de fornecer recursos alternativos para diferentes configuraes
    426 de dispositivo. Por exemplo: ao definir strings de IU em XML,  possvel converter as strings em outros
    427 idiomas e salv-las em arquivos separados. Em seguida, com base em um <em>qualificador</em> de idioma
    428 acrescentado ao nome do diretrio do recurso (como {@code res/values-fr/} para valores
    429 de string em francs) e a configurao de idioma do usurio, o sistema Android aplica as strings de idioma adequadas
    430  IU.</p>
    431 
    432 <p>O Android aceita vrios <em>qualificadores</em> para recursos alternativos. O qualificador
    433  uma string curta includa no nome dos diretrios de recurso para definir
    434 a configurao de dispositivo em que esses recursos sero usados. Outro exemplo:
    435 deve-se criar diferentes layouts para as atividades conforme a orientao
    436 e o tamanho da tela do dispositivo. Por exemplo: quando a tela do dispositivo est em orientao
    437 retrato (vertical), pode ser desejvel um layout com botes na vertical, mas, quando a tela est em orientao
    438 paisagem (horizontal), os botes devem estar alinhados horizontalmente. Para alterar o layout
    439 conforme a orientao, pode-se definir dois layouts diferentes e aplicar o qualificador
    440 adequado ao nome do diretrio de cada layout. Em seguida, o sistema aplica automaticamente o layout adequado
    441 conforme a orientao atual do dispositivo.</p>
    442 
    443 <p>Para obter mais informaes sobre os diferentes tipos de recursos a incluir no aplicativo
    444 e como criar recursos alternativos para diferentes configuraes de dispositivo, leia <a href="{@docRoot}guide/topics/resources/providing-resources.html">Como fornecer recursos</a>.</p>
    445 
    446 
    447 
    448 <div class="next-docs">
    449 <div class="col-6">
    450   <h2 class="norule">Continue lendo sobre:</h2>
    451   <dl>
    452     <dt><a href="{@docRoot}guide/components/intents-filters.html">Intenes e filtros de intenes</a>
    453     </dt>
    454     <dd>Informaes sobre o uso de APIs {@link android.content.Intent} para
    455 ativar componentes de aplicativos, como atividades e servios, e como disponibilizar componentes
    456 de aplicativo para uso em outros aplicativos.</dd>
    457     <dt><a href="{@docRoot}guide/components/activities.html">Atividades</a></dt>
    458     <dd>Informaes sobre a criao de uma instncia da classe {@link android.app.Activity},
    459 que permite uma tela diferente no aplicativo com uma interface do usurio.</dd>
    460     <dt><a href="{@docRoot}guide/topics/resources/providing-resources.html">Como fornecer recursos</a></dt>
    461     <dd>Informaes sobre a estrutura de aplicativos Android para recursos de aplicativo separados do cdigo-fonte
    462 , inclusive como fornecer recursos alternativos para configuraes
    463 de dispositivo especficas.
    464     </dd>
    465   </dl>
    466 </div>
    467 <div class="col-6">
    468   <h2 class="norule">Voc tambm pode se interessar por:</h2>
    469   <dl>
    470     <dt><a href="{@docRoot}guide/practices/compatibility.html">Compatibilidade do dispositivo</a></dt>
    471     <dd>Informaes sobre como o Android funciona em diferentes tipos de dispositivo e uma introduo
    472 a como otimizar o aplicativo para cada dispositivo ou restringir a disponibilidade
    473 a diferentes dispositivos.</dd>
    474     <dt><a href="{@docRoot}guide/topics/security/permissions.html">Permisses do sistema</a></dt>
    475     <dd>Informaes sobre como o aplicativo restringe o acesso do Android a determinadas APIs sem um
    476 sistema de permisso que exija o consentimento do usurio para que o aplicativo use essas APIs.</dd>
    477   </dl>
    478 </div>
    479 </div>
    480 
    481