Come sapete, con App Inventor di Google è possibile creare in modo completamente grafico applicazioni per dispositivi Android, anche di una certa complessità, senza dover scrivere direttamente linee di codice Java e quindi senza la necessità di conoscere le API e le tecniche di programmazione di Android.
Una volta terminato il lavoro di "creazione" grafica della propria applicazione, è possibile fare il download del package Android (.apk) generato da App Inventor.
Il pacchetto .apk così ottenuto è utilizzabile per distribuire a terzi l'applicazione; e' infatti possibile installare l'App collegando il proprio smartphone al PC ed usando il comando adb:
Code:
adb install <nome_app>.apk
oppure più semplicemente copiando il file .apk sulla sdcard ed installando il pacchetto direttamente dal celulare, usando uno dei tanti file manager per Android disponibili (anche gratuiti) che consentono di installare le app semplicemente selezionando il relativo file .apk
Purtroppo però non è al momento possibile pubblicare l'applicazione generata con App Inventor sull' Android Market semplicemente facendo l'upload del file .apk, così come generato da App Inventor, per numerosi motivi: - la signature del file .apk è generata tramite la testkey utilizzabile solo in fase di sviluppo e debug dell'applicazione;
- non è possibile associare all'applicazione un'icona personalizzata;
- il Manifest.xml associato all'applicazione è privo di alcune delle informazioni necessarie per pubblicare l'applicazione sul Market
Se volete pubblicare la vostra applicazione creata con App Inventor sul Market è quindi necessario seguire i passi seguenti.Requisiti: - Java SDK installato e funzionante
- Android SKD installato e funzionante
- ***URLs are hidden from guests, please register and login to view the hyperlink***, ***URLs are hidden from guests, please register and login to view the hyperlink***, ***URLs are hidden from guests, please register and login to view the hyperlink***
Passo 1: Decompilare il file .apk Per decompilare il file .apk (senza generare i sorgenti .smali delle classi) usare il comando:
Code:
apktool d -s <nome_app>.apk
Con questo comando l'archivio .apk non viene semplicemente scompattato, come avverrebbe con un semplice unzip, ma il
Manifest.xml viene anche decopmpilato e trasfromato in formato testo, quindi editabile. Se invece si ommette il flag -s, apktool decompila anche classes.dex e produce i file .smali per ogni classe dell'applicazione. Se non vogliamo modificare le classi è molto meglio evitare questo passaggio per minimizzare la possibilità che qualcosa vada storto nella fase di riscotruzione del pacchetto .apk (cosa che purtroppo può sempre capitare).
Passo 2: Modificare l'icona associata all'applicazioneTramite il comando in step1, apktool crea una cartella chiamata <nome_app>; in
<nome_app>\res\drawable si trova il file
ya.png che rappresenta l'icona di default dell'applicazione generata da App Inventor. Sovrascrivere questo file con l'icona desiderata, avendo l'accortezza di usare lo stesso formato (64x64) e senza cambiare nome ed estensione.
Passo 3: Modificare il Manifest.xmlPasso 3.1: "Versioning" dell'applicazioneAggiungere le informazioni relative alla versione della propria App aggiungendo gli atributi "
android:versionCode" e "
android:versionName" nell'elemento "
package", come nell'esempio seguente:
Quote:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="appinventor.XXXX.XXXX"
android:versionCode="1"
android:versionName="1.0">
......
Passo 3.2: Specificare la versione minima di Android compatibile con l'applicazione (API level) Per fare questo è sufficiente aggiungere l'elemento "
uses-sdk" e considerare la tabella seguente:
API Level -> Android Platform Version 1 -> 1.0
2 -> 1.1
3 -> 1.5
4 -> 1.6
5 -> 2.0
6 -> 2.0.1
7 -> 2.1
8 -> 2.2
(attenzione, al momento non è possibile pubblicare applicazioni create con App Inventor che hanno API level pari ad 8 (Android 2.2), a causa di un bug presente nel Market)
Qundi, ad esempio, se l'applicazione può girare su Android 1.5 (Cupcake) e superiori, si può aggiungere al Manifest.xml la linea seguente:
Quote:
<uses-sdk android:minSdkVersion="3" />
Se lo si desidera, è possibile specificare anche gli elementi android:targetSdkVersion e android:maxSdkVersion.
Passo 3.3:Spostare l'attributo android:icon dall'elemento "activity" all'elemento "package" e rimuovere l'attributo android:debuggableAttualmenete App Inventor genera un Manifest.xml dove l'attributo android:icon è associato all'activity principale dell'applicazione ma l'Android Market richiede che questo attributo sia associato al package (in caso contrario, il parsing del Manifest.xml fallisce e l'upload del file .apk risulta impossibile, quindi è necessario eseguire questa modifica:
Rimuovere l'attribtuo android:icon su questa riga:
Quote:
<activity android:label="XXX" android:icon="@drawable/ya" android:name=".Screen1">
ed iserirlo su questa riga:
Quote:
<application android:label="XXXXX" android:debuggable="true">
Sempre sulla riga relativa all'elemento "application", rimuovere l'attributo "android_:debuggable"
Alla fine, il Manifest.xmlmodificato sarà come questo:
Quote:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="appinventor.XXX.XXX"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
......
<application android:label="XXXX" android:icon="@drawable/ya" >
<activity android:label="XXXXX" android:name=".Screen1">
....
</activity>
</application>
</manifest>
Passo 4: Ricostruzione del pacchetto .apk modificato (build)Ricostruire il pacchetto .apk usando apktool, con il comando
Code:
apktool b <nome_app>
dove <nome_app> è la cartella generata da apktool al passo 1). In alternativa. è possibile entrare nella cartella <nome_app> ed usare il comando
Code:
apktool b
Apktool genererà un nuovo file .apk dentro la cartella
<nome_app>\build\apkPasso 5: Ottimizzare il nuovo .apk con zipalign e firmarlo con la propria chiave privataIl pacchetto .apk generato al passo precedente
NON è ottimizzato e
NON è "signed" (firmato)Per ottimizzarlo con zipalign, usare il comando:
Code:
zipalign -v 4 <nome_app>.apk <nome_app_zipaligned>.apk
Per applicare la firma usando il proprio certificato, usare il comado
Code:
jarsigner.exe -verbose -keystore <mia_chiave>.keystore <nome_app_zipaligned>.apk <aliasname>
(jarsigner si trova nella cartella \bin del Java JDK)
NB: Per pubblicare l'applicazione è necessario firmare l'apk con una chiave privata personale , che deve essere prima generata (<mia_chiave>.keystore) usando il programma keytool che si trova in Java SDK.
Per generare il certificato si può usare keytool presente nel Java SDK, usando il comndo seguente:
Code:
keytool.exe -genkey -v -keystore <mia_chiave>.keystore -alias <aliasname> -keyalg RSA -keysize 2048 -validity 10000
E' possibile generare il certificato contenente la propria chiave privata anche creando un progetto Android su Eclipse ed usando l'Export Wizard (File->Export, Android->Export Android Application).
A questo punto il vostro pacchetto apk è bello e pronto per essere pubblicato nel Market!
