Criar e instalar apk não assinado no dispositivo sem o servidor de desenvolvimento?

166

Como eu sou novo no react-native, se houver algo errado nas etapas, avise-me.

Criei um aplicativo Android nativo de reação usando o comando conforme a documentação

android nativo do react

durante a execução no dispositivo, o seguinte comando foi usado

react-native run-android

que me dá a saída de 2 arquivos apk na minha pasta de projeto / android / app / build / outputs / apk

insira a descrição da imagem aqui

Agora, quando eu uso para instalar este apk após a instalação, ele solicita que um servidor de desenvolvimento se conecte para agrupar o JS. Mas meu requisito é que o usuário não precise lutar com o servidor de desenvolvimento, ele só precisa instalar o apk e tudo está feito.

Foram submetidas a algumas perguntas sobre o stackoverflow, mas não é útil para criar apk não assinado que não requer servidor de desenvolvimento.

Vocês podem me ajudar a encontrar a maneira de como criar um apk não assinado em reagir nativo?

kAy_4337270
fonte
1
Execute 'react-native start', ele servirá seu pacote js no modo de desenvolvimento. O objetivo é que você possa editar arquivos js rapidamente. O uso do modo de liberação não precisa de nenhum servidor, pois inclui o pacote necessário. Veja resposta abaixo
kar

Respostas:

250

Você precisa criar manualmente o pacote para uma compilação de depuração.

Compilação de depuração:

#React-Native 0.59
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

Em seguida, para criar os APKs após o agrupamento:

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

PS Outra abordagem pode ser modificar scripts gradle.

Dmitry Mugtasimov
fonte
3
No caso de alguém está faltando ativos: isso funcionou para mim--assets-dest ./android/app/src/main/res/
Juan Solano
11
E se isso me dá uma grande tela vermelha quando inicio o aplicativo? (Nota: Estou executando isso diretamente após ejectar)
Simon Forsberg
3
Como usar o build para a versão mais recente, porque não temos index.android.js?
Vivek
9
Pessoas com a versão mais recente, altere o ponto de entrada para --entry-file index.js, obrigado.
Rishabh Bhatia
4
pacote react-native --dev false - android de plataforma --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest. / android / app / build / intermediários / res / fundiu / debug para a nova versão reactnative onde os index.js é unificado para iOS e Android
ir2pid
100

Por favor, siga estes passos.

Agrupe seus js:

se você tiver index.android.js na raiz do projeto, execute

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

se você tiver o index.js na raiz do projeto, execute

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

Criar apk de depuração:

cd android/
./gradlew assembleDebug

Então você pode encontrar o seu apk aqui:

cd app/build/outputs/apk/
m4r00p
fonte
11
E se isso me dá uma grande tela vermelha quando inicio o aplicativo? (Nota: Estou executando isso diretamente após ejectar)
Simon Forsberg
2
@SimonForsberg se você estiver usando reagir ^ 0.5, alterar o ponto de entrada para index.js em vez de app.js ou index.android.js, react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
d.bayo
3
Não funciona, este comando cria um apk, mas esse apk não está sendo executado sem o servidor do empacotador.
Vishal Chhodwani
1
Isso não vai funcionar, porque requer um servidor dev
sheriff_paul
1
Estou com o mesmo problema: ao gerar o APK de depuração, eu poderia instalá-lo, mas preciso do servidor de desenvolvimento e, quando uso o APK de lançamento, não consigo instalá-lo no meu telefone, não sei o que está errado com isso
aName
61

Última atualização

No diretório do projeto raiz

Certifique-se de que você já tenha o diretório android / app / src / main / assets / , se não criar o diretório, depois crie um novo arquivo e salve-o index.android.bundlee coloque-o como este android / app / src / main / assets / index.android .agrupar

Depois disso, execute este

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

cd android && ./gradlew assembleDebug

Então você pode entrar apkem app / build / outputs / apk / debug / app-debug.apk

Jeeva
fonte
Esta resposta está realmente funcionando, muito obrigado,
aName
Esta resposta está realmente funcionando, muito obrigado,
aName
@jeeva: como conectar o aplicativo de volta ao servidor de desenvolvimento de reagir nativo?
Mayur Baldha
O ponto que index.android.bundleé criado é realmente importante por não usar o servidor de desenvolvimento no host.
Lee Elton
@ Mayur Balha: Você pode se conectar novamente via USB ou Wi-Fi (conectado na mesma rede). Para conectar o WiFi novamente ao servidor em seu aplicativo de reação, agite seu celular no emulador, pressione Win + R e clique em dev settings Role para baixo "Debug Server Host & Port", digite seu endereço IP e porta (no Windows, abra cmd, digite "ipconfig" ou Mac aberto terminal, digite "ifconfig") como 192.168.1.1:8080 e pressione ok novamente agitar ou pressione Win + R para emular, pressione recarregar agora você pode ver o aplicativo se conectar ao desenvolvimento (ele funcionará apenas para a depuração, não para o Release Apk).
Jeeva
29

Comigo, no diretório do projeto, execute os seguintes comandos.

Para reagir à versão antiga nativa (você verá index.android.js na raiz):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../

Para reagir à nova versão nativa (você apenas vê index.js na raiz):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../

O arquivo apk será gerado em:

  • Gradle <3.0: android / app / build / outputs / apk /
  • Gradle 3.0+: android / app / build / outputs / apk / release /
