Android Studio 1.0: Installazione e troubleshooting su Yosemite

Android Studio

Tempo di cottura: 30 min.
Ingredienti:

Google ha recentemente fatto uscire dalla fase di beta il proprio nuovo pupillo che sostituisce ADT (Android Development Toolkit) per lo sviluppo delle app native su piattaforma Android: Android Studio.

Dato che, in occasione dell’uscita di Yosemite (OS X 10.10), di cui al più presto pubblicherò qua stesso la mia recensione approfondita, ho deciso fare un’installazione pulita dell’OS sul mio MacBook Air Late 2013 13″, ho deciso di installare di nuovo i tools di sviluppo da zero, portando tutto ciò che ho scritto precedentemente su Android Studio, per l’appunto.

Pur essendo una versione definita stabile, ho comunque dovuto tribolare non poco per far funzionare a dovere le cose: ma alla fine ce l’ho fatta. Questo è un sunto della mia esperienza che potrebbe esser utile anche a voi, (in tal caso potete lasciare un feedback nei commenti o condividere la pagina).

Yosemite come ormai da tradizione Apple non integra più Java all’interno della sua installazione standard. Per cui se da terminale si digita

javac --version

Si ottiene solamente una finestra che indica la mancanza dello stesso e invita a scaricare da qua la versione del JDK per Mac (io ho preso quella a 64-bit). Una volta scaricato il file jdk-8u25-macosx-x64.dmg montatelo e installate in pkg, come in figura 1.

JDK Installation

Figura 1 – installazione JDK

JDK - Installazione

JDK – Installazione fase 2

JDK – Installazione fase 3

Bene. Da qua invece assicuratevi di scaricare Android Studio v1.0. L’installazione consiste nel trascinare l’icona nella cartella Applicazioni e così fate. A primo avvio verrete salutati da un simpatico messaggio di errore che indica il fatto che Android Studio, non trova la versione del JDK che avete appena installato. Ottimo.

Android Studio was unable to find a valid JVM.

Quindi dopo alcuni tentativi scopro che l’ideale è settore la variabile di ambiente STUDIO_JDK per fare in modo che punti alla corretta versione del JDK appena installato. Apriamo quindi un terminale e digitiamo:

launchctl setenv STUDIO_JDK /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk

Ora Android Studio dovrebbe correttamente avviarsi, come in figura. Ci troviamo, quindi,  di fronte al processo d’inizializzazione del setup di Android Studio. Scegliamo un tipo d’installazione standard e aspettiamo che il sistema scarichi l’sdk come in figura.

Android Studio Wizard

Android Studio Wizard

Schermata 2014-12-12 alle 10.03.19

Schermata 2014-12-12 alle 10.04.55 Schermata 2014-12-12 alle 10.05.18 Schermata 2014-12-12 alle 10.24.51

La fase di setup è un pochino lunga soprattutto se, come me, avete una rete lenta come la morte, infatti verranno scaricati l’SDK e altri pacchetti necessari all’esecuzione del vostro codice come da figura sovrastante.

Personalmente l’installer ha avuto difficoltà a trovare HAXM, il tool di Intel che sfrutta Intel VT per velocizzare l’esecuzione della macchina virtuale del simulatore, restituendo un errore (lo vedrete evidenziato in rosso). Pare che la versione di HAXM che Google inserisca in Android Studio sia una release vecchia e che possa dare dei problemi.

Poco male: basta riscaricare il tool nella versione corretta da qua. Per l’installazione potete seguire le semplici istruzioni riportate sul sito Intel. L’installazione richiede quanta memoria allocare per l’esecuzione di HAXM e suggerisce un minimo di 1GB. Io ho lasciato il valore inalterato perché ho solo 4GB di RAM, salvo poi pentirmene successivamente e più avanti vedremo perché.

Tornando quindi su Android Studio, ho creato un nuovo progetto di test e l’ho chiamato RSSFeed (sempre grande fantasia), col wizard come da immagini sottostanti.

Schermata 2014-12-12 alle 17.48.42

Schermata 2014-12-12 alle 17.48.58 Schermata 2014-12-12 alle 17.49.09 Schermata 2014-12-12 alle 17.49.22

Ricordate che per questo caso è necessario solo fornire la versione minima dell’SDK precedentemente scaricata e dare il nome all’activity come mostrato nelle figure precedenti.

Una volta creata la nostra applicazione di prova ci ritroviamo di fronte all’interfaccia di Android Studio che per i più attenti ricorda quella di IntelliJ Idea di JetBrains (infatti è la stessa, adattata al “caso” Android), garanzia di affidabilità e solidità (per lo meno a detta di chi sviluppa attivamente su Java) come vediamo nell’immagine di sotto:

Android Studio nella sua interezza

Tralasciando per un momento le varie funzionalità dell’applicativo, concentriamoci sulla possibilità di far girare la nostra app sul simulatore che abbiamo scaricato nella fase di setup. Nel primo caso possiamo andare sul semplice Build->Run e verremo pervasi da un senso profondo di frustrazione e sconfitta nel constatare quanto lentamente si stia avviando il simulatore del Nexus 5 che avremo debitamente selezionato dal menù a tendina come quello in figura:

Menu_devices

Selezionate il device che volete utilizzare per la vostra emulazione come in figura:
Emulator_Choose

Ora prestando attenzione  alla finestra sottostante della console dovreste leggere un messaggio in rosso come il seguente:

emulator: The memory needed by this VM exceeds the driver limit.

HAX is not working and emulator runs in emulation mode

Come vi avevo avvisato precedentemente, la scelta di mettere solo un GB a disposizione del HAXM si è rivelata fallimentare, in quanto di default il Nexus 5 viene configurato per avere 1.5GB di RAM e l’emulazione non può quindi fare affidamento sull’accelerazione hardware rendendo, di fatto, il simulatore inutilizzabile.

Ora, le strade da percorrere sono potenzialmente due: riavviare l’installazione di HAXM e quindi settare ad 1.5GB la quantità di memoria ad esso riservata, oppure modificare le impostazioni del Nexus 5 (o creare un AVM clone e modificare quello) per impostare un quantitativo di RAM pari a 1024MB ossia 1GB.

Se volete percorrere quest’ultima strada, dirigetevi sul menu Tools->Android->AVD Manager oppure “Add Device Definition” nel menù a discesa nella figura precedente.
Vi dovreste ritrovare nel seguente menù:

AVD_Manager

A questo punto cliccate con attenzione sulla mattina al lato destro della voce Nexus 5 per accedere alle impostazioni della macchina virtuale e Cliccate sul bottone “Advanced Settings” come in figura:

Schermata 2014-12-12 alle 16.57.07Alla voce RAM inserite l’esatta dicitura 1024 se nel menù a discesa c’è la voce MB oppure 1 se c’è GB:
Change_RAMCliccate su Finish e fate ripartire il progetto con Build->Run.
Ora la console dovrebbe mostrare la seguente frase:

HAX is working and emulator runs in fast virt mode

Ed il vostro emulatore sarà veloce come un fulmine (si spera). L’emulatore dovrebbe quindi mostrare la seguente immagine:

Emulator Ovviamente per dovere di cronaca, se avete un generoso quantitativo di RAM sulla vostra macchina è consigliabile, invece che rallentare la macchina virtuale con un quantitativo di RAM inferiore, riconfigurare semplicemente HAXM in modo da consentirgli di utilizzare 1.5 o anche 2 GB di RAM, ma mi premeva mostrarvi anche l’altro metodo per completezza.

Tenete sempre a mente, come regola generale, che per HAXM è necessario un quantitativo di RAM >= RAM della macchina virtuale (ossia del device che state cercando di emulare).

Per ora siamo a posto e possiamo iniziare a sviluppare tranquillamente con Android.
Tutto sembra funzionare a dovere e non dovreste avere problemi a fare girare le vostre app in tranquillità.

Per ora è tutto, ma successivamente vedremo come configurare un device reale per testare le nostre app anche su dispositivi fisici. Alla prossima.

8 thoughts on “Android Studio 1.0: Installazione e troubleshooting su Yosemite

  1. Ho provato di tutto si blocca all’emulatore schermata nera. non da nessun tipo di errore. hax ok etc.. ho provato anche con una configurazione del dispositivo minima poca ram, bassa risoluzione.. niente da fare. ho un macbook pro mid 2009 con yosemite nn vorrei che i problemi fossero nei driver per la scheda video, ma anche qui ho tolto le trasparenze. il bello è che sotto windows 7 sul Boot Camp funziona, ma è molto più’ lento a compilare hello world ci va 44 sec, invece su yosemite 6-10 sec. idee??

      • si, e l’ho anche successivamente disabilitato, per renderlo piu’ leggero… con win 7 su bootcamp l’emulatore funziona ma è tanto piu’ lento (per compilare con yosemite 10 sec, mentre su windows tra i 40 e i 60 sec). ho un macbook pro metà 2009 2x 2.53 ghz, 4 gb ram, geforce9400 256 mb.

        • Il blank screen potrebbe essere dovuto alla mancanza di accelerazione HW, per cui ti consiglio di verificare che le API del device in emulazione siano almeno Android 4.0.3 (API Level 15). Da lì in poi hai il supporto all’accelerazione HW. Inoltre puoi provare: Android Virtual Device Manager->Select your device->Start->Check “Wipe user data”->Launch.

          Oppure puoi provare a lanciare l’emulatore da riga di comando con:

          /path/to/emulator/emulator -debug-init -logcat ‘*:v’ e vedere cosa dice.

          Se neanche questo dovesse dare informazioni utili prova a reinstallare l’SDK.

          Per quanto riguarda la lentezza su Windows, puoi provare ad inserire la stringa:
          org.gradle.daemon=true

          In un file chiamato gradle.properties nella directory .gradle della tua C:Users
          Questo dovrebbe far girare Gradle come demone e probabilmente migliorare di qualche secondo l’esecuzione (lo puoi fare anche su Mac). Ma tieni presente che Gradle non ha riscosso molti successi in termini di velocità.

          Ti saluto.

          • allora mi parte l’emulatore ma poi il nulla… Creating filesystem with parameters:
            Size: 69206016
            Block size: 4096
            Blocks per group: 32768
            Inodes per group: 4224
            Inode size: 256
            Journal blocks: 1024
            Label:
            Blocks: 16896
            Block groups: 1
            Reserved block group size: 7
            Created filesystem with 11/4224 inodes and 1302/16896 blocks
            HAX is working and emulator runs in fast virt mode
            ho messo ram 512, api19 kitkat4.4

            ho fatto partire l’emulatore dal terminale: ecco cosa mi dice:

            MacBook-Pro-di-Alberto:~ Alberto$ /Users/Alberto/Library/Android/sdk/tools/emulator -avd Nexus_OneAPI_19 -debug-init -logat ‘*:v’
            unknown option: -logat
            please use -help for a list of valid options
            MacBook-Pro-di-Alberto:~ Alberto$ /Users/Alberto/Library/Android/sdk/tools/emulator -avd Nexus_OneAPI_19 -debug-init -logcat ‘*:v’
            emulator: found SDK root at /Users/Alberto/Library/Android/sdk
            emulator: Android virtual device file at: /Users/Alberto/.android/avd/Nexus_OneAPI_19.ini
            emulator: virtual device content at /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd
            emulator: virtual device config file: /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/config.ini
            emulator: using core hw config path: /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/hardware-qemu.ini
            emulator: Found AVD target API level: 19
            emulator: Read property file at /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//build.prop
            emulator: No boot.prop property file found.
            emulator: Warning: config.ini contains invalid skin.path entry: _no_skin
            emulator: autoconfig: -skin 480×800
            emulator: autoconfig: -skindir (null)
            emulator: keyset loaded from: /Users/Alberto/.android/default.keyset
            emulator: found magic skin width=480 height=800 bpp=16

            emulator: autoconfig: -kernel /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//kernel-qemu
            emulator: Auto-detect: Kernel image requires legacy device naming scheme.
            emulator: Auto-detect: Kernel does support YAFFS2 partitions.
            emulator: autoconfig: -ramdisk /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//ramdisk.img
            emulator: Using initial system image: /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//system.img
            emulator: autoconfig: -data /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/userdata-qemu.img
            emulator: autoconfig: -initdata /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/userdata.img
            emulator: autoconfig: -cache /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/cache.img
            emulator: autoconfig: -sdcard /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/sdcard.img
            emulator: Physical RAM size: 512MB

            emulator: CPU Acceleration: working
            emulator: CPU Acceleration status: HAX (version 2) is installed and usable.
            emulator: Target arch = ‘x86’
            emulator: Auto-config: -qemu -cpu qemu32
            Content of hardware configuration file:
            hw.cpu.arch = x86
            hw.cpu.model = qemu32
            hw.ramSize = 512
            hw.screen = touch
            hw.mainKeys = yes
            hw.trackBall = yes
            hw.keyboard = yes
            hw.keyboard.lid = no
            hw.keyboard.charmap = qwerty2
            hw.dPad = no
            hw.gsmModem = yes
            hw.gps = yes
            hw.battery = yes
            hw.accelerometer = yes
            hw.audioInput = yes
            hw.audioOutput = yes
            hw.sdCard = yes
            hw.sdCard.path = /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/sdcard.img
            disk.cachePartition = yes
            disk.cachePartition.path = /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/cache.img
            disk.cachePartition.size = 66m
            hw.lcd.width = 480
            hw.lcd.height = 800
            hw.lcd.depth = 16
            hw.lcd.density = 240
            hw.lcd.backlight = yes
            hw.gpu.enabled = yes
            hw.initialOrientation = portrait
            hw.camera.back = none
            hw.camera.front = none
            vm.heapSize = 32
            hw.sensors.proximity = yes
            hw.sensors.magnetic_field = yes
            hw.sensors.orientation = yes
            hw.sensors.temperature = yes
            hw.useext4 = yes
            kernel.path = /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//kernel-qemu

            kernel.newDeviceNaming = no
            kernel.supportsYaffs2 = yes
            disk.ramdisk.path = /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//ramdisk.img
            disk.systemPartition.initPath = /Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//system.img
            disk.systemPartition.size = 550m
            disk.dataPartition.path = /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/userdata-qemu.img
            disk.dataPartition.size = 200m
            avd.name = Nexus_OneAPI_19
            .
            QEMU options list:
            emulator: argv[00] = “/Users/Alberto/Library/Android/sdk/tools/emulator64-x86”
            emulator: argv[01] = “-serial”
            emulator: argv[02] = “stdio”
            emulator: argv[03] = “-enable-hax”
            emulator: argv[04] = “-android-hw”
            emulator: argv[05] = “/Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/hardware-qemu.ini”
            Concatenated QEMU options:
            /Users/Alberto/Library/Android/sdk/tools/emulator64-x86 -serial stdio -enable-hax -android-hw /Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/hardware-qemu.ini
            emulator: registered ‘boot-properties’ qemud service
            emulator: Using kernel serial device prefix: ttyS
            emulator: Ramdisk image contains fstab.goldfish file
            emulator: Found format of system partition: ‘ext4’
            emulator: Found format of userdata partition: ‘ext4’
            emulator: Found format of cache partition: ‘ext4’
            emulator: system partition format: ext4
            emulator: Mapping ‘system’ partition image to /tmp/android-Alberto/emulator-u2Uw0C
            emulator: nand_add_dev: system,size=0x22600000,file=/tmp/android-Alberto/emulator-u2Uw0C,initfile=/Users/Alberto/Library/Android/sdk/system-images/android-19/default/x86//system.img,pagesize=512,extrasize=0
            emulator: userdata partition format: ext4
            emulator: nand_add_dev: userdata,size=0xc800000,file=/Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/userdata-qemu.img,pagesize=512,extrasize=0
            emulator: cache partition format: ext4
            emulator: nand_add_dev: cache,size=0x4200000,file=/Users/Alberto/.android/avd/Nexus_OneAPI_19.avd/cache.img,pagesize=512,extrasize=0
            emulator: registered ‘boot-properties’ qemud service
            emulator: Adding boot property: ‘dalvik.vm.heapsize’ = ’32m’
            emulator: Adding boot property: ‘ro.config.low_ram’ = ‘true’
            emulator: Adding boot property: ‘qemu.sf.lcd_density’ = ‘240’
            emulator: Adding boot property: ‘qemu.hw.mainkeys’ = ‘1’
            emulator: Adding boot property: ‘qemu.sf.fake_camera’ = ‘none’
            emulator: Initializing hardware OpenGLES emulation support
            HAX is working and emulator runs in fast virt mode
            emulator: Kernel parameters: qemu.gles=1 qemu=1 console=ttyS0 android.qemud=ttyS1 androidboot.hardware=goldfish clocksource=pit androidboot.console=ttyS2 android.checkjni=1 androidboot.logcat=*:v ndns=1
            emulator: trying to find: /Users/alberto/Library/Android/sdk/tools/bios.bin

            emulator: trying to find: /Users/alberto/Library/Android/sdk/tools/lib/pc-bios/bios.bin

            emulator: trying to find: /Users/alberto/Library/Android/sdk/tools/vgabios-cirrus.bin

            emulator: trying to find: /Users/alberto/Library/Android/sdk/tools/lib/pc-bios/vgabios-cirrus.bin

            emulator: autoconfig: -scale 0.85625
            emulator: Forcing ro.adb.qemud to “0”.
            emulator: control console listening on port 5554, ADB on port 5555
            emulator: sent ‘0012host:emulator:5555’ to ADB server
            emulator: ping program: /Users/Alberto/Library/Android/sdk/tools/ddms
            emulator: ping command: /Users/Alberto/Library/Android/sdk/tools/ddms ping emulator standalone “NVIDIA Corporation” “NVIDIA GeForce 9400M OpenGL Engine” “2.1 NVIDIA-10.0.19 310.90.10.05b12”

            ti allego anche come appare la schermata. (potrebbe essere driver di nvidia (si blocca li) oppure il fatto che è installato vmware 7 e usa la virtualizzazione del processore, ma non è attivo come processo vmware)

          • no boot_prop? forse ho disabilitato il boot, nelle preferenze dell’emulatore. provo intanto a scaricare i driver nvidia per geforce 9400. ho letto che con yosemite ci sono problemi con questo tipo di scheda integrata. idee? per ora grazie!!

  2. Ho provato a fare tutto quello che mi hai detto, usavo la 5.0 lollipop,
    host gpu l’ho abilitato, ho provato anche wipe user data, senza
    successo. l’unica cosa che ho notato è che quando partiva il telefono
    era bianco e rimaneva bianco fino a quando non lo spostavo, poi non
    faceva il refresh dello schermo, ossia lo schermo non appariva nero ma
    con tutte le scritte semi cancellate della finestra che ho spostato sul
    telefono….

    E’ vero che ho fatto un’installazione pulita, ma devo dire che ho installato vmware che mi serve (ho linux e win7) e non vorrei che la virtualizzazione di HAXM facesse a pugni con quella di vmware, Secondo, ho anche dreamvaewer, quindi ho sia java 6 di apple (altrimenti non c’è modo di farlo partire -o forse si ma non ci sono riuscito) che java 8 di oracle. Terzo la scheda grafica è la nvidia9400m che questi 256 mb sono condivisi, quindi potrebbe essere un problema della scheda video relativo alla memoria… Ho provato l’emulatore Genymotion (ho dovuto installare anche virtualbox) e da solo funziona, ma sotto android studio (installando anche il plug in), poi si blocca scritta android, ma device finalmente online (cosa che prima andava offline dopo breve tempo). Miglioramenti ci sono ma non funziona ancora… riprovando con pazienza (molta) l’emulatore è partiro ma la versione di android è la 4.4 e quella sviluppata la 5.0 quindi nn va ancora (errore mio, basta scegliere nel progetto laminima sdk) ma ora è finalmente funzionante!! Tutto cio’ per far girare helloworld… andiamo bene!! 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *