Você carregou um APK ou Android App Bundle que foi assinado no modo de depuração Flutter: o que significa e como corrigir?
Se você estiver desenvolvendo um aplicativo para Android usando o Flutter, talvez tenha encontrado esta mensagem de erro ao tentar fazer upload de seu aplicativo para o Google Play:
you uploaded an apk or android app bundle that was signed in debug mode flutter
Você carregou um APK ou Android App Bundle assinado no modo de depuração. Você precisa assinar seu APK ou Android App Bundle no modo de lançamento.
O que isso significa e como você pode corrigi-lo? Neste artigo, explicaremos o que é Flutter, quais são as diferenças entre APK e Android App Bundle, quais são as diferenças entre o modo de depuração e o modo de lançamento, por que você não deve fazer upload de um aplicativo assinado no modo de depuração e como fazer upload de um aplicativo assinado no modo de lançamento.
O que é o Flutter e por que usá-lo para o desenvolvimento de aplicativos?
Flutter é uma estrutura de código aberto do Google para criar aplicativos multiplataforma belos e compilados nativamente a partir de uma única base de código. O código Flutter é compilado para código de máquina ARM ou Intel, bem como JavaScript, para desempenho rápido em qualquer dispositivo. O Flutter também oferece suporte a hot reload e hot restart, que permitem que você atualize rapidamente seu código e veja as alterações quase instantaneamente, sem perder o estado. O Flutter usa widgets como seus principais blocos de construção de interface do usuário, que são personalizáveis, adaptáveis e reativos. Você pode controlar cada pixel da aparência e do comportamento do seu aplicativo com o Flutter.
O Flutter tem muitas vantagens para o desenvolvimento de aplicativos, como:
Custo e tempo de desenvolvimento reduzidos
Melhor experiência e engajamento do usuário
Teste e manutenção simplificados
Maior compatibilidade e alcance
Se você quiser saber mais sobre o Flutter, pode visitar seu site oficial, ler sua documentação ou assistir a alguns tutoriais no YouTube.
Qual é a diferença entre APK e Android App Bundle?
Um pacote Android (APK) é o formato instalável e executável do Android para aplicativos. Um APK contém todos os recursos e códigos compilados do seu app, como ícones, sons, imagens etc.No entanto, um APK também inclui recursos que não são necessários para todos os dispositivos, como gráficos de alta resolução para tablets ou diferentes arquiteturas de CPU. Isso torna seu APK maior do que o necessário, o que pode resultar em tempos de download mais longos, maior uso de dados e maior consumo de armazenamento.
Um Android App Bundle (AAB) é um novo formato de publicação para Android que permite oferecer experiências de aplicativos otimizadas e modularizadas para seus usuários. Um AAB contém o código e os recursos do seu aplicativo, mas não inclui nenhuma configuração específica do dispositivo ou do usuário. Em vez disso, o Google Play gera e veicula APKs personalizados para cada dispositivo e usuário do seu AAB. Dessa forma, seu app inclui apenas os recursos e códigos necessários para cada dispositivo e usuário, o que reduz o tamanho do app e melhora seu desempenho.
Um AAB tem muitos benefícios para a publicação de aplicativos, como:
Tamanho do aplicativo e tempo de download reduzidos
Maior taxa de sucesso de instalação e taxa de retenção
Gerenciamento e teste de versão simplificados
Segurança e integridade aprimoradas
Se você quiser saber mais sobre o AAB, pode visitar seu site oficial, ler sua documentação ou assistir a alguns vídeos no YouTube.
Qual é a diferença entre o modo de depuração e o modo de lançamento?
O modo de depuração e o modo de lançamento são dois modos diferentes de criar e executar seu aplicativo. O modo de depuração destina-se a fins de desenvolvimento e teste, enquanto o modo de lançamento destina-se a fins de produção e distribuição.
O modo de depuração possui alguns recursos que facilitam a depuração e o teste do seu aplicativo, como:
Hot reload e hot restart, que permitem que você atualize rapidamente seu código e veja as alterações quase instantaneamente, sem perder o estado
Ferramentas de depuração, como pontos de interrupção, execução passo a passo, inspeção de variáveis, etc.
Verificações de asserção, que ajudam a detectar erros e bugs em seu código
Mensagens de registro, que ajudam a monitorar o comportamento e o desempenho do seu aplicativo
No entanto, o modo de depuração também possui algumas desvantagens que o tornam inadequado para produção e distribuição, como:
Desempenho lento, devido à sobrecarga extra dos recursos de depuração
Tamanho maior do aplicativo, devido à inclusão de símbolos e bibliotecas de depuração
Assinatura de código insegura, devido ao uso de um certificado de depuração padrão que não é exclusivo ou seguro
Compatibilidade limitada, devido ao uso de uma versão depurável do mecanismo Flutter que pode não funcionar em alguns dispositivos ou plataformas
O modo de lançamento possui alguns recursos que o tornam ideal para produção e distribuição, como:
Desempenho rápido, devido à remoção de recursos de depuração e ao uso de compilação antecipada (AOT)
Tamanho menor do aplicativo, devido à remoção de símbolos e bibliotecas de depuração e ao uso de agitação e minificação da árvore
Assinatura de código segura, devido ao uso de um certificado de liberação exclusivo e seguro que identifica seu aplicativo
Ampla compatibilidade, devido ao uso de uma versão não depurável do mecanismo Flutter que funciona na maioria dos dispositivos e plataformas
Se você quiser saber mais sobre o modo de depuração e o modo de liberação, leia este guia ou assista a este vídeo.
Por que você carregou um APK ou Android App Bundle assinado no modo de depuração Flutter?
Como verificar se seu aplicativo está assinado no modo de depuração ou no modo de lançamento?
Para verificar se seu aplicativo está assinado no modo de depuração ou no modo de liberação, você pode usar a ferramenta de linha de comando keytool que vem com o Java Development Kit (JDK). O comando keytool permite visualizar os detalhes do certificado de assinatura do seu aplicativo. O certificado de assinatura é um arquivo que contém informações sobre a identidade e autenticidade do seu aplicativo. O certificado de assinatura é diferente para o modo de depuração e o modo de liberação.
Para usar o comando keytool, você precisa localizar o arquivo APK ou AAB do seu aplicativo. O arquivo APK ou AAB geralmente está localizado na pasta build/app/outputs/ do seu projeto Flutter. Você também precisa localizar o arquivo keystore que contém o certificado de assinatura.O arquivo keystore geralmente está localizado na pasta android/app/ do seu projeto Flutter. O arquivo keystore tem nomes diferentes para o modo de depuração e o modo de liberação. Para o modo de depuração, o arquivo keystore é denominado debug.keystore. Para o modo de liberação, o arquivo de armazenamento de chaves é nomeado de acordo com sua escolha ao gerá-lo.
Para visualizar os detalhes do certificado de assinatura do seu aplicativo, você pode executar este comando em um terminal:
keytool -list -v -keystore -alias
O é o caminho para o arquivo keystore. O é o nome da chave que você usou ao gerá-la. Por exemplo, se seu arquivo de armazenamento de chaves for denominado release.keystore e seu alias de chave for mykey, você poderá executar este comando:código>keytool -list -v -keystore release.keystore -alias mykey
O comando solicitará que você insira a senha para o arquivo keystore. Após inserir a senha, você verá os detalhes do certificado de assinatura, como proprietário, emissor, número de série, validade, impressão digital etc. Você pode comparar esses detalhes com o certificado de depuração padrão para ver se seu aplicativo está assinado no modo de depuração ou no modo de liberação. O certificado de depuração padrão tem estes detalhes:
Proprietário: CN=Android Debug, O=Android, C=US
Emissor: CN=Android Debug, O=Android, C=US
Número de série: 1
Validade: De quinta 01 de janeiro 08:00:00 CET 1970 até terça 19 de janeiro 09:14:07 CET 2038
Impressão digital (SHA1): D8:9E:05:EF:6C:15:D5:2F:FD:F5:D7:1F:4A:2B:C9:55:B0:B9:D3:F6
Se o certificado de assinatura do seu aplicativo tiver os mesmos detalhes que o certificado de depuração padrão, isso significa que seu aplicativo está assinado no modo de depuração. Se o certificado de assinatura do seu aplicativo tiver detalhes diferentes, isso significa que seu aplicativo está assinado no modo de lançamento.
Quais são as consequências de carregar um aplicativo assinado no modo de depuração?
Carregar um aplicativo assinado no modo de depuração não é recomendado e pode causar vários problemas, como:
Seu aplicativo não será aceito pelo Google Play, pois o Google Play exige que os aplicativos sejam assinados no modo de lançamento com um certificado exclusivo e seguro
Seu aplicativo não poderá usar determinados recursos ou serviços que exigem um certificado de liberação, como Google Maps API, Firebase Cloud Messaging, In-app Billing, etc.
Seu aplicativo ficará vulnerável a ataques de adulteração e falsificação, pois qualquer pessoa pode usar o certificado de depuração padrão para modificar ou representar seu aplicativo
Seu aplicativo terá desempenho e experiência do usuário ruins, pois o modo de depuração adiciona sobrecarga extra e reduz a otimização
Portanto, você sempre deve enviar um aplicativo assinado em modo de lançamento para o Google Play e outros canais de distribuição.
Como corrigir o problema e fazer upload de um aplicativo assinado no modo de lançamento?
Como gerar uma chave de assinatura para seu aplicativo?
Para fazer upload de um aplicativo assinado no modo de lançamento, você precisa gerar uma chave de assinatura para seu aplicativo. Uma chave de assinatura é um arquivo que contém uma chave privada e um certificado de chave pública usados para assinar seu aplicativo. A chave privada é usada para assinar seu aplicativo e deve ser mantida em segredo e segura. O certificado de chave pública é usado para verificar a assinatura do seu aplicativo e deve ser incorporado ao seu aplicativo.
Para gerar uma chave de assinatura para seu aplicativo, você pode usar a ferramenta de linha de comando keytool que acompanha o JDK. O comando keytool permite criar um novo arquivo keystore que contém sua chave de assinatura. Para usar o comando keytool, você precisa fornecer algumas informações sobre seu aplicativo e sobre você, como:
O nome do arquivo de armazenamento de chaves
A senha para o arquivo keystore
O nome do alias chave
A senha para o alias da chave
O período de validade da chave (em dias)
O nome distinto do proprietário (como CN=Seu nome, OU=Sua unidade organizacional, O=Sua organização, L=Sua cidade, S=Seu estado, C=Seu país)
Para criar um novo arquivo de armazenamento de chaves com uma chave de assinatura para seu aplicativo, você pode executar este comando em um terminal:
keytool -genkey -v -keystore .keystore -alias -keyalg RSA -keysize 2048 -validade
O é o nome do arquivo keystore. O é o nome da chave. O é o número de dias em que a chave é válida.Por exemplo, se você deseja criar um arquivo keystore chamado release.keystore com uma chave chamada mykey válida por 25 anos (9125 dias), execute este comando:
keytool -genkey -v -keystore release.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 9125
O comando solicitará que você insira as senhas para o arquivo keystore e o alias da chave e, em seguida, faça algumas perguntas sobre seu aplicativo e sobre você. Depois de responder às perguntas, você verá os detalhes da chave de assinatura que criou, como proprietário, emissor, número de série, validade, impressão digital etc.
Como configurar seu aplicativo para usar a chave de assinatura?
Para configurar seu aplicativo para usar a chave de assinatura que você criou, você precisa editar dois arquivos em seu projeto Flutter: o arquivo build.gradle e o arquivo key.properties. O arquivo build.gradle está localizado na pasta android/app/ do seu projeto Flutter. O arquivo key.properties é um arquivo que você precisa criar e colocar na pasta android/ do seu projeto Flutter. O arquivo key.properties contém as informações sobre sua chave de assinatura, como o nome do arquivo keystore, a senha do keystore, o alias da chave e a senha da chave.
Para editar o arquivo build.gradle, você precisa adicionar algum código que diga ao Gradle como assinar seu aplicativo usando a chave de assinatura. Gradle é uma ferramenta que automatiza a construção e o teste de seu aplicativo. Para adicionar o código, você precisa abrir o arquivo build.gradle com um editor de texto e localizar o bloco android ... . Dentro deste bloco, você precisa adicionar outro bloco chamado signatureConfigs ... . Dentro deste bloco, você precisa adicionar outro bloco chamado release ... . Dentro deste bloco, você precisa adicionar algumas linhas de código que carregam o arquivo key.properties e usam seus valores para assinar seu aplicativo. O código deve ficar assim:
andróide ... signatureConfigs release def keystorePropertiesFile = rootProject.file('key.properties') def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile rootProject.file(keystoreProperties['storeFile']) storePassword key storeProperties['storePassword'] ...
Para editar o arquivo key.properties, você precisa criar um novo arquivo com um editor de texto e nomeá-lo como key.properties. Dentro desse arquivo, você precisa adicionar algumas linhas de código que especificam os valores de sua chave de assinatura, como o nome do arquivo keystore, a senha do keystore, o alias da chave e a senha da chave. O código deve ficar assim:
storePassword=
chaveSenha=
keyAlias=
storeFile=.keystore
O é a senha para o arquivo keystore. O é a senha para o alias da chave. O é o nome da chave. O é o nome do arquivo keystore. Por exemplo, se seu arquivo de armazenamento de chaves for denominado release.keystore, sua senha de armazenamento de chaves for 123456, seu alias de chave for mykey e sua senha de chave for 654321, seu código deve ter esta aparência:
storePassword=123456 keyPassword=654321 keyAlias=mykey storeFile=release.keystore
Você deve salvar o arquivo key.properties na pasta android/ do seu projeto Flutter e certificar-se de que ele não seja rastreado pelo controle de versão ou compartilhado com mais ninguém.
Como criar um APK ou Android App Bundle assinado no modo de lançamento?
Para criar um APK ou Android App Bundle assinado no modo de lançamento, você pode usar a ferramenta de linha de comando flutter build que vem com o Flutter. O comando flutter build permite que você crie um APK ou AAB a partir do seu projeto Flutter. Para usar o comando flutter build, você precisa especificar qual formato deseja construir: APK ou AAB.Você também precisa especificar qual modo deseja construir: depurar ou liberar. Por padrão, o flutter build cria um APK no modo de depuração.
Para criar um APK assinado no modo de lançamento, você pode executar este comando em um terminal:
apk de compilação flutuante --release
Para criar um AAB assinado no modo de liberação, você pode executar este comando em um terminal:
flutter build appbundle --release
O comando levará algum tempo para ser concluído e gerará um arquivo APK ou AAB na pasta build/app/outputs/ do seu projeto Flutter. Você pode enviar o arquivo APK ou AAB para o Google Play ou outros canais de distribuição.
Conclusão
Neste artigo, explicamos o que é Flutter, quais são as diferenças entre APK e Android App Bundle, quais são as diferenças entre o modo de depuração e o modo de lançamento, por que você não deve fazer upload de um aplicativo assinado no modo de depuração e como fazer upload de um aplicativo assinado no modo de lançamento. Esperamos que este artigo tenha ajudado você a entender e resolver o problema de carregar um APK ou Android App Bundle assinado no modo de depuração Flutter. Se você tiver alguma dúvida ou feedback, sinta-se à vontade para deixar um comentário abaixo.
perguntas frequentes
P: Como posso testar meu aplicativo antes de carregá-lo no Google Play?
R: Você pode testar seu aplicativo usando um emulador ou um dispositivo físico. Para executar seu aplicativo em um emulador ou dispositivo, você pode usar a ferramenta de linha de comando flutter run que vem com o Flutter. O comando flutter run permite que você execute seu aplicativo no modo de depuração ou no modo de lançamento. Para executar seu aplicativo no modo de depuração, você pode executar este comando:
corrida flutuante
Para executar seu aplicativo no modo de lançamento, você pode executar este comando:
flutter run --release
Você também pode usar o plug-in Flutter para seu IDE preferido (como Android Studio, Visual Studio Code etc.) para executar seu aplicativo em um emulador ou dispositivo.
P: Como posso atualizar meu aplicativo depois de carregá-lo no Google Play?
R: Você pode atualizar seu aplicativo criando um novo arquivo APK ou AAB com a mesma chave de assinatura e um código de versão e nome de versão superiores ao anterior.Em seguida, você pode fazer upload do novo arquivo APK ou AAB para o Google Play usando o Play Console. O Google Play substituirá automaticamente a versão antiga do seu aplicativo pela nova para seus usuários.
P: Como posso alterar minha chave de assinatura para meu aplicativo?
R: Você deve evitar alterar a chave de assinatura do aplicativo, pois isso pode causar problemas para os usuários e para a funcionalidade do aplicativo. No entanto, se precisar alterar sua chave de assinatura por algum motivo (como perder ou comprometer sua chave original), você pode usar o recurso Assinatura de aplicativo pelo Google Play. Esse recurso permite que você transfira com segurança a chave de assinatura do seu aplicativo para o Google Play e deixe que o Google Play gerencie isso para você. Você também pode gerar uma nova chave de assinatura e carregá-la no Google Play usando esse recurso. Para usar esse recurso, você precisa registrar seu aplicativo na assinatura de aplicativos do Google Play usando o Play Console.
P: Como posso otimizar ainda mais o tamanho e o desempenho do meu aplicativo?
R: Além de usar o AAB e o modo de lançamento, existem outras formas de otimizar o tamanho e o desempenho do seu aplicativo, como:
Usando ProGuard ou R8, que são ferramentas que encolhem, ofuscam e otimizam seu código
Usando APKs divididos ou módulos de recursos dinâmicos, que são maneiras de fornecer partes do seu aplicativo sob demanda
Usando o perfil do Flutter ou os modos de benchmark, que são modos que medem o desempenho e o uso de recursos do seu aplicativo
Usando as práticas recomendadas de desempenho do Flutter, que são diretrizes que ajudam você a escrever código eficiente e de alto desempenho
Você pode ler mais sobre essas técnicas de otimização aqui.
P: Onde posso encontrar mais recursos para aprender sobre Flutter e desenvolvimento Android?
R: Existem muitos recursos disponíveis on-line para aprender sobre o Flutter e o desenvolvimento do Android, como:
Os sites oficiais do Flutter e do Android, que fornecem documentação abrangente, guias, tutoriais, amostras, etc.
Os canais oficiais do YouTube do Flutter e do Android Developers, que disponibilizam vídeos sobre diversos temas, dicas, macetes, etc.
Os blogs oficiais do Flutter e Android Developers, que fornecem notícias, atualizações, insights, etc.
As comunidades oficiais do Flutter e Android Developers, que fornecem fóruns, eventos, grupos, etc.
Os cursos online sobre Flutter e Android Development, que fornecem experiências de aprendizagem estruturadas e interativas
0517a86e26
Commentaires