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 — em conjunto com todos os arquivos de dados e recursos — 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 — 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 — 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 — 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 — atividades, servios 192 e receptores de transmisso — 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 — 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 — 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 <?xml version="1.0" encoding="utf-8"?> 275 <manifest ... > 276 <application android:icon="@drawable/app_icon.png" ... > 277 <activity android:name="com.example.project.ExampleActivity" 278 android:label="@string/example_label" ... > 279 </activity> 280 ... 281 </application> 282 </manifest></pre> 283 284 <p>No elemento <code><a 285 href="{@docRoot}guide/topics/manifest/application-element.html"><application></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"><activity></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"><activity></a></code> 299 para atividades</li> 300 <li>Elementos <code><a 301 href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> 302 para servios</li> 303 <li>Elementos <code><a 304 href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code> 305 para receptores de transmisso</li> 306 <li>Elementos <code><a 307 href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></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 <intent-filter>}</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 <manifest ... > 348 ... 349 <application ... > 350 <activity android:name="com.example.project.ComposeEmailActivity"> 351 <intent-filter> 352 <action android:name="android.intent.action.SEND" /> 353 <data android:type="*/*" /> 354 <category android:name="android.intent.category.DEFAULT" /> 355 </intent-filter> 356 </activity> 357 </application> 358 </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 <manifest ... > 386 <uses-feature android:name="android.hardware.camera.any" 387 android:required="true" /> 388 <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" /> 389 ... 390 </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 — 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 — fornecendo conjuntos de recursos alternativos — 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