Nhan Cao
fonte
você pode elaborar um pouco e como isso resolve o problema?
Priyal 29/08/17
Eu estava recebendo um erro ao abrir o arquivo index.android.bundle e resolvi-o por sua sugestão. Obrigado ... :)
Zephyr
6
Para mim, é #$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew assembleDebug
Arif
Arquivo não encontrado: index.android.js em qualquer uma das raízes do projeto
Anuj
1
Observe que --entry-file index.android.jsprecisa ser substituído --entry-file index.jspor projetos mais recentes que tenham, em index.jsvez de estarem index.android.jsna raiz do diretório de projetos.
daka 25/09
8

Depois de seguir a primeira resposta , você pode executar seu aplicativo usando

react-native run-android --variant=debug

E seu aplicativo será executado sem a necessidade do empacotador

Abdellah Alaoui
fonte
1
a resposta mais simples foi o mais eficiente o tempo todo, ele funcionou sem falhas, passou dias testando diferentes linhas de comando e toneladas de configurações js, e tudo foi retomada neste
Nicolas Silva
4

A partir do react-native 0.57, nenhuma das respostas fornecidas anteriormente funcionará mais, pois os diretórios nos quais o gradle espera encontrar o pacote e os ativos foram alterados.

Maneira simples sem pacote nativo de reação

A maneira mais simples de criar uma compilação de depuração é sem usar o react-native bundlecomando, mas simplesmente modificando seu app/build.gradlearquivo.

Dentro do project.ext.reactmapa no app/build.gradlearquivo, adicione a bundleInDebug: trueentrada. Se você deseja que não seja uma --devcompilação (sem avisos e pacote compactado), adicione também odevDisabledInDebug: true entrada ao mesmo mapa.

Com pacote nativo react

Se, por algum motivo, você precisar ou desejar usar o react-native bundlecomando para criar o pacote configurável e, em seguida, ./gradlew assembleDebugcriar o APK com o pacote configurável e os ativos, certifique-se de colocar o pacote configurável e os ativos nos caminhos corretos, onde o gradle pode encontrá-los.

A partir de 0,57 react-native, esses caminhos são android/app/build/generated/assets/react/debug/index.android.jspara o pacote configurável

e android/app/build/generated/res/react/debugpelos ativos. Portanto, os comandos completos para agrupar e criar manualmente o APK com o pacote e os ativos são:

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug

e depois

./gradlew assembleDebug

Caminho de pacote e ativos

Observe que os caminhos em que o gradle procura o pacote e os ativos podem estar sujeitos a alterações. Para descobrir onde estão esses caminhos, consulte o react.gradlearquivo no seu node_modules/react-nativediretório. As linhas que começam com def jsBundleDir =e def resourcesDir =especificam os diretórios em que gradle procura o pacote e os ativos, respectivamente.

TheBaj
fonte
3

Para usuário do Windows, se todas as etapas seguirem corretamente: https://facebook.github.io/react-native/docs/signed-apk-android.html

Você só precisa executar: gradlew assembleRelease

E seu arquivo será:

  • app-release.apk
  • app-release-unaligned.apk

Localização: E:\YourProjectName\android\app\build\outputs\apk

Dharam Mali
fonte
Você pode instalar / share app-release.apk para qualquer dispositivo
Dharam Mali
2
Geralmente, a compilação de depuração tem uma configuração diferente da compilação de lançamento (por exemplo, usa uma API de teste). Isso não ajuda se você deseja um APK autônomo que use uma configuração de compilação diferente da versão
Josh
Este APK é apenas para fins de desenvolvimento / teste.
Dharam Mali
3

Estou no react nativo 0.55.4, basicamente tive que agrupar manualmente:

react-native bundle --dev false --platform android --entry-file index.js --bundle- 
output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- 
dest ./android/app/build/intermediates/res/merged/debug

Em seguida, conecte seu dispositivo via usb, ative a depuração usb. Verifique o dispositivo conectado comadb devices .

Por fim, execute react-native run-android que instalará o apk de depuração no seu telefone e você pode executá-lo bem com o servidor de desenvolvimento

Nota:

  • A partir de 0.49.0, o ponto de entrada é um único index.js
  • gradlew assembleRelease gera apenas os aplicativos não assinados do release que não podem ser instalados
Shem Leong
fonte
3

Pode ser possível gerar uma versão apk não assinada para fins de teste, para que você possa executar no seu celular.

Inicialmente, eu tenho os erros de tela vermelha, como mais mencionados aqui. mas eu segui o mesmo que foi mencionado aqui e funcionou para mim.

No console, no diretório de trabalho, execute estes quatro comandos

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease

E, em seguida, o arquivo APK será produzido em: android \ app \ build \ outputs \ apk \ debug \ app-debug.apk

user3195905
fonte
3

Caso alguém esteja entrando recentemente nesse mesmo problema, estou usando o React Native 0.59.8 (testado com o RN 0.60 também) e posso confirmar algumas das outras respostas, aqui estão as etapas:

  1. Desinstale a versão compilada mais recente do seu aplicativo instalada que você possui no seu dispositivo

  2. Corre react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

  3. corre cd android/ && ./gradlew assembleDebug

  4. Obtenha seu app-debug.apk na pasta android / app / build / outputs / apk / debug

boa sorte!

HugoRMR
fonte
1
Não funciona !!!, que geram o APK de depuração, mas o aplicativo ainda precisa do servidor dev
aName
Isso não pode funcionar no 0.59.8 com reagente nativo, pois o gradle espera que o pacote esteja android/app/build/generated/assets/react/debug/index.android.jse os ativos estejam com o android/app/build/generated/res/react/debug0.57 nativo do reagente.
TheBaj
Funciona bem para reagir nativo 0,60>
Moso Akinyemi 09/07
0

Encontrei uma solução alterando buildTypes como este:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
sumit kumar pradhan
fonte