标签: android-annotations

是否有一个注释表示最大 Android API 版本?

该注释@RequiresApi有助于要求仅在给定的 API 级别或更高级别上调用带注释的元素。然而,似乎没有相应的注释来要求仅在给定的 API 或更低版本上调用带注释的元素。

例如,给出类似的内容:

@RequiresMaxApi(28) // or @DeprecatedSinceAndroid(29)
fun doSomethingWithExternalStorage() {
    val dir = Environment.getExternalStorageDirectory() // This is deprecated in API 29
    // ...
}
Run Code Online (Sandbox Code Playgroud)

doSomethingWithExternalStorage()从不包含检查的代码调用,例如:

if (VERSION.SDK_INT < 29) {
    doSomethingWithExternalStorage()
}
Run Code Online (Sandbox Code Playgroud)

如果没有上述 API 检查,doSomethingWithExternalStorage()将显示 lint 错误/警告,类似于如何@RequiresApi显示。

据我了解,这也和工作原理类似@DeprecatedSinceKotlin

是否有现有的注释可以满足这些要求,或者是否有其他方法可以达到预期的结果?

android backwards-compatibility android-appcompat android-annotations androidx

14
推荐指数
1
解决办法
757
查看次数

Android注释:带注释的类Xyz_找不到它的原始版本("找不到符号类Xyz")

我使用最新的Android Annotations 2.6和IntelliJ IDEA.有时我总是对注释/类路径/编译顺序有问题.似乎不规律地发生.我今天早些时候编译了项目,然后稍后更改了res/layout-xml文件,然后我尝试构建项目并得到错误.

但是xml和java源文件中没有语法错误或任何内容.

问题是带注释的类没有找到它的原始类

cannot find symbol class Intro
Run Code Online (Sandbox Code Playgroud)

错误.

我的项目结构:

/src/
    /app/activity/Intro
    ...
/gen-annotation-processed/
    /app/activity/Intro_
    ...
/gen
    ...
Run Code Online (Sandbox Code Playgroud)

我的IDEA注释首选项:

处理器路径:

/path/to/project/ext-libs/androidannotations-2.6.jar
Run Code Online (Sandbox Code Playgroud)

处理器FQ名称:

com.googlecode.androidannotations.AndroidAnnotationProcessor
Run Code Online (Sandbox Code Playgroud)

项目的Android IDEA模块中的源文件夹:

gen
gen-annotation-processed
src
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

构建项目时在IDEA中登录时出错(通过IDEA,没有ant或maven):

在此输入图像描述

(类"简介"存在于src文件夹中,并且没有错误.)

更新:我现在正在使用它,虽然不知道在来回使用设置之后我改变了什么/在哪里.它可能实际上只是IDEA的一个问题而不是实际上与android-annotations相关,尚不确定.

通常似乎工作的是:做一个Rebuild(可能抛出编译错误,忽略).然后做一个Build(不是一个完整的重建).由于某些原因,多次编译运行在执行重建时无法正常工作,需要执行rebuild + build组合.

android annotations intellij-idea android-annotations

13
推荐指数
1
解决办法
3751
查看次数

Gradle + Annotations + Flavors =不会运行注释处理器

我有一个Gradle构建脚本,它使用注释处理器(Android Annotations)来生成代码.建筑物很好,直到我添加了一个新的Pro Flavor.我可以构建Free味道,但是当我构建Pro flavor时,注释处理器不会运行.这会导致代码丢失并且构建失败.

这是我的脚本:

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots/'
    }
}


ext.androidAnnotationsVersion = '3.0-SNAPSHOT';

configurations {
    apt
}


