2014-11-25 16 views
8

(. So che ci sei più domande su StackOverflow e altrove (come gruppo Google) sull'aggiunta Parcelable per NetworkInfo, ma non si tratta di quella)Android AIDL Errore di compilazione: non riusciva a trovare l'importazione per la classe

Il mio lavoro è inferiore a $ (AOSP_ROOT)/dispositivo/e comprende più file supportl. uno di esso è come,

package com.example; 

parcelable SomeRequest; 

E un altro AIDL è come,

package com.example; 

import com.example.SomeRequest; 
interface SomeService { 
    SomeRequest getRequest(); 
} 

E avrò errori di compilazione, come,

device/somedevice/sdk/libs/aidl/com/example/SomeService.aidl:9: couldn't find import for class com.example.SomeRequest 

mi chiedo è l'ordine di elaborazione dei file aidl. Il mio Android.mk sembra,

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl) 
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, aidl) 

viene introdotto Questo errore di generazione dopo mi sono trasferito AIDL file da src/cartella AIDL/cartelle (per qualche motivo devo farlo). Ha funzionato prima ma ora, anche se l'ho spostato di nuovo in src/cartella, non funziona più. Ho provato a ripulire $ (AOSP_ROOT)/out/device/target ma non aiuta.

Idee?

+0

Questo collegamento è stato molto utile: http://fauxgrammer.com/?p=4 – user2288580

risposta

6

Finalmente ho risolto.

Se si scava in /build/core/base_rules.mk, si scoprirà che LOCAL_AIDL_INCLUDES è in realtà le cartelle da includere durante la fase di compilazione AIDL oltre alle cartelle predefinite come framework o così via.

$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES)) 

In questo caso specifico, ciò che si desidera è in realtà,

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl) 
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl 
+0

Che cosa è '/ build/core/base_rules.mk'? Non riesco a trovare questo percorso ... – m0skit0

+1

Cosa succede se il mio file * .aidl definisce nella libreria, non è nel percorso locale corrente, proprio come ../LibraryProject/aidl, come risolvere? – codezjx

3

Così mi sono guardato intorno - la soluzione è quella di mettere i file AIDL solo nella propria directory chiamata AIDL, che mi sembra un po ' altri hanno suggerito.

Si scopre che Android Studio sembra lì, ma non sa bene cosa fare sui file .aidl inseriti nella directory src.

Non capisco. Io proprio non capisco. Le importazioni di AIDL hanno funzionato perfettamente in Eclipse. Android Studio non è pronto per la produzione. Questo è un importante passo indietro.

Sto riscontrando problemi nel trovare il compilatore AIDL per trovare anche le importazioni e penso che ci sia un modo migliore di modificare base_rules.mk, gestito dalla piattaforma.

Arg!

+0

Un collegamento correlato [http://fauxgrammer.com/?p=4](http://fauxgrammer.com/?p=4) –

+0

Sto utilizzando Android Studio 2.1 e ho fatto praticamente quello che mi hai suggerito: Metti 2 file .aidl nella cartella aidl. Tuttavia, quello che mi è successo è che Android Studio mi ha impedito di creare il secondo .aidl (cioè SomeRequest.aidl basato su OP). Si scopre che è necessario creare questo file un po 'brute-forzatamente: creare un .aidl con un nome casuale e quindi modificare il nome corretto. In caso contrario, Android Studio non è felice. – TimeString

+0

Ho già file aidl in una cartella/helpl separata. Ho anche provato con la sottocartella in src/e una cartella radice. Ancora lo stesso problema. – m0skit0

0

Ok, quindi stavo lottando per giorni cercando di capire lo stesso problema. Pulire/Ricostruzioni non ha funzionato per me. Alla fine, ho realizzato un errore molto semplice che stavo facendo in Android Studio: quando ho fatto clic con il pulsante destro del mouse e ho creato un nuovo "AIDL", non stavo facendo clic nella cartella appropriata come le mie classi del modello originale.

Ad esempio, il mio modello si trovava in un pacchetto java denominato com.example.model, ma non ho fatto clic con il pulsante destro del mouse in quella cartella quando ho creato il mio AIDL. Quindi, quando Android Studio genera la cartella AIDL per me, farebbe riferimento alla cartella sbagliata e finirei con un errore di compilazione.Mi auguro che la documentazione di Android abbia chiarito che dovevamo fare clic con il pulsante destro del mouse nella cartella appropriata prima di generare i file AIDL. Lo so, sembra sciocco, ma spero che questa risposta si applichi ad alcuni di voi!

+0

No, non ha funzionato. – m0skit0

0

basta che il nome del file .aidl sia uguale al file .java!

+0

È già lo stesso nome. – m0skit0

Problemi correlati