In ogni progetto che ho provato a creare in Android Studio, tutti gli usi di R sono contrassegnati in rosso con il messaggio di errore "impossibile risolvere il simbolo R", ma la compilazione riesce e l'applicazione viene eseguita. Questo è davvero fastidioso, in quanto blocca il completamento automatico e mostra enormi linee ondulate rosse su tutto il mio codice.
Sto eseguendo Android Studio 1.7.0 e creando il progetto con le impostazioni predefinite. Uno screenshot è allegato:
Questo è il mio build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
Ecco come appare la struttura del progetto:
Qualche idea su come risolvere questo problema?
Per alcune ragioni, Android studio usa configurazioni diverse per l'editor e per il compilatore. Se funziona per il compilatore allora va bene. Se non funziona per l'editor. (vede file non risolti).
Hai bisogno di aggiungere alcune directory al sorgente del tuo progetto. Per esempio tutte le risorse dovrebbero essere contrassegnate come "source".
Struttura del progetto
Seleziona "Modules", poi il tuo progetto. E seleziona la scheda sources
. Sulla destra trovate la vostra directory delle risorse e cliccate sul pulsante blu "source". Chiudi tutto e dovrebbe funzionare.
Inoltre, dovrai assicurarti che
build/source/r/debug
sia anche una fonte. Io ho tutti i miei build/source/*/debug
contrassegnati come sorgente.
<?xml version="1.0" encoding="UTF-8"?>
<module external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":SherlockHolmes" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/source/r/debug" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/source/aidl/debug" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/debug" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/debug" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/debug" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/source/r/test" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/source/aidl/test" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/test" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/test" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/test" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/assets" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/res" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/resources" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/apk" />
<excludeFolder url="file://$MODULE_DIR$/build/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/exploded-bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android 4.2.2" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Sherlock.aar" level="project" />
<orderEntry type="library" name="SlidingMenu.aar" level="project" />
<orderEntry type="library" name="support-v4-13.0.0" level="project" />
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Non sono sicuro di questo, ma l'ho sentito funzionare mentre sono abbastanza sicuro che non dovrebbe cambiare nulla. Prova a compilare e salvare il progetto dopo aver commentato tutte le linee che richiedono R
. Poi quando tutto non è rosso. Prova ad aggiungerle di nuovo. La cosa strana è che la tua build/source non viene generata.
Anche questa domanda suggerisce di controllare "compiler use external build"
Assicurati anche che nel tuo codice java non ci sia. import android.r;
da quello che hai mostrato, tutto sembra a posto. È solo strano che la build/source non venga creata. Per esempio, non ho nessuna build/apk. Forse sei in modalità di rilascio e non crea quelle directory.
Ecco la mia soluzione temporanea finché non ne trovo una migliore:
Usando Everything, trovate dove viene creato R.java. Nel mio caso era `C:\Program Files (x86)\Android\android-studio\system\compiler\system\compiler\nome progetto\nome progetto.cb969c52.generated\aapt\nome modulo.6badd9a4\production\com\nome progetto\nome modulo
Nella vista progetto, clicca sul modulo e premi F4. Ignora l'avvertimento.
Fai clic su "+ Add Content Root" e seleziona la suddetta cartella. Assicurati che sia segnata in blu (come fonte).
Dopo aver fatto questo, improvvisamente tutti gli avvisi sono spariti. Il problema è che se collabori con altre persone, il nome della cartella è diverso su ogni macchina, quindi fai attenzione quando sincronizzi.