dependencies {
    compile files('libs/android-support-v13.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
    apt "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "org.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"


    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 17

        versionCode 29
        versionName "2.0.3"
        packageName "com.MyCompany.MyApp"

    }

    productFlavors {
        free …
Run Code Online (Sandbox Code Playgroud)

android gradle annotation-processing android-annotations android-studio

13
推荐指数
1
解决办法
4922
查看次数

Android Eclipse - 无法看到注释处理选项

我无法在Eclipse首选项中设置注释处理的选项. 在此输入图像描述

不确定,因为我什么时候遇到这个问题但是在我最后更新eclipse之后肯定已经开始发生了.我也试过在工具/支持文件夹中粘贴annotations.jar文件,但没有好处.

请帮助.

TIA

java eclipse android android-annotations

12
推荐指数
1
解决办法
4319
查看次数

Android @Intdef用于标记如何使用它

我不清楚如何使用@Intdef作为这样的标志:

@IntDef(
  flag = true
  value = {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
Run Code Online (Sandbox Code Playgroud)

这个例子直接来自文档.这究竟意味着什么?这是否意味着它们最初都设置为真?如果我在下面做"或":

NAVIGATION_MODE_STANDARD | NAVIGATION_MODE_LIST
Run Code Online (Sandbox Code Playgroud)

这是什么意思......我有点困惑,这里发生了什么.

android android-annotations

11
推荐指数
1
解决办法
2191
查看次数

Android支持注释"应该有@Retention(RetentionPolicy.SOURCE)"

我在库中使用@Retention@StringDef注释我的一些方法,我面临一个奇怪的警告,我想了解.

在静态类中SIP,我使用此注释:

public static final String CODEC_SPEEX_16K  = "speex/16000/1";
public static final String CODEC_SPEEX_8K   = "speex/8000/1";
public static final String CODEC_SPEEX_32K  = "speex/32000/1";
public static final String CODEC_ILBC_8K    = "iLBC/8000/1";
public static final String CODEC_GSM_8K     = "GSM/8000/1";
public static final String CODEC_PCMU_8K    = "PCMU/8000/1";
public static final String CODEC_PCMA_8K    = "PCMA/8000/1";
public static final String CODEC_G722_16K   = "G722/16000/1";

@Retention(RetentionPolicy.CLASS)
@StringDef({
    CODEC_SPEEX_16K,
    CODEC_SPEEX_8K,
    CODEC_SPEEX_32K,
    CODEC_ILBC_8K,
    CODEC_GSM_8K,
    CODEC_PCMU_8K,
    CODEC_PCMA_8K,
    CODEC_G722_16K
    })
public @interface CodecName {}
Run Code Online (Sandbox Code Playgroud)

编译很好,没有任何警告. …

java android android-annotations

11
推荐指数
0
解决办法
1978
查看次数

AndroidAnnotations Nothing Generated,Empty Activity

我正在尝试在Android Studio中使用AndroidAnnotations创建项目.当我构建并运行项目时,一切似乎编译得很好,但我只得到应用程序的空白活动.此外,AndroidAnnotations似乎没有生成任何内容.

我已经添加了androidannotations-api-2.7.1.jar作为我的项目的依赖项,并启用了处理器路径的注释处理路径,该路径androidannotations-2.7.1.jar位于一个单独的文件夹中androidannotations-api-2.7.1.jar.我检查了存储生成的相对于模块内容根的源,并尝试了许多不同的源目录 - 从generated,到gen/aa,到(当前)build/source/aa匹配在Android Studio中创建生成文件的位置.没有任何效果.我已将清单中的活动名称更改为Activity_,并将配置设置为在项目运行时启动它.

我唯一的其他依赖项是android-support-v4和ActionBarSherlock.我试过这两个禁用,没有结果.我最初计划将Roboguice与AndroidAnnotations结合使用,但暂时禁用它以尝试专注于此问题.

我也在使用或试图使用Gradle.这是我目前的build.gradle:

buildscript {
  repositories {
    maven { url 'http://repo1.maven.org/maven2' }
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}

apply plugin: 'android'

dependencies {
  compile files('libs/android-support-v4.jar')
  compile files('libs/actionbarsherlock-4.3.1.jar')
  compile files('libs/androidannotations-api-2.7.1.jar')
}

android {
  compileSdkVersion 17
  buildToolsVersion "17.0.0"

  defaultConfig {
    minSdkVersion 7
    targetSdkVersion 17
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我还没有弄清楚Gradle是如何工作的,所以我大多只是手动添加依赖项,就像普通项目一样,然后将编译行放在Gradle中,这样项目就可以正常编译.我知道这可能不是使用它的正确方法.

我的活动及其布局是相当标准的,我只是从官方指南中复制它们以开始使用AndroidAnnotations.

更新:所以我回到Maven用它来测试构建,我注意到一些奇怪的东西.似乎即使我在Maven中设置了它,也没有生成任何东西.但是,使用Maven构建,我可以在不更改清单中的活动名称的情况下运行项目Activity_,项目将编译并正确运行.这是非常奇怪的,似乎它可以进一步混淆问题,或者如果它也表明了Gradle的某些东西,则可以简化它.

android gradle android-annotations android-studio

10
推荐指数
2
解决办法
1万
查看次数

无法使用Gradle构建Android项目(使用Android Annotations)

我正在尝试使用gradle来构建我的Android项目Android Annotations,但我仍然会遇到错误.在我的java类中找不到AA.

同样在gradle文件中我得到一些提示:

versionName"1.0"< - 'versionName'不能应用于'(java.lang.String)'

'build'中的'main'不能应用于'(groovy.lang.Closure)'

        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java', 'GENERATED_FOLDER']
            resources.srcDirs = ['src/main/resources']
            res.srcDirs = ['src/main/res']
            assets.srcDirs = ['src/main/assets']
        }
Run Code Online (Sandbox Code Playgroud)

以下是我的完整gradle脚本:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // replace with the current version of the Android plugin
        classpath 'com.android.tools.build:gradle:0.9.2'
        // the latest version of the android-apt plugin
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.1'
    }
}

repositories {
    mavenCentral()
    mavenLocal()
}

apply plugin: 'android'
apply plugin: 'android-apt'
def AAVersion = '3.0.1'

dependencies {
    // Android annotations
    apt "org.androidannotations:androidannotations:$AAVersion" …
Run Code Online (Sandbox Code Playgroud)

android gradle android-annotations

10
推荐指数
1
解决办法
1万
查看次数

Android Studio Update 1.0的Android注释错误

我正在Android Annotations和我合作,今天我做了新的更新Android Studio 1.0.

当我构建项目时它给了我这个错误:

Error:(40, 0) Could not find property 'processResources' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@54335f5.
Run Code Online (Sandbox Code Playgroud)

这是我的build.gradle文件my project:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'


        // the latest version of the android-apt plugin https://bitbucket.org/hvisser/android-apt
        // http://stackoverflow.com/a/25939518
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
} …
Run Code Online (Sandbox Code Playgroud)

android android-annotations android-studio build.gradle

10
推荐指数
1
解决办法
5794
查看次数

如何将@IntRange() 支持注释应用于 Kotlin 属性设置器

我一直试图找出如何申请@IntRange(from = 1)我的 Kotlin 财产。经过几次失败的尝试,我终于在 Java 中创建了我想要的类,并将其转换为 Android Studio 中的 Kotlin。这是我的 Java 类:

import android.support.annotation.IntRange;

public class SimpleThing {

    private int val;

    @IntRange(from = 1)
    public int getVal() {
        return val;
    }

    public void setVal(@IntRange(from = 1) int val) {
        this.val = val;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我从 Android Studio 得到的自动转换:

import android.support.annotation.IntRange

class SimpleThing {

    @get:IntRange(from = 1)
    var `val`: Int = 0

}
Run Code Online (Sandbox Code Playgroud)

@IntRange似乎得到应用吸气剂,但不二传手。是否可以将此注释也应用于 setter,以便出现适当的 lint 警告。目前我刚刚覆盖了 set 方法来抛出一个 IllegalArgumentException 像这样:

@get:IntRange(from = 1)
var rowSize: …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-lint android-annotations kotlin-interop

10
推荐指数
2
解决办法
4792
查看次数