2014-12-19 17 views
5

Ogni progetto creato in Android Studio 1.0.2 contiene diversi file che fanno riferimento al percorso assoluto del progetto. Non riesco nemmeno a spostare la mia directory di progetto se voglio, per non parlare di condividere il progetto con altri sviluppatori.Come forzare Android Studio a utilizzare percorsi relativi?

Esclusione di file in app/build, questi sono i file che contengono i percorsi assoluti:

.idea/workspace.xml 
.idea/modules.xml 
.idea/libraries/support_v4_21_0_3.xml 
.idea/libraries/appcompat_v7_21_0_3.xml 
.idea/gradle.xml 
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin 
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin 
app/app.iml 

Come forzo Android Studio per utilizzare i percorsi relativi per tutto?

Modifica: Sperimentando con vaniglia IDEA, ho ristretto l'origine di questi percorsi assoluti a un tipo specifico di modulo, che Android Studio utilizza apparentemente sempre senza offrire una scelta. Ma non sono ancora più vicino a capire come sradicarli.

In IDEA 14.0.2, se si crea un progetto vuoto o un progetto Android con un "Modulo applicazione", il progetto non contiene percorsi assoluti. Se crei un progetto con un "Gradle: modulo Android", allora contiene percorsi assoluti negli stessi file di un progetto Android Studio.

Edit # 2: Creato IDEA-134587

+0

Al momento sono su un autobus, ma sei sicuro che questi percorsi assoluti ti impediscano davvero di spostare un progetto? Sono quasi sicuro che se copi quella directory di progetto in una nuova directory e apri il progetto o lo reimporthi e fai una build pulita aggiornerà tutti quei file con nuovi percorsi assoluti che riflettono dove è la copia del progetto originale è. Sono quasi sicuro di aver copiato e aperto i miei progetti senza problemi, ma come ho detto sono su un autobus. Anche se, forse dovrei dare un'occhiata, forse quei progetti copiati hanno riferimenti all'originale a causa di questo. – Mark

+0

@ Mark Sì. Se cambio il percorso assoluto del progetto, quando AS tenta di aprirlo, dice, 'Impossibile caricare il file del modulo '/old/path/to/module.iml'; il file '/old/path/to/module.iml' non esiste. Volete rimuovere il modulo 'modulo' dal progetto? ' –

+0

@Mark E se dico di no, il modulo non viene ancora visualizzato. Non c'è nulla da pulire o costruire. –

risposta

3

Mi sono imbattuto nello stesso identico problema, ma la soluzione suggerita sopra contraddice JetBrains' advice e this answer. Inoltre, il mio collega che lavorava dallo stesso codice sorgente (con percorsi non espansi) e la versione di Android Studio non aveva il problema, quindi ho continuato a sbattere la testa contro il muro.

Alla fine abbiamo risolto il problema quando ci siamo resi conto che molti dei percorsi utilizzati includevano i collegamenti simbolici. Nel mio caso, avevo impostato un collegamento simbolico per ~/work in modo che indicasse/some/drive/with/space. All'interno di Android Studio tutta la mia fonte è stata chiamata da ~/work/source anziché da /some/drive/with/space/source. Quando ho cambiato tutto in modo che Android Studio si riferisse a cose con i loro percorsi effettivi, le variabili $PROJECT_DIR$ e $MODULE_DIR$ iniziarono magicamente a funzionare ei miei file .iml non si danneggiavano più. YMMV.

TL; DR: non utilizzare collegamenti simbolici nei percorsi del progetto!

+0

Ah! Questo è un bug piuttosto fastidioso di per sé. Ho sempre mantenuto i miei progetti in una directory che è un link simbolico. –

12

In generale, non prendere in considerazione nessuna delle file .iml o il contenuto della cartella .idea di far parte del progetto, e don condividere questi file, non controllarli nel controllo del codice sorgente e non spostarli con il progetto. Pensa a loro come a file di cache.

I file Gradle sono la fonte della verità, quindi se hai problemi con i percorsi assoluti, chiudi il progetto, elimina i file non condivisibili e reimportalo dagli script di build di Gradle.

+0

Non si spiega perché è necessario copiare questi file. Perché non ricostruire il progetto dai suoi file Gradle e non preoccuparti di cosa mette in questi file? –

+1

Spostare file in giro è una cosa molto comune da fare. Il buon senso e anni di esperienza con altri strumenti di costruzione dettano che i progetti non dovrebbero mai contenere percorsi assoluti. –

+2

Non sto difendendo il comportamento corrente di Android Studio, semplicemente spiegandolo. Android Studio non considera i file .iml o la cartella .idea come parte del suo "progetto" e gli utenti sono scoraggiati dal condividerli o controllarli nel controllo del codice sorgente o simili. So che è confuso perché in linea di massima IntelliJ * considera * questi elementi come parte del progetto e perché è più intelligente sui percorsi, ma Android Studio considera Gradle come la fonte della verità. Il fatto che ci siano dei percorsi assoluti è probabilmente un bug, ma a bassa priorità per questo motivo. Non c'è altra soluzione per questo. –

0

Inoltre, assicurarsi di non conservare i file all'interno di .gradle come parte del progetto condiviso.

Inoltre, un set di file che potreste voler condividere sono i vostri file sotto .idea/copyright anche se ciò consente di avere impostazioni di copyright condivise.

Quindi un eventuale file di .gitignore potrebbe essere:!!

.gradle
.idea
.idea/copyright/[YourCopyrightFile] .xml
.idea/copyright/profile_settings.xml
* .iml
costruire
local.properties

+0

Ciò che dovrebbe essere condiviso è una preoccupazione secondaria per non essere nemmeno in grado di spostare file locali senza interrompere i progetti. –

0

Hmm. Io non vedo gli stessi percorsi assoluti in quei file, vedo solo i riferimenti a MODULE_DIR e project_dir, come ad esempio:

./app/app.iml: <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" /> 

o:

./.idea/workspace.xml: <entry file="file://$PROJECT_DIR$/.idea/libraries/appcompat_v7_21_0_2.xml"> 

Mi chiedo se questo è solo problema di Linux o qualcosa nelle tue impostazioni?

+0

Neanche io vedo percorsi assoluti su Linux, solo quelli che ho visto ieri sera su Mac che fanno riferimento a $ MODULE_DIR $ e $ PROJECT_DIR $ Che aspetto hanno le tue linee come Kevin? – Mark

+0

In Studio e IDEA, il mio ./app/app.iml inizia sempre con un tag 'module' che ha una proprietà come' external.root.project.path = "$ USER_HOME $/Projects/IDEA/Derp" ' . E il mio ./.idea/workspace.xml contiene sempre tag come "