2013-05-22 1 views
43

Когда я добавляю @NotNull или @Nullable аннотации к параметру Android Studio автоматически помогает мне с добавлением /lib/annotations.jar и импортаимпорта NotNull или Nullable и Android Studio не будет компилировать

import org.jetbrains.annotations.NotNull 
import org.jetbrains.annotations.Nullable; 

Но после того, как это, проект не будет компилироваться. Если я также удалю аннотации, но сохраняю инструкции импорта, проект по-прежнему не будет компилироваться. Но, если я удалю операторы импорта для NotNull и Nullable, компилирует проект fine!

Android Студия дает общую ошибку:

Gradle: 
FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':Bugtester:compileDebug'. 
> Compilation failed; see the compiler error output for details. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

Запуск gradlew compileDebug из ЦМД дает небольшой намек:

:Bugtester:compileDebug FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':Bugtester:compileDebug'. 
> Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable to point to the according directory. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Так что я проверил свои переменные окружения, и они устанавливаются как:

JAVA_HOME=C:\Program Files (x86)\Java\jre7 
JDK_HOME=C:\Program Files\Java\jdk1.7.0_21\ 

У кого-нибудь есть идея? (Я новичок в программировании на Java и Android)

+2

Я не знаком с Gradle, но вы, вероятно, следует добавить зависимость на 'annotations.jar'' build.gradle'. Что-то вроде 'dependencies {compile files ('full/path/to/annotations.jar')}' –

+0

Спасибо, это исправило проблему! Я думал, что добавление зависимости было тем, что создала андроид-студия автоматически, когда я впервые написал @NotNull, и мне хотелось, чтобы я что-то добавил. – Moberg

+1

Вы можете найти объяснение этого поведения здесь http: // stackoverflow.com/questions/16622410/how-do-i-add-a-library-project-to-the-android-studio-andome-itsome-ask-dont/16683375 # 16683375 –

ответ

49

Я думаю, правильный путь использует оригинальную JetBrains библиотеку из MavenCentral хранилища в ваших зависимости build.gradle (последнюю доступную версию в данном примере):

dependencies { 
    compile 'com.intellij:annotations:[email protected]' 
    ... 
} 
5

В настоящий момент в API Android или в библиотеке поддержки нет аннотаций NonNull/Nullable. Вы также не можете использовать IntelliJ, так как они не находятся на пути класса компиляции при построении с помощью Gradle.

Однако вы можете легко создать свой собственный. Это очень просто:

@Documented 
@Retention(RetentionPolicy.CLASS) 
@Target({METHOD,PARAMETER,LOCAL_VARIABLE,FIELD}) 
public @interface NonNull { 
} 

После того, как это вниз, вы можете настроить IntelliJ (или Android-студия), чтобы признать этот (и соответствующий @Nullable) быть аннотаций по умолчанию используется для нулевых проверок.

Для этого перейдите в настройки IntelliJ, под Inpections, а затем найдите @NotNull/@Nullable problems запись под номером Probable Bugs в дереве инспекции.

Выберите элемент, а в правом нижнем углу появится кнопка «Настроить аннотации». Это позволит вам настроить свои собственные аннотации, поскольку тот, который IntelliJ будет использовать для этой проверки.

+1

Как использовать аннотации Android? Вы имеете в виду http://androidannotations.org/? – Moberg

+0

Я не вижу @NotNull аннотации в структуре вообще Xav ... – superjugy

+0

Я ошибся. Я отредактирую это. –

3

Самый простой способ добавить следующее в раздел зависимостей вашего файла build.gradle.

dependencies { 
    compile 'com.intellij:annotations:[email protected]' 
    ... ... 
} 

EDIT: обновлен для использования @ идеи RichieHH, чтобы использовать репозиторий Maven, который, безусловно, способ сделать это.

+2

. Легче и чище добавлять зависимость от maven, я бы подумал, а затем позвольте градле позаботиться об этом. например, зависимости { compile 'com.intellij: аннотации: + @ jar' } – RichieHH

+0

Да, возможно, это лучше –

0

Лучший способ заключается в использовании Maven DEPENDENCY

  1. установить хранилище путь, добавив

    repositories { 
        maven { 
         url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases" 
        } 
    } 
    
  2. добавить зависимость

    dependencies { 
        compile 'org.jetbrains:annotations:7.0.2' 
    } 
    
  3. ПРИБЫЛЬ!

37

Вы также можете использовать Android собственного @NonNull & @Nullable:

  • Добавьте следующие build.gradle:

    dependencies { 
        ... 
        // For @Nullable/@NonNull 
        compile 'com.android.support:support-annotations:+' 
    } 
    
  • Перейти к Файл/НастройкаНастройки проектаОсмотры и поиска "обнуляемым".

    В постоянных условиях & исключений и @ NotNull/@ Обнуляемые проблемы, нажмите Настройка аннотаций и выберите аннотации Android.

    Вы также можете проверить Предлагайте @Nullable аннотаций ... под постоянными условиями & исключений, или, возможно, настроить другие параметры.

+3

. Ваш ответ решил мою проблему. Только одно: предупреждение «Избегайте использования + в номере версии» показано ... Я установил свою версию следующим образом: 'compile 'com.android.support: support-annotations: 23.1.1'' – Primoz990

3

В настоящее время вы должны использовать аннотации из android.support.annotation пакета. Я просто не знаю, когда они добавили их в docs есть не то, что типичное предложение «Добавлено в уровне API X», и я не чувствую, что чтение блогов и т.д.>]

import android.support.annotation.NonNull; 

... 

public void fooFighter(@NonNull Object honeyBunny){ 
    ... 
} 
7

Для использования Андроид поддерживает анотацию, например - @Nullable, @NonNull и т. Д. В вашем проекте должна быть импортирована аннотационная библиотека поддержки Android. Просто добавить эту строку в dependensies в Gradle файле

dependencies { compile 'com.android.support:support-annotations:+' }

И импорта пакета в классе.
Для использования @Nullable аннотацию:

import android.support.annotation.Nullable; 

Для @NonNull

import android.support.annotation.NonNull; 

Более подробную информацию вы можете найти здесь Android developers

Смежные вопросы