Autore Topic: Importare una libreria in AndroidStudio  (Letto 3833 volte)

Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Importare una libreria in AndroidStudio
« il: 02 Novembre 2013, 19:31:47 CET »
0
Ciao a tutti!

sono circa 3 ore che sto cercando di importare una libreria (non un jar ma una cartella), in particolare PagerSlidingTabStrip, all'interno del mio progetto di AndroidStudio versione 0.3.3 (l'ultima uscita ad oggi).

Non sono mai riuscito ad accedere alla classe PagerSlidingTabStrip all'interno di una mia classe del progetto.
Le strade che ho provato sono:
1) Aggiungere PagerSlidingTabStrip come Module nella sezione Module Settings (come letto in molti "tutorial" su stackoverflow)
2) Aggiungere PagerSlidingTabStrip come External Library e ancora niente

Entrambi questi due punti provati in questa schermata:


3) Creare a mano la cartella 'libraries' nel mio progetto e inserendo la cartella di PagerSlidingTabStrip. E successivamente in build.gradle ho provato con la riga
Codice: [Seleziona]
compile files(':libraries:nome_cartella') oppure anche
Codice: [Seleziona]
compile project(':libraries:nome_cartella') all'interno di "dependencies"

E ancora ho errore quando provo ad accedere alla classe PagerSlidingTabStrip. Niente da fare.

Avete già provato a fare una cosa di questo tipo?
In rete pare ci sia molta confusione su questa procedura di inserimento.

Spero possiate aiutarmi
Grazie


 

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Importare una libreria in AndroidStudio
« Risposta #1 il: 02 Novembre 2013, 22:01:28 CET »
0
Quello che devi realizzare è una cosa di questo tipo:

- root
  - libfolder
    -- lib1
  - myProject
     build.gradle
  setting.gradle
  build.gradle


Devi innanzitutto modificare settings.gradle
Codice (Groovy): [Seleziona]
  include ':myPproject' , ':libfolder:lib1'
Nel tuo caso lib1 è  PagerSlidingTabStrip.
Dentro PagerSlidingTabStrip devi mettere il suo build.gradle

Codice (Groovy): [Seleziona]
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:19.0.0'  //oppure compile 'com.android.support:support-v4:18.0.0'
}

android {
  compileSdkVersion 19
  buildToolsVersion '19.0.0'  //oppure il tuo

  sourceSets {
    main {
      manifest.srcFile 'AndroidManifest.xml'
      java.srcDirs = ['src']
      res.srcDirs = ['res']
    }
  }
}

Dentro myProject/build.gradle
Codice (Groovy): [Seleziona]
  //...
  apply plugin: 'android'
  //...
  dependencies {
    // Libraries
    compile project(':libfolder:lib1')
  }

Quindi clicca su Sync with gradle files.

Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Re:Importare una libreria in AndroidStudio
« Risposta #2 il: 03 Novembre 2013, 00:10:55 CET »
0
Grazie mille!!
Alla fine mi mancava il passaggio di Sync di Gradle...  :-(
Ora dovremmo essere a posto (spero).

Da qualche parte c'è una guida ben fatta sull'uso di AndroidStudio?


Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Re:Importare una libreria in AndroidStudio
« Risposta #3 il: 04 Novembre 2013, 10:31:37 CET »
0
Ne approfitto per chiedere anche una dritta sull'inserimento di google-play-service_lib in Android Studio, per utilizzare nel mio caso le mappe.

All'inizio ho provato ad inserire nelle dependencies:

Codice: [Seleziona]
compile 'com.google.android.gms:play-services:4.0.30'
Dove la versione 4.0.30 è l'ultima versione scaricata proprio ieri tramite SDK Manager.
Ma questa strada non funziona.

Considerando che il folder google-play-service_lib non è un progetto Gradle, l'ho importato in Eclipse e poi l'ho esportato come Gradle per poi inserirlo nella cartella libs del mio progetto in AndroidStudio.
Qui poi ho seguito le procedure che mi hai descritto nel post precedente.
Ma ancora non ho avuto nessun risultato.

In fase di compilazione non ho errori. All'interno delle mie classi o degli xml riesco ad usare tranquillamente ad usare le classi di GoogleMap.

A Runtime però, in entrambi i casi descritti prima, ottengo sempre il seguente log errore:

Codice: [Seleziona]
11-04 10:23:48.531  26693-26693/it.miaapp.miaapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: com.google.android.gms.maps.SupportMapFragment
            at it.miaapp.miaappOPPagerAdapter.getItem(OPPagerAdapter.java:47)
            at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
            at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:829)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1044)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
            at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
            at android.view.View.measure(View.java:15504)
            at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
            at android.view.View.measure(View.java:15504)
            at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:615)
            at android.view.View.measure(View.java:15504)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:15504)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
            at android.view.View.measure(View.java:15504)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2385)
            at android.view.View.measure(View.java:15504)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1979)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1222)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1395)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4526)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
            at android.view.Choreographer.doCallbacks(Choreographer.java:555)
            at android.view.Choreographer.doFrame(Choreographer.java:525)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4921)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
            at dalvik.system.NativeStart.main(Native Method)

Sinceramente non so più che strada prendere.
Ho provato anche con un progetto di test che utilizza solo le mappe e basta ma ancora niente da fare.
Qualche suggerimento?

Grazie

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Importare una libreria in AndroidStudio
« Risposta #4 il: 04 Novembre 2013, 10:54:01 CET »
0
La procedura è corretta ma c'è un particolare.

Per poter utilizzare questa versione
Codice (Groovy): [Seleziona]
compile 'com.google.android.gms:play-services:4.0.30'devi averla sul dispositivo dove fai il test.

E non mi risulta che sia iniziato il rollout di questa versione.
Quindi di fatto, al momento non è utilizzabile.

Devi usare le precedenti.
Codice (Groovy): [Seleziona]
compile 'com.google.android.gms:play-services:3.2.65'

Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Re:Importare una libreria in AndroidStudio
« Risposta #5 il: 04 Novembre 2013, 11:16:29 CET »
0
Ho modificato come mi dici tu ma il problema persiste.

Ho provato ad aggiungere inoltre nel Manifest la seguente linea di codice
Codice (XML): [Seleziona]
<meta-data android:name="com.google.android.gms.version" android:value="302650" />come spiegato qui:
http://stackoverflow.com/questions/19723811/after-google-play-service-update-to-version-13-i-got-an-error

Ora però mi viene mostrato questo messaggio nel log:
Codice: [Seleziona]
11-04 11:06:22.226  29405-29405/it.myapp.testmap W/GooglePlayServicesUtil﹕ Google Play services out of date.  Requires 4030500 but found 3266134
Probabilmente la versione 4030500 è quella che utilizza Android Studio dopo l'aggiornamento da SDK Manager, mentre sul device la versione non è aggiornata.
(nell'app mi viene mostrata la schermata in cui è presente un link al PlayStore per scaricare l'ultima versione di Google Plat services).

Qui un altro link dove viene annunciata la versione 4 di Google Play Services (che penso ora sia disponibile per tutti)
http://android-developers.blogspot.it/2013/10/google-play-services-40.html

EDIT:
Qui c'è l'issue nel forum di Google dove si discute di questa cosa.
https://code.google.com/p/android/issues/detail?id=61675

Personalmente ho provato a disinstallare il Google Play Services nuovo da SDK Manager e installare Google Play services for Froyo che corrisponde alla versione 3.2.65
Anche con questo accorgimento però il messaggio che esce è sempre lo stesso:
Codice: [Seleziona]
11-04 11:06:22.226  29405-29405/it.myapp.testmap W/GooglePlayServicesUtil﹕ Google Play services out of date.  Requires 4030500 but found 3266134
« Ultima modifica: 04 Novembre 2013, 11:35:34 CET da nicopasso »

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Importare una libreria in AndroidStudio
« Risposta #6 il: 04 Novembre 2013, 11:35:34 CET »
0
Questo problema è diffuso in questo momento e il motivo è proprio quello che l'ambiente di sviluppo è più aggiornato del device.

