Desenvolvimento de dispositivo personalizado

Esta página explica várias tarefas que podem ser necessárias se você estiver configurando um build para seu próprio dispositivo.

Criar uma configuração de atualização personalizada

As instruções do fastboot são definidas em um artefato chamado fastboot-info.txt. Se você criar vários destinos, terá vários arquivos fastboot-info.txt no $OUT_DIR. E $ANDROID_PRODUCT_OUT apontará para o destino mais atual que você criar. Esta página contém uma lista de tarefas para o fastboot executar e pode ser gerada novamente usando m fastboot_info. Uma lógica de atualização personalizada pode ser introduzida ao modificar o arquivo fastboot-info.txt.

O arquivo fastboot-info.txt oferece suporte a estes comandos:

  • flash %s: atualiza uma partição específica. Argumentos opcionais incluem --slot-other,filename_path, and--apply-vbmeta`.
  • update-super: atualiza a super partição.
  • if-wipe: executa condicionalmente algum outro componente se uma exclusão permanente for especificada.
  • erase %s: apaga uma partição específica e só pode ser usado em conjunto com if-wipe. Por exemplo, if-wipe erase cache.

Determinar o estado de bloqueio de atualização

Se você estiver criando um daemon de flashboot personalizado (flashbootd) para um dispositivo, é preciso ter acesso ao carregador de inicialização e ao estado de bloqueio dele. O getFlashLockState() @SystemApi transmite o estado do carregador de inicialização e a API do sistema PersistentDataBlockManager.getFlashLockState() retorna o status de bloqueio do carregador de inicialização em dispositivos compatíveis.

Valor de retorno Condições
FLASH_LOCK_UNKNOWN Retornado apenas por dispositivos que passaram por upgrade para o Android 7.x ou versões mais recentes e que não suportavam anteriormente as mudanças do carregador de inicialização necessárias para receber o status de bloqueio de atualização, caso oferecessem suporte à capability de bloqueio/desbloqueio dessa atualização.
  • Dispositivos novos com o Android 7.x ou versões mais recentes precisam ter um estado FLASH_LOCK_LOCKED ou FLASH_LOCK_UNLOCKED.
  • Dispositivos que passaram por upgrade para o Android 7.x ou versões mais recentes e que não oferecem suporte à capability de desbloqueio/bloqueio de atualização precisam retornar o estado FLASH_LOCK_LOCKED.
FLASH_LOCK_LOCKED Retornado por qualquer dispositivo que não oferece suporte ao bloqueio/desbloqueio de atualização (ou seja, um dispositivo que esteja sempre bloqueado) ou qualquer dispositivo com suporte ao bloqueio/desbloqueio de atualização e que esteja no estado bloqueado.
FLASH_LOCK_UNLOCKED Retornado por qualquer dispositivo com suporte ao bloqueio/desbloqueio de atualização flash e que esteja no estado desbloqueado.

Os fabricantes precisam testar os valores retornados pelos dispositivos com carregadores de inicialização bloqueados e desbloqueados. Por exemplo, o AOSP contém uma implementação de referência que retorna um valor baseado na propriedade de inicialização ro.boot.flash.locked. O código de exemplo pode ser encontrado nos diretórios abaixo:

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java