我开始在Android Studio上使用Gradle,当我在项目中添加AndroidAnnotations支持时,我在google上发现必须在gradle.build文件中添加以下内容:
configurations {
apt
}
Run Code Online (Sandbox Code Playgroud)
--
dependencies {
apt 'com.googlecode.androidannotations:androidannotations:2.7.1'
compile 'com.googlecode.androidannotations:androidannotations-api:2.7.1'
}
Run Code Online (Sandbox Code Playgroud)
--
android.applicationVariants.all { variant ->
aptOutput = file("${project.projectDir}/gen")
println "****************************"
println "variant: ${variant.name}"
println "manifest: ${variant.processResources.manifestFile}"
println "aptOutput: ${aptOutput}"
println "****************************"
variant.javaCompile.doFirst {
println "*** compile doFirst ${variant.name}"
aptOutput.mkdirs()
variant.javaCompile.options.compilerArgs += [
'-processorpath', configurations.apt.getAsPath(),
'-AandroidManifestFile=' + variant.processResources.manifestFile,
'-s', aptOutput
]
}
}
Run Code Online (Sandbox Code Playgroud)
我在网络上找不到的第一件事就是apt的意思。我浏览了gradle文档(我找了apt一词),没有找到任何东西。
另一个疑问是,由于我已经在“首选项”菜单上添加了注释库,为什么我需要编写最后一个脚本来编写生成的文件?
非常感谢你。
我试图让retrolambda通过与gradle这个Android编译工作.对java 8的更改导致了android注释的一些问题.
我从这些帖子中尝试了几乎所有内容:(在阅读所有这些链接之前更新3)
http://code.google.com/p/android/issues/detail?id=55764
https://bitbucket.org/hvisser/ android-apt
AndroidAnnotations Nothing Generated,Empty Activity
Android studio + Gradle + Android Annotations
如何使用Google Android Gradle Plugin编译AndroidAnnotations?
但我一直得到这些错误:
Gradle:错误:包android.annotation不存在
Gradle:错误:找不到符号类TargetApi
那些gradle警告:
Gradle ::支持处理器'com.googlecode.androidannotations.AndroidAnnotationProcessor'支持的源版本'RELEASE_6'小于-source'1.8'
Gradle ::任何处理器都无法识别以下选项:'[androidManifestFile]'
这是我的build.gradle文件,使用/sf/answers/1176155151/(链接3最热门的解决方案):
buildscript {
repositories {
mavenCentral()
maven { url 'http://download.crashlytics.com/maven' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
classpath 'com.google.guava:guava:14.0.1'
classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
classpath 'me.tatarka:gradle-retrolambda:1.1.1'
}
}
repositories {
mavenCentral()
maven { url 'http://download.crashlytics.com/maven' }
}
apply plugin: 'android'
apply plugin: 'crashlytics'
apply plugin: 'retrolambda'
ext.daggerVersion = '1.0.0'
ext.androidAnnotationsVersion = …Run Code Online (Sandbox Code Playgroud) android gradle java-8 android-annotations android-gradle-plugin
使用@Background注释时,我们开始一个新线程.如果我们在这个线程正在执行旋转屏幕的位置时,我们是否会丢失该线程的回调或者如何处理?使用Loaders,它在屏幕后面排序,因此我们不必担心在使用异步任务时经常出现的问题.
但@Background注释如何解决这个问题呢?
如何正确配置IntelliJ IDEA以处理注释?
使用maven目标processor:process工作正常,但如何在不使用IntelliJ IDEA中的maven目标的情况下处理(使用它的注释处理首选项)?
在IntelliJ的首选项/注释处理器下,我有以下设置:" Enable annotation processing"选中,选项" Obtain processors from project classpath"
我将" Annotation Processors"部分留空,因为我应该通过类路径自动找到它.在处理过的模块下,我选择我的Android模块,然后选择' target/generated-sources/apt'作为' Generated Sources Directory Name'.
在我的项目结构中,我设置了模块依赖项" Maven: com.googlecode.androidannotations:androidannotations:2.6"和" Maven: com.googlecode.androidannotations:androidannotations:api:2.6",以便我在类路径中拥有处理器.
但是构建项目不会处理注释,而是会收到警告' Annotation processing without compilation requested but no processors were found.'
如果我尝试手动将注释处理器设置为' com.googlecode.androidannotations.AndroidAnnotationProcessor'并选择' /path/to/libs/androidannotations-2.6-api.jar'作为处理器的路径,那么com.googlecode.androidannotations.AndroidAnnotationProcessor在尝试构建项目时,我会收到错误" 未找到注释处理器" .
这是我在截图中的配置:http://imageshack.us/photo/my-images/841/intellijaa.png/

我试图使用AndroidAnnotaions,但ClassNotFoundException在我的项目中收到错误.
出于测试目的,我创建了一个新项目,Activity我仍然得到错误.我的文件:
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rodrigora.testannotations"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.rodrigora.testannotations.MainActivity_"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package com.rodrigora.testannotations;
import android.app.Activity;
import android.view.Menu;
import com.googlecode.androidannotations.annotations.EActivity;
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu); …Run Code Online (Sandbox Code Playgroud) 我在谷歌开发者的一个Android视频中看到,他们实现了两种方法,并通过注释定义了应该根据api级别调用哪种方法.
不幸的是,我再也找不到视频了(我记不起哪个视频了),所以我在StackOverflow上搜索了这个问题,发现了这个:针对不同API级别的不同Java方法
在他使用注释@apilevel的问题中,我找不到那个注释.
基本上,我想要做的是:
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private int getDisplayWidth(Display display){
Point size = new Point();
display.getSize(size);
return size.x;
}
@TargetApi(Build.VERSION_CODES.FROYO)
private int getDisplayWidth(Display display){
return display.getWidth();
}
Run Code Online (Sandbox Code Playgroud)
但是ADT给了我重复的方法错误.
我想学习Annotation,并创建一个演示项目.但是当我创建一个扩展AbstractProcessor的类时,Android Studio找不到这个类.我该如何添加它.
我正在使用注释来确保参数不为null,假设这会导致编译器检查.
public @Nullable ApplicationAccount accountForKey(@NonNull String key) {
return accounts.get(key);
}
Run Code Online (Sandbox Code Playgroud)
但是,通过运行此代码,我在此行上得到了NullPointerException
java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:883)
Run Code Online (Sandbox Code Playgroud)
那么注释有什么意义呢?
如果我像这样写额外的支票,那就更加模糊了
return key!=null?accounts.get(key):null;
Run Code Online (Sandbox Code Playgroud)
Android Studio警告我,检查没用!
更新:完整调用堆栈:
Caused by java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:883)
at co.getcontrol.services.MerchantCenter.accountForKey(MerchantCenter.java:72)
at co.getcontrol.model.customers.CustomersAggregator.loadCustomerDetails(CustomersAggregator.java:91)
at co.getcontrol.model.customers.CustomerDetailsPresenter.callData(CustomerDetailsPresenter.java:39)
at co.getcontrol.reskin.ui.customers.CustomerDetailsViewFragment.onCreateView(CustomerDetailsViewFragment.java:152)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)
at co.getcontrol.ui.ControlActivity.onStart(ControlActivity.java:13)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
at android.app.Activity.performStart(Activity.java:5353)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2352)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441)
at android.app.ActivityThread.access$900(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5345)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud) java android nullpointerexception non-nullable android-annotations
我正在阅读有关依赖注入的内容,发现 2 个引起我注意的库,AndroidAnnotations 和 Dagger 2。我看到的是 AA 有很多功能,包括 DI,但大多数开发人员都使用 Dagger 2 进行 DI。
我想知道 DI 与 AA 和 DI 与 Dagger 2 有什么区别?如果我使用 AA 就意味着我不需要 Dagger 2?
我找不到太多关于 DI 与 AA 以及与其他库的比较的信息。
任何信息都会有很大帮助。
我正在尝试@SharefPref在 kotlin 中使用AndroidAnnotations,但出现以下错误
org.androidannotations.annotations.sharedpreferences.Pref can only be used on an element that extends org.androidannotations.api.sharedpreferences.SharedPreferencesHelper
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
//Interface
@SharedPref(SharedPref.Scope.APPLICATION_DEFAULT)
open interface MyPreferences {
@DefaultInt(-1)
fun someIntValue():Int
}
//Fragment
@Pref
lateinit open var sharedPref:CongressPreferences_
//usage within fragment
val get: Int = sharedPref.selectedEventId().get()
Run Code Online (Sandbox Code Playgroud) android kotlin android-annotations kotlin-android-extensions