Se guardi
sdk\extras\google\google_play_services\libproject\google-play-services_lib\res\values\versions.xml puoi vedere la versione:

Codice (XML): [Seleziona]
<integer name="google_play_services_version">4030500</integer>
Questo è il workaround che viene consigliato e sembra funzionare:

1) open the SDK manager
2) uninstall package "Google Play Services" (Rev. 13)
3) install package "Google Play Services for Froyo" (Rev. 12)

Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Re:Importare una libreria in AndroidStudio
« Risposta #7 il: 04 Novembre 2013, 11:38:21 CET »
0
Abbiamo scritto contemporaneamente. :)

Come dicevo nell'EDIT precedente, ho provato proprio questa strada ma ho ancora lo stesso problema.

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Importare una libreria in AndroidStudio
« Risposta #8 il: 04 Novembre 2013, 11:40:22 CET »
0
Abbiamo scritto contemporaneamente. :)

Come dicevo nell'EDIT precedente, ho provato proprio questa strada ma ho ancora lo stesso problema.

Hai rifatto il sync e clean con gradle?

Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Re:Importare una libreria in AndroidStudio
« Risposta #9 il: 04 Novembre 2013, 11:54:03 CET »
0
Ora tutto ok.
Ho chiuso AndroidStudio e lanciato da terminale (oltre a clean che da solo non aveva sortito l'effetto desiderato) anche gradlew --refresh-dependencies che a quanto pare è servito a qualcosa (nonstante dovrebbe essere solo un controllo della versione di gradle.
Tant'è...ora vedo correttamente le mappe!

Un grazie immenso!

Offline walterp

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    S4 Samsung
  • Sistema operativo:
    Android 4.2
Re:Importare una libreria in AndroidStudio
« Risposta #10 il: 02 Luglio 2014, 01:49:09 CEST »
0
ciao a tutti
Se invece si vuole importare una libreria jar quali passi dovrei seguire ?
Vorrei importare la libreria AmarinoLibrary_v0_55.jar nel mio progetto in modo tale da usufruire delle funzionalità gia scritte e testate per usare bluetooth con Arduino ....:(
Forse mi conviene riscrivere la libreria in un nuovo progetto visto che ci sono anche i sorgenti
grazie
Walter

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Importare una libreria in AndroidStudio
« Risposta #11 il: 02 Luglio 2014, 09:04:15 CEST »
0
ciao a tutti
Se invece si vuole importare una libreria jar quali passi dovrei seguire ?

La tua struttra sarà cosi
Codice: [Seleziona]
root
  app
     libs
     src
       main
     builg.gradle
  builg.gradle
  settings.gradle

Metti il jar in libs ed inserisci nel build.gradle di app:
Codice: [Seleziona]
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

Offline walterp

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    S4 Samsung
  • Sistema operativo:
    Android 4.2
Re:Importare una libreria in AndroidStudio
« Risposta #12 il: 02 Luglio 2014, 09:48:01 CEST »
0
ciao Mario
grazie per la risposta .
In effetti nel build.gadle di app e' gia cosi '

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile fileTree(dir: 'libs', include: ['*.jar'])

}

Ma solo ora vedo nella cartella libs il file .jar con le relative sottocartelle che contengono i nomi dei namespace da importare nel progetto .Pardon i nomi dei packages ...
In effetti ieri sera non lo vedevo , ma ora si probabilmente avro' combinato un po di porcherie e al riavvio ha caricato giusto :(
Ora provo
Grazie ;)
ciao
Walter

Post unito: [time]02 Luglio 2014, 11:15:32 CEST[/time]
Si in effetti dopo aver importato la libreria .jar bisogna chiudere l'ambiente e rilanciarlo ;)

Post unito: 02 Luglio 2014, 11:37:24 CEST
tutto sommato , dopo aver studiato un po l'architettura di android , i file xml e la loro utilità ...in qualsiasi (o quasi) progetto android sviluppato con altri ambienti tipo eclipse o altri , si puo' sempre recuperare i file delle risorse , i files java e con opportuni accorgimenti rigenerare nuove app basate su app sviluppate con tools diversi ect
Mi piace questo android studio
« Ultima modifica: 02 Luglio 2014, 11:37:24 CEST da walterp, Reason: Merged DoublePost »

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Importare una libreria in AndroidStudio
« Risposta #13 il: 02 Luglio 2014, 11:54:06 CEST »
0


Post unito: [time]02 Luglio 2014, 11:15:32 CEST[/time]
Si in effetti dopo aver importato la libreria .jar bisogna chiudere l'ambiente e rilanciarlo ;)

No, non serve chiudere AndroidStudio.
Basta che esegui il sync del progetto con gradle (c'è un tasto nella toolbar).

Offline walterp

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    S4 Samsung
  • Sistema operativo:
    Android 4.2
Re:Importare una libreria in AndroidStudio
« Risposta #14 il: 02 Luglio 2014, 13:35:07 CEST »
0
ok trovato anche il pulsante sync ....pero' c'e' ancora qualcosa che non a mettere a fuoco ...il seguente problema
Codice: [Seleziona]
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=Wapp.embedded.droiddroid.arduinoandroid/.DroidDroid }
Error type 3
Error: Activity class {Wapp.embedded.droiddroid.arduinoandroid/Wapp.embedded.droiddroid.arduinoandroid.DroidDroid} does not exist.


la classe base l'ho chiamata DroidDroid ma sembrerebbe che non la trova
Nel file manifest.xml non vedo nulla di strano
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="Wapp.embedded.droiddroid.arduinoandroid" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="Wapp.embedded.droiddroid.arduinoandroid.DroidDroid"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Wapp.embedded.droiddroid.arduinoandroid.DroidDroidControls"
            android:label="@string/app_name"
            android:screenOrientation="landscape"
            android:configChanges="orientation|keyboardHidden"
            >
        </activity>

    </application>

</manifest>


non capisco  :-(

Post unito: [time]02 Luglio 2014, 13:39:17 CEST[/time]
praticamente il make viene eseguito senza errori e anche il build o rebuild che dir si voglia
L'errore esce quando lancio l'applicazione al genymotion che si trova gia in esecuzione

Post unito: [time]02 Luglio 2014, 23:28:38 CEST[/time]
e' un problema molto ricorrente sul web ma non ne esce nessuno , c'e' chi dice che si tratta di uno spazio o un puntino...
tutto il santo giorno con questo problema senza capire il perche
Meglio buttare e rifare tutto il progetto ...mah ....



Post unito: 03 Luglio 2014, 02:31:47 CEST
Ok problema risolto , a quanto pare la parola Wapp nel package non lo voleva , ora funziona cosi ho terminato la prima applicazione semplice
La prima activity recupera il MAC address del modulo bluetooth al quale connettersi , e dopo aver premuto ok lancio la seconda activity che gestisce due seekbar
I valori delle seekbar vengono trasmessi via bluetooth e ricevuto da un modulo che e' connesso al microcontrollore .Da qui vario l'intensita' di due luci e piloto due motorini tramite apposito drive .
Applicazione utile per chi costruisce e gioca con i robot , non e' il mio caso ma da qui si possono fare molte applicazioni , per esempio interfacciare sistemi di allarme con cancelli elettrici e domotika , aprire cancelli e porte , disinserire allarmi , leggere dati ect .
Molto bene .....mi ha fatto sudare freddo ma alla fine qualcosa si inizia a vedere ;)
« Ultima modifica: 03 Luglio 2014, 02:31:47 CEST da walterp, Reason: Merged DoublePost »