Hacking - djsordo/senda GitHub Wiki
Instrucciones para compilar y desplegar aplicación Android
Aunque Ionic nos va a hacer gran parte del trabajo, hay ajustes que hacer para poder generar una aplicación para android.
Hay dos opciones para crear una aplicación android:
-
Crear un
.apk
: es decir, se genera un fichero .apk que es la aplicación. Ésta puede instalarse directamente en un movil sencillamente cargandola en el movil (y configurando el movil para saltarse toda la seguridad). Para depurar la aplicación es la mejor forma -
Crear un bundle (fichero
.aab
): esta forma de empaquetar la aplicación permite subirla a la teletienda de google. La play store de google es mucho más exigente respecto a qué configuraciones debe tener el proyecto: exige un cierto nivel de api y exige que vaya firmado por un certificado digital; pero si queremos llegar al gran público es lo que hay que hacer
.apk
Generar un fichero npm install -g native-run cordova-res
ionic capacitor add ios
ionic capacitor add android
ionic capacitor build
ionic capacitor copy
ionic capacitor sync
Cada vez que hagamos cambios:
ionic capacitor sync --configuration=production
Luego hay que abrir con android studio el proyecto y compilar la aplicación.
El fichero .apk
se quedará en:
$PROJECT_HOME/android/app/build/outputs/apk/debug/
Generar un *.aab para subir a google play store
En este caso los requisitos aumentan: es preciso generar un fichero *.aab
(application bundle) y además, debe cumplir una serie de requisitos:
- debe de ir firmado digitalmente
- el paquete por defecto no puede llamarse "io.ionic.starter"
Al parecer el fichero *.aab
es un fichero que tiene todo lo
necesario para construir, pero que la construcción
la hará la play store, y no nosotros: ellos se encargarán
de hacer varios ficheros *.apk
específicos para cada versión de movil.
La generación de un application bundle es sencilla: basta indicarlo en el android studio: cuando es la primera vez, éste nos solicitará crear una clave privada nueva que podemos guardar en el almacen de certificados de nuestra elección.
Hay que crear un almacén de certificados y un certificado
Este paso se hace automáticamente desde Android Studio, y muy importante, tenemos que dejar el almacén de certificados en una ruta que no se suba a github, ya que contiene las claves privadas y es un riesgo de seguridad.
Hay que cambiar el nivel mínimo del SDK
Tenemos un fichero variables.gradle
que contiene estos valores:
minSdkVersion = 21
compileSdkVersion = 30
targetSdkVersion = 30
Y deberemos cambiarlos al mínimo que solicite la Play Store. En este momento (17/09) es el 31:
minSdkVersion = 21
compileSdkVersion = 30 # cambiar aquí
targetSdkVersion = 31 # cambiar aqui
Además hay que abrir el fichero AndroidManifest.xml
y añadir la
entrada android:exported
:
<activity
android:exported="true" <!-- AÑADIR ESTO -->
android:configChanges="...."
android:name="io.ionic.starter.MainActivity"
android:label="@string/title_activity_main"
Añadir en AndroidManifest.xml el permiso especial ad_id
Cuando estamos compilando para el nivel de api 33 (y supongo que superiores), es preciso añadir un permiso especial en nuestro fichero AndroidManifest.xml:
<!-- Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
+ <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
Subimos el código de la versión
Localizaremos el fichero android/app/build.gradle
y le
subiremos el número a la versión:
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 3
versionName "1.1.1"
io.ionic.starter
Quitar las referencias a IMPORTANTE: PARA LA PROXIMA GENERACION, PROBAR A CAMBIAR ESTE
FICHERO: capacitor.config.ts
.
const config: CapacitorConfig = {
appId: 'io.ionic.starter',
appName: 'senda',
webDir: 'www',
bundledWebRuntime: false
};
Un error bastante frecuente es dejar ciertas configuraciones del proyecgto
como están: al subir el fichero .aab
a la play store, responderá
con el error de que el paquete io.ionic.starter
ya se encuentra
registrado.
Afortunadamente en esta página explica cómo hacer el cambio. Resumiendolo mucho:
-
localizar el fichero
android/app/build.gradle
y cambiar el valorapplicationId
:defaultConfig { - applicationId "io.ionic.starter" + applicationId "com.sendaestadisticas"
Localizar el fichero android/app/main/res/values/strings.xml
y cambiar
la entrada package_name y posiblemente la entrada app_name:
<string name="app_name">senda</string> <!-- CAMBIAR AQUI -->
<string name="title_activity_main">senda</string>
<string name="package_name">com.sendaestadisticas</string>
<string name="custom_url_scheme">com.sendaestadisticas</string> <!-- CAMBIAR AQUI -->
Añadiendo text-to-speech
npm install @capacitor-community/speech-recognition
Añadir esto en ios/App/App/Info.plist:
<key>NSSpeechRecognitionUsageDescription</key>
<string>To translate voice into words</string>
<key>NSMicrophoneUsageDescription</key>
<string>To record your voice</string>
Añadir esto en android/app/src/main/AndroidManifest.xml:
esto va al principio, dentro de
<queries>
<intent>
<action android:name="android.speech.RecognitionService"/>
</intent>
</queries>
Y esto al final:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
Y la MainActivity del proyecto android hay que dejarla así:
import com.getcapacitor.BridgeActivity;
import com.getcapacitor.community.speechrecognition.SpeechRecognition;
[...]
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.registerPlugin( SpeechRecognition.class );
}
.gitignore
para que permita subir estos ficheros
Cambiaremos nuestro fichero Abriremos el fichero .gitignore
y donde pone:
/android
deberemos poner:
/android
!/android/app/src/main/AndroidManifest.xml
!/android/app/src/main/java/io/ionic/starter/MainActivity.java
Es decir, los ficheros AndroidManifest.xml
y MainActivity.java
a partir de ahora se
controlarán en github: se subirán con el resto de cambios y se bajarán en las pull requests.
Esto es para permitir trazar en github los cambios que se han efectuado a dichos ficheros.
Desplegar la versión web
Sólo la primera vez: instalar firebase-tools
Para ello es preciso instalarse la herramienta de linea de comandos
firebase cli
. La mejor opcion para ello es usar npm, pero para
no contaminar el proyecto instalando otra dependencia en el
node_modules
del proyecto, lo mejor es buscar una carpeta
donde haremos nuestra instalacion. Para nuestro caso, he elegido
c:\app\firebase-cli
.
Una vez en la carpeta, ejecutaremos:
C:\app\firebase-cli> npm install firebase-tools
El comando firebase
quedará instalado en
c:\app\firebase-cli\node_modules\.bin\firebase.cmd
.
Ejecutar el comando deploy_web.ps1 o deploy_web.sh
El comando que despliega la web es deploy_web: basta con
ejecutar la versión de tu sistema operativo (deploy_web.ps1
o
deploy_web.sh
) para que se ejecute.
Puedes echar un vistazo al comando: tampoco es que sea rocket science precisamente.
Para que se pueda ejecutar desde cualquier parte en el terminal,
lo que tenemos que hacer es crear una entrada en el PATH
de nuestro ordenador.