Consulte a lista de perguntas frequentes abaixo. Clique em uma pergunta para ver a resposta.
Observações sobre o uso de MultiDex em projetos mPaaS Portal e Bundle
Como resolver o erro de runtime 608 ou erros nativos da libsgmain
Sem conectividade de rede durante a compilação
A ausência ou bloqueio de conexão de rede durante a compilação causa falha no build. Verifique os itens a seguir:
Confirme se há uma conexão ativa com a internet.
Verifique se nenhum proxy de rede está ativo, incluindo proxies de navegador e softwares de proxy de terceiros.
-
Certifique-se de que nenhum proxy de IDE esteja configurado.

No arquivo
gradle.properties, confirme que nenhum proxy do Gradle está definido. Especificamente, verifique sesystemProp.http.proxyHostesystemProp.http.proxyPortestão ausentes. Caso alguma dessas propriedades exista, exclua-a.
Falha na compilação do programa
Siga estas etapas em ordem para identificar e corrigir a causa raiz da falha de compilação.
Execute as etapas em Sem conectividade de rede durante a compilação para descartar problemas de rede.
Verifique o log de execução do Gradle para confirmar se a nova dependência é válida.
-
Verifique se os parâmetros
group,artifacteversion(GAV) da dependência estão corretos.// Reference the debug package group:artifact:version:raw@jar bundle "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT:raw@jar" // Reference the release package group:artifact:version@jar bundle "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT@jar" manifest "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT:AndroidManifest@xml" -
Execute o comando abaixo na linha de comando do sistema para exportar o log de execução do Gradle:
# Before you run the command, confirm that the productflavor property is not defined. Otherwise, the command will fail. # The following command exports the execution log to the log.txt file. gradle buildDebug --info --debug -Plog=true > log.txt -
Abra o arquivo de log exportado. Uma entrada como a seguinte indica que a dependência não foi encontrada. A linha principal é a URL mostrada em "Searched in the following locations":
Caused by: org.gradle.internal.resolve.ArtifactNotFoundException: Could not find nebulacore-build-AndroidManifest.xml (com.alipay.android.phone.wallet:nebulacore-build:1.6.0.171211174825). Searched in the following locations: http://mvn.cloud.alipay.com/nexus/content/repositories/releases/com/alipay/android/phone/wallet/nebulacore-build/1.6.0.171211174825/nebulacore-build-1.6.0.171211174825-AndroidManifest.xml at org.gradle.internal.resolve.result.DefaultBuildableArtifactResolveResult.notFound(DefaultBuildableArtifactResolveResult.java:38) at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository$LocateInCacheRepositoryAccess.resolveArtifactFromCache(CachingModuleComponentRepository.java:260) -
Abra a URL HTTP do log em um navegador e faça login no repositório Maven para confirmar se o artefato existe.
NotaEncontre o nome de usuário e a senha no arquivo
build.gradle. -
Execute o comando a seguir para limpar o cache do
gradle:gradle clean --refresh-dependencies -
Se o artefato existir no repositório Maven, exclua o cache local do Gradle e recompile:
-
No macOS, Linux ou Unix, execute:
cd ~ cd .gradle cd caches rm -rf modules-2 No Windows, acesse
C:\Users\{username}\.gradle\cachese exclua a pastamodules-2.
-
Lentidão durante a compilação
Se a compilação levar mais de 20 minutos, siga as etapas abaixo para acelerar o processo.
Siga as etapas da seção anterior para confirmar se a conexão de rede está estável.
Verifique se o firewall está desativado.
Confirme que nenhum proxy de rede está configurado no IntelliJ IDEA.
-
Pré-configure o repositório Maven no script de build. O exemplo a seguir carrega primeiro o espelho Maven do Alibaba Cloud, o que reduz a latência de resolução:
apply plugin: 'maven' buildscript { repositories { mavenLocal() // First, load the Maven mirror maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} maven { credentials { username "Use a known user" password "Use a known password" } url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/" } } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' classpath 'com.alipay.android:android-gradle-plugin:2.1.3.3.3' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } allprojects { repositories { flatDir { dirs 'libs' } mavenLocal() maven { credentials { username "xxxxxxxxx" password "xxxxxxx" } url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/" } maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} } }
Falha na compilação com NullPointerException

Ao conectar-se ao Apsara Stack, o build pode falhar com uma NullPointerException após o download do arquivo de configuração e a conexão com o mPaaS. Inspecione o arquivo de configuração e verifique se todos os 13 campos obrigatórios estão presentes e se os nomes dos campos correspondem aos do arquivo baixado da nuvem pública.
Como depurar um aplicativo
Há dois métodos disponíveis para depurar o aplicativo durante o desenvolvimento:
Iniciar o aplicativo no modo de depuração
Depurar o aplicativo durante a execução
Iniciar o aplicativo no modo de depuração
-
Cenários
Use este método para depurar código de inicialização executado na partida, como
application init. Procedimento
-
Execute
adb shell am start -W -S -D <application_package_name>/<first_activity_class_name>. Para o Demo do mPaaS, o nome do pacote écom.mpaas.demoe o nome da classe da primeira activity écom.alipay.mobile.quinox.LauncherActivity. Portanto, o comando completo éadb shell am start -W -S -D com.mpaas.demo/com.alipay.mobile.quinox.LauncherActivity. A figura abaixo mostra o nome da classe da primeira activity.
-
Após executar o comando, uma caixa de diálogo aparece no dispositivo.

-
Defina um breakpoint na linha de código alvo e anexe ao processo do aplicativo conforme mostrado.

Depurar o aplicativo durante a execução
-
Cenários
Use este método para depurar após uma interação do usuário, como clicar em um botão ou navegar para uma página.
-
Procedimento
Com o aplicativo em execução, clique em Attach to process (
) para iniciar a depuração.
Observações sobre o uso de MultiDex em projetos mPaaS Portal e Bundle
Evite usar MultiDex em projetos Portal e Bundle. A única exceção suportada é um único projeto portal que requer multiDexEnabled true. Se um Bundle ficar muito grande, divida-o em bundles menores em vez de ativar o MultiDex.
Como limpar o cache do Gradle
Abra as configurações do plugin do Gradle e clique em Clean Cache para excluir todos os dados em cache.

Como atualizar para o plugin mais recente do Gradle
Esta seção aplica-se apenas à série de baseline 10.1.68. Para obter mais informações sobre esta versão de baseline, consulte Introdução ao baseline e Notas de versão da série de baseline 10.1.68.
O Android Gradle Plugin oficial do Google é a versão 3.5.x. O mPaaS fornece um plugin compatível na mesma versão, com suporte às APIs do Google Android Gradle Plugin 3.5.3 e ao Gradle 6,2.
Alterações no método de importação
-
Adicione apenas a seguinte dependência para importar o plugin do mPaaS. O Android Gradle Plugin oficial é obtido automaticamente por meio de dependências transitivas, portanto, não é necessário declará-lo separadamente.
dependencies { classpath 'com.alipay.android:android-gradle-plugin:3.5.18' } Use o Gradle Wrapper versão 5,6 ou posterior. Recomenda-se a versão 6,2.
Alterações de uso
-
Remova
apply plugin:'com.android.application'e substitua pelo plugin apropriado do mPaaS:Para um projeto portal, use
apply plugin:'com.alipay.portal'.Para um projeto bundle, exclua
apply plugin:'com.android.application'e use apenasapply plugin:'com.alipay.bundle'.Para um projeto library, exclua
apply plugin:'com.alipay.library'e use apenasapply plugin:'com.android.library'.
Se usar o Android Studio 3.5 ou posterior, adicione
android.buildOnlyTargetAbi=falseao arquivogradle.properties.-
O componente Security Guard do mPaaS não oferece suporte à assinatura V2. Desative a assinatura V2 nestes casos:
Ao depurar ou instalar o APK via Android Studio
Ao compilar pela linha de comando com
minSdkVersion24 ou superior
Para desativar a assinatura V2, adicione o seguinte à configuração de assinatura:
v2SigningEnabled false
Após limpar o cache, monitore e confirme se as páginas miniapp e H5 funcionam conforme esperado.
A tag input file não abre a câmera no Huawei EMUI 10
O Huawei EMUI 10 usa uma implementação de URI fora do padrão que impede a tag <input file> de abrir a câmera. Aplique todas as três correções a seguir.
1. Atualizar o baseline
Se estiver na série de baseline 32, atualize para 10.1.32.18 ou posterior.
Se estiver na série de baseline 60, atualize para 10.1.60.9 ou posterior.
Se estiver na série de baseline 68, atualize para 10.1.68-beta.3 ou posterior.
2. Configurar o FileProvider
Reutilize um FileProvider existente ou crie um novo.
-
Crie uma classe Java que estenda o FileProvider:
import android.support.v4.content.FileProvider; public class NebulaDemoFileProvider extends FileProvider { } -
Em
res/xml, crie um arquivo chamadonebula_fileprovider_path.xml:<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external" path="."/> </paths> -
Registre o provider no
AndroidManifest.xml:<provider android:name="com.mpaas.demo.nebula.NebulaDemoFileProvider" android:authorities="com.mpaas.demo.nebula.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/nebula_fileprovider_path" /> </provider>NotaO valor de
android:authorities,com.mpaas.demo.nebula.provider, foi retirado do demo do mPaaS. Defina um valor exclusivo para o seu aplicativo. Não usecom.mpaas.demo.nebula.provider, pois entrará em conflito com outros aplicativos mPaaS.
3. Implementar o H5NebulaFileProvider
-
Crie uma classe Java que implemente
H5NebulaFileProvidere sobrescreva o métodogetUriForFile. No corpo do método, delegue aoFileProvidercriado acima para gerar a URI:public class H5NebulaFileProviderImpl implements H5NebulaFileProvider { private static final String TAG = "H5FileProviderImpl"; @Override public Uri getUriForFile(File file) { try { return getUriForFileImpl(file); } catch (Exception e) { H5Log.e(TAG, e); } return null; } private static Uri getUriForFileImpl(File file) { Uri fileUri = null; if (Build.VERSION.SDK_INT >= 24) { fileUri = NebulaDemoFileProvider.getUriForFile(LauncherApplicationAgent.getInstance().getApplicationContext(), "com.mpaas.demo.nebula.provider", file); } else { fileUri = Uri.fromFile(file); } return fileUri; } } -
Registre o
H5NebulaFileProvider. Após a conclusão da inicialização do mPaaS e antes de iniciar o pacote offline, registre oH5NebulaFileProvider. Este registro é global e precisa ser feito apenas uma vez:H5Utils.setProvider(H5NebulaFileProvider.class.getName(), new H5NebulaFileProviderImpl());
Como usar ou depender do mPaaS em uma Library
Para reutilizar um componente do mPaaS entre módulos, adicione-o como uma dependência de biblioteca. Este procedimento usa o componente Scan do mPaaS como exemplo.
Pré-requisitos
O projeto deve estar conectado ao mPaaS usando o método AAR nativo.
Procedimento
No projeto Android, crie um módulo Android Library chamado
scan.
-
No arquivo
build.gradledo novo móduloscan, adicioneapi platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline"):dependencies { …… // This must be added when using mPaaS component features in a module. api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") …… } Use o plugin do mPaaS no Android Studio para instalar o componente Scan no módulo
scan: acesse mPaaS > Native AAR Connection > Configure/Update Component > Start Configuration. O componente Scan é carregado automaticamente após a instalação.-
No
build.gradledo aplicativo principal, adicione o plugin de configuração de baseline:plugins { id 'com.android.application' ...... // You must add baseline.config (baseline) to the build.gradle file under app. id 'com.alipay.apollo.baseline.config' } -
No módulo onde o componente Scan é necessário, adicione o módulo
scancomo dependência:dependencies { api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") .... api project(':scan')// Scan component }
Como resolver o erro de runtime 608 ou erros nativos da libsgmain
Pesquise por SecException no log do Android Studio. Se encontrar o código de erro 608 ou um erro nativo da libsgmain, realize as verificações a seguir.
-
Verifique se o arquivo
res/drawable/yw_1222.jpgexiste e é válido:Confirme se o arquivo de configuração contém dados codificados em Base64.
Certifique-se de que o plugin do Gradle
baseline.updateoubaseline.configesteja aplicado.
-
Verifique se a pasta META-INF contém todos os três arquivos de assinatura:
CERT.SF,MANIFEST.MFeCERT.RSA:Em
app/build.gradle, ativev1SignEnabled.Confirme se o
build.gradleraiz do projeto contémapply plugin: 'com.alipay.apollo.optimize'.
Se todas as verificações forem aprovadas, o problema provavelmente é um erro de assinatura no APK enviado ao console. Envie o pacote APK novamente.