Visualizzazione post con etichetta Android Studio. Mostra tutti i post
Visualizzazione post con etichetta Android Studio. Mostra tutti i post

giovedì 11 febbraio 2021

Emulatore Android su Apple M1

Attualmente Android Studio non e'compatibile con Apple M1 in particolare per quanto riguarda l'emulatore che richiede le estensioni VTX (le app si possono sempre compilare ed eseguire su dispositivi fisici) E' comunque possibile installare in modo separato l'emulatore in beta da https://github.com/google/android-emulator-m1-preview
Prima di utilizzarlo si deve in ogni caso indicare la posizione di adb che normalmente si trova in /Users/lucainnocenti/Library/Android/sdk/platform-tools

mercoledì 8 aprile 2020

Android Studio WiFi Adb Plugin

Per programmare con Adb via WiFi si puo' fare in vari modi

Usando un plugin (la via piu' comoda) si puo' installare un plugin di Android Studio da File/Settings/Plugins e scegliendo per esempio Android WiFi ADB


Si aggiungera' una icona (in verde chiaro al centro nell'immagine successiva)


Si collega il telefono via USB agganciandosi alla stessa WiFi del portatile. Si clicca sull'icona, si attende la connessione e successivamente si puo' disconnettere il cavo USB

Altrimenti da shell si possono inviare i seguenti comandi

A cavo USB attaccato si digita

adb shell setprop service.adb.tcp.port 4444
adb tcpip 4444
adb connect ip_telefono:4444

lunedì 12 febbraio 2018

Opencv Android SDK su Android Studio

per utilizzare OpenCV su Android mediante l'SDK si procede prima scaricando il voluminoso pacchetto (sono oltre 300 Mb ma sono contenuti gli apk di tutte le applicazioni demo, la documentazione e le librerie compilate per differenti piattaforme hardware)

A questo punto da Android Studio (devono esserer gia' installati NDK e CMake) si crea un normale progetto ... poi /File/New/Import Module e si cerca la directory nell'SDK opencv/sdk/java

Si deve poi editare il file opencv/build.gradle

CompileSDKVersion 23
buildToolsVersion "23.0.2"
TargetSDKVersion 23

fatto cio' si mette la visualizzazione dell'albero di destra (in Project Files) si seleziona Android/App/tasto destro/Open Module Settings/Dependecies/tasto +/Module Dependencies/ e si seleziona OpenCV Library


si va poi in App/New/Folder/JNIFolder/Change Folder Location e si seleziona /src/main/jniLibs

si apre il folder e si copiano tutte le sottodirectories dall'SDK opncv/sdk/native/libs/ cancellando poi cio' che non e' *.so

Per provare se se le cose funzionavano ho provato ad usare il secondo esempio dell'SDK (quello che implementa il filtro Canny in realtime) ed il programma di esempio si ostinava a non funzionare. Dopo un po' di tempo perso a pigiare tasti ho scoperto che commentando la riga

System.loadLibrary("mixed_sample")

tutto funziona correttamente


venerdì 29 dicembre 2017

Compilare ARToolKit su Android Studio 3

Le istruzioni per installare ARToolKit su Android Studio sono piuttosto vecchie e di fatto non funzionano nella configurazione attuale (sono state scritte nel 2016)

Per fare funzionare gli esempi, dopo avere compilato la libreria nell'NDK (come da istruzioni), si devono modificare i file di progetto come segue (vedi linee evidenziate in giallo)

---------------------------
buildscript {
    repositories {
        jcenter()
    }
    
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.11.1'

        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }
}

allprojects {
    repositories {
        jcenter()
    }
}
---------------------------


gradle.wrapper.properties
---------------------------
#Fri Dec 29 14:39:59 CET 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
---------------------------


build.gradle (Module ArSimple)
---------------------------

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23        buildToolsVersion = "23.0.2"
        defaultConfig.with {
            applicationId = "org.artoolkit.ar.samples.ARSimple"            minSdkVersion.apiLevel = 15            targetSdkVersion.apiLevel = 22            versionCode = 1            //Integer type incremented by 1 for every release, major or minor, to Google store            versionName = "1.0" //Real fully qualified major and minor release description
            buildConfigFields.with {
                //Defines fields in the generated Java BuildConfig class, in this case, for                create() {           //default config, that can be accessed by Java code                    type = "int"     //e.g. "if (1 == BuildConfig.VALUE) { /*do something*/}".                    name = "VALUE"                    //See: [app or lib]/build/generated/source/buildConfig/[package path]/                    value = "1"      //     BuildConfig.java                }
            }
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false            proguardFiles.add(file('proguard-rules.pro'))        }
    }

    android.productFlavors {
    }
    android.sources {
        main {
            jni {
                source {
                    srcDirs = ['src/main/nop']
                }
            }
        }
        main {
            jniLibs {
                source {
                    srcDirs = ['src/main/libs']
                }
            }
        }
    }
    
}

dependencies {
    //compile 'com.android.support:support-v4:23.0.1'    //compile 'com.android.support:appcompat-v7:23.0.1' //Only required when the target device API level is greater than    compile project(':aRBaseLib')
}     

------------------------------------------------------

lunedì 20 novembre 2017

HAX emulator error per Android Studio su Mac High Sierra

Oggi ho ripreso dopo un po' di tempo il Mac per sviluppare su Android, in particolar modo dopo l'aggiornamento ad HIgh Sierra



La novita' e' che l'emulatore Android non ne voleva sapere di funzionare uscendo con Exit Code 0 dopo aver posto le rimostranze per non aver trovato l'accelerazione HAX

Dopo averne provate diverse la soluzione e' stata File->Invalidate Cache->Invalidate and Restart




mercoledì 2 agosto 2017

Kotlin su Android Studio 2

Come aggiungere il supporto a Kotlin in Android Studio 2

Per prima cosa da File/Preferences si cercano i plugin e si installa JetBrains Plugin. Fatto cio' appare nella colonna di destra il plugin di Kotlin da poter installare


Fatto cio', per convertire un progetto Android/Java in Android/Kotlin, si crea un normale progetto, successivamente con la combinazione cmd+shift+A (in Mac) si cerca Convert Java File to Kotlin

L'IDE a questa punto richiede di risincronizzare il progetto



ed il codice Java viene convertito in Kotlin. Al monte di compilare viene anche chiesto di aggiornare gradle
il codice di un semplice esempio che cambia la stringa di una textview e' il seguente

package innocenti.luca.com.kot_test

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val testo: TextView = findViewById(R.id.textView) as TextView;
        testo.setText("Luca");

    }
}


lunedì 16 gennaio 2017

Integrazione di Android Studio con GitHub

Android Studio permette una buona integrazione con GitHub ma ci sono un po' di passi non banalissimi per arrivare al risultato desiderato.

Per prima cosa dall'interfaccia Web di GitHub si crea il nuovo progetto

Poi da Android Studio si Crea un Git Repository



facendolo puntare alla directory dell'applicazione in fase di sviluppo (in questo caso una applicazione per Android Wear)


Si apre un terminale da dentro Android Studio e nella root del progetto si digita il codice


git remote add origin https://github.com/[username]/[project_name].git

si conferma
In seguito si effettua il primo commit
A questo punto si e' pronti per fare il primo push del progetto verso GitHub




La richiesta della password e' quella relativa all'account GitHub (in questo caso e' pero' il portachiavi di Mac)








lunedì 18 gennaio 2016

Gradle error

Oggi compilando, senza modifiche, un progetto Android Studio che fino a due giorni fa funzionava ho avuto l'errore

Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "efdc9743630b8ba5a00eaeaa1375fff7cdb0e3cb"


la soluzione e' piuttosto nascosto e si deve aggiornare la stringa

classpath 'com.android.tools.build:gradle:2.0.0-alpha2'

a

classpath 'com.android.tools.build:gradle:2.0.0-alpha3'
in build.gradle di CordovaLib ed in build.gradle di Android

giovedì 7 gennaio 2016

Scrivere file con Cordova su Android Studio/XCode

Con Apache Cordova e' possibile scrivere dati sulla memoria del dispositivo mobile ma, a causa delle enormi differenze della gestione dello storage nei vari sistemi operativi, non e' possibile avere una soluzione unica ma si devono effettuare adattamenti ad hoc

Per prima cosa si deve aggiungere il plugin File con il comando

cordova plugin add org.apache.cordova.file
IOS
Il filesystem in IOS ovviamente non viene esposto e lo scambio dati avviene solo tramite ITunes



Il progetto Xcode di Cordova deve essere modificato come segue

1) deve essere aggiunto una chiave file info.plist
Application supports Itunes file sharing = YES
(UIFileSharingEnabled = YES)


2) deve essere aggiunto al file config.xml (dopo gli allow) il seguente codice
-------------
    <feature name="File">
        <param name="ios-package" value="CDVFile" />
    </feature>
    <feature name="FileTransfer">
        <param name="ios-package" value="CDVFileTransfer" />
    </feature>
    <preference name="iosPersistentFileLocation" value="Library" />
    <preference name="BackupWebStorage" value="local" />
-------------

3) il codice HTML5 deve essere leggermente modificato rispetto agli esempi di Cordova (in particolare si deve puntare sulla directory Documents che su IOS e' persistente ed in lettura/scrittura. Per un esempio si puo' leggere anche questo post
-------------
/* globals console,document,window,cordova */
document.addEventListener('deviceready', onDeviceReady, false);

var logOb;

function fail(e) {
    console.log("FileSystem Error");
    console.dir(e);
}

function onDeviceReady() {
    
    window.resolveLocalFileSystemURL(cordova.file.documentsDirectory, function(dir) {
                                     console.log("got main dir",dir);
                                     dir.getFile("log.txt", {create:true}, function(file) {
                                                 console.log("got the file", file);
                                                 logOb = file;
                                                 writeLog("App started");
                                                 });
                                     });
    
    document.querySelector("#actionOne").addEventListener("touchend", function(e) {
                                                          //Ok, normal stuff for actionOne here
                                                          //
                                                          //Now log it
                                                          alert("tasto 1");
                                                          writeLog("actionOne fired");
                                                          }, false);
    
    document.querySelector("#actionTwo").addEventListener("touchend", function(e) {
                                                          //Ok, normal stuff for actionTwo here
                                                          //
                                                          //Now log it
                                                          alert("tasto 2");

                                                          writeLog("actionTwo fired");
                                                          }, false);
    
}

function writeLog(str) {
    if(!logOb) {
        alert("errore write log");
            return;
            }
    var log = str + " [" + (new Date()) + "]\n";
    console.log("going to log "+log);
    alert("Luca");
    logOb.createWriter(function(fileWriter) {
                       
                       fileWriter.seek(fileWriter.length);
                       alert("Luca");
                       
                       var blob = new Blob([log], {type:'text/plain'});
                       fileWriter.write(blob);
                       console.log("ok, in theory i worked");
                       }, fail);
}

function justForTesting() {
    logOb.file(function(file) {
               var reader = new FileReader();
               
               reader.onloadend = function(e) {
               console.log(this.result);
               };
               
               reader.readAsText(file);
               }, fail);
    

}
-------------


Android

Su Android le cose sono decisamente piu' semplici

si dichiara in config.xml che si vuole usare il plugin
-------------
<feature name="File">
<param name="android-package" value="org.apache.cordova.FileUtils" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.FileTransfer" />
</feature>
-------------

Si settano in permessi di scrittura in AndroidManifest.xml
-------------
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-------------

Di nuovo il codice HTML5 dell'esempio di Cordova in cui e' evidenziata in giallo la modifica per Android
-------------
/* globals console,document,window,cordova */
document.addEventListener('deviceready', onDeviceReady, false);

var logOb;

function fail(e) {
console.log("FileSystem Error");
console.dir(e);
}

function onDeviceReady() {

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function(dir) {
console.log("got main dir",dir);
dir.getFile("log.txt", {create:true}, function(file) {
console.log("got the file", file);
logOb = file;
writeLog("App started");
});
});

document.querySelector("#actionOne").addEventListener("touchend", function(e) {
//Ok, normal stuff for actionOne here
//
//Now log it
writeLog("actionOne fired");
}, false);

document.querySelector("#actionTwo").addEventListener("touchend", function(e) {
//Ok, normal stuff for actionTwo here
//
//Now log it
writeLog("actionTwo fired");
}, false);

}

function writeLog(str) {
if(!logOb) return;
var log = str + " [" + (new Date()) + "]\n";
console.log("going to log "+log);
logOb.createWriter(function(fileWriter) {

fileWriter.seek(fileWriter.length);

var blob = new Blob([log], {type:'text/plain'});
fileWriter.write(blob);
console.log("ok, in theory i worked");
}, fail);
}

function justForTesting() {
logOb.file(function(file) {
var reader = new FileReader();

reader.onloadend = function(e) {
console.log(this.result);
};

reader.readAsText(file);
}, fail);

}
-------------

venerdì 19 giugno 2015

Aggiungere directory raw in Android Studio


La directory /raw non e' creata di default da Android Studio.
Per includerla si deve cliccare destro sull'albero del progetto /New/Android resource directory



e poi selezionara rae dal secondo menu a tendina



Includere librerie aar in Android Studio

In questo post viene descritto come includere librerie Android in formato aar in un progetto di Android Studio. Per questo esempio viene indicato come installare Android Beacon Library

1) Esempio 1 : partendo dal file aar

In questo caso si scarica in locale il file aar dal sito del produttore


Dal progetto precedentemente create si clicca destro per New/Module


Selezionando Import Jar or Aar Package


Per selezionare il file si usa il quadratino all'estrema destra della prima casella di testo

Al termine si osserva che compare la nuova libreria nell'albero del progetto

Per includere la nuova libreria nella catena di compilazione di Gradle si deve editare il file build.gradle relativo al Modulo app (attenzione, esistono diversi file build.gradle all'interno di un progetto Android Studio) come indicato dalla riga evidenziata

-----------------------------------------------
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "luca_innocenti.nearbeewear"        minSdkVersion 21        targetSdkVersion 21        versionCode 1        versionName "1.0"    }
    buildTypes {
        release {
            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.support:wearable:1.2.0'    compile 'com.google.android.gms:play-services-wearable:7.5.0'    compile 'org.altbeacon:android-beacon-library:2+'}
-----------------------------------------------

1) Esempio 2 : usando un repository remoto

al posto di installare la libreria in locale si puo' richiederla al momento della compilazione da un server remoto. Per ottenere cio' basta indicare l'indirizzo del server remoto ed il nome della libreria che si vuole includere sempre nel file build.gradle del modulo dell'applicazione (vedi parti in giallo)
Per seguire questa strada e' necessario che la macchina di sviluppo sia sempre connessa con Internet

-----------------------------------------------
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "luca_innocenti.beacontrasmitter"        minSdkVersion 21        targetSdkVersion 21        versionCode 1        versionName "1.0"    }
    buildTypes {
        release {
            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }
    }
}
final def var = repositories {
    jcenter{
        url "http://jcenter.bintray.com/"    }
}
var

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.support:wearable:1.2.0'    compile 'com.google.android.gms:play-services-wearable:7.5.0'}dependencies {
    compile 'org.altbeacon:android-beacon-library:2+'}




lunedì 9 settembre 2013

Primi passi con Android Studio

Ho decisi di provare a sviluppare una piccola App completamente su Android Studio.

Una prima difficolta': come gia'  visto qui al primo avvio viene scaricato dalla rete Gradle. Se si e' dietro ad un proxy si deve andare nei Settings (si trovano spulciando la prima finestra di installalazione) e cercare Proxy Server ma attenzione l'indirizzo non deve essere del tipo http://mioproxy.it ma semplicemente mioproxy.it senza http://)

L'altra differenza che salta immediatamente agli occhi rispetto ad Eclipse e' la mancanza della finestra di Logcat (dove vengono mostrati i messaggi di debug)..si puo' attivare mediante la combinazione Alt+6



Per avere il completamente automatico si puo' usare Ctrl+Maius+Barra spaziatrice
Per l'help Maiusc+F1

sabato 18 maggio 2013

Android Studio su Linux





A differenza della versione per Windows, l'installazione di Android Studio su Debian e' nettamente piu' lineare. L'aspetto da sottolineare e' la richiesta di avere installato Oracle JDK e non OpenJDK

Android Studio su Windows

E' stato rilasciato da Google il nuovo ambiente di sviluppo Android basato da IntellJidea al posto di Eclipse.

L'nstallazione su Windows non e' proprio banalissima perche' devono essere configurata alcuni parametri altrimenti Android Studio si installa ma non parte senza neanche dare particolare messaggi di debug

La prima cosa da fare e' verificare (e se non esiste deve essere creata) la presenza della variabile di ambiente JAVA_HOME che punta alla directory di installazione di Java (in questo caso C:\Programmi\Java\jkd-1.7.0_09. Dopo si deve verificare che sia inclusa nella Path la directory di Java bin nel mio caso C:\Programmi\Java\jkd-1.7.0_09\bin


Fatto cio' il programma parte


ma alla prima creazione di un progetto si deve essere necessariamente collegati ad Internet perche' viene scaricato ulteriore software (Gradle) che non e' incluso nel pacchetto di installazione


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...