我正在尝试使用Android注释框架,因为它看起来非常强大.我完全坚持基于它配置我的第一个项目.我遵循了wiki的每一步,但是在构建之后它不会生成任何文件.
所以当我从清单中请求生成的类时:
<activity android:name=".MyActivity_"
android:label="@string/app_name">
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
java.lang.ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)
我的活动与维基中的活动完全相同:
@EActivity(R.layout.main)
public class MyActivity extends Activity {
@ViewById
EditText myInput;
@ViewById(R.id.myTextView)
TextView textView;
@Click
void myButton() {
String name = myInput.getText().toString();
textView.setText("Hello "+name);
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:刚刚找到一个目录".apt_generated",但它在构建后是空的.
android annotations manifest classnotfoundexception android-annotations
我正在努力将项目迁移到Android Studio/Gradle,我在使用Android Annotations正确构建项目时遇到了一些问题.从gradle控制台输出看起来,编译后会发生注释处理吗?是对的吗?不应该以前发生吗?奇怪的是,如果我点击运行,则会出现"编辑配置"对话框,底部显示"错误:未找到默认活动".
我有另一个项目使用一个非常相似的build.gradle文件,它运行正常,我完全被这个问题困住了.任何帮助将非常感谢!
请注意我也尝试过各种其他方法,包括https://github.com/excilys/androidannotations/wiki/Building-Project-Gradle,但结果没有区别.
我在项目根目录中的build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
allprojects {
repositories {
mavenCentral()
}
}
Run Code Online (Sandbox Code Playgroud)
和my/android文件夹中的build.gradle:
apply plugin: 'android'
ext.androidAnnotationsVersion = '2.7.1';
configurations {
apt
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
buildTypes {
release {
runProguard false
}
}
productFlavors {
defaultFlavor {
proguardFile 'proguard-rules.txt'
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Dagger注入一个Android Annotated Activity.
java.lang.IllegalArgumentException: No inject registered for members/com.app.server.AddServerActivity_. You must explicitly add it to the 'injects' option in one of your modules.
如果我尝试添加com.app.server.AddServerActivity_到模块,我会得到一个不同的错误
Error: java.lang.ClassCastException: com.sun.tools.javac.code.Attribute$Error cannot be cast to com.sun.tools.javac.code.Attribute$Class
java.lang.RuntimeException: java.lang.ClassCastException: com.sun.tools.javac.code.Attribute$Error cannot be cast to com.sun.tools.javac.code.Attribute$Class
at com.sun.tools.javac.main.Main.compile(Main.java:469)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132)
at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:167)
at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:364)
at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:276)
at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:190)
at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:162)
at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1018)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:742)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:790)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:705)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:526)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:314)
at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:179)
at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:129)
at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:220)
at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:112)
at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler$1.run(BuildMain.java:132)
at org.jetbrains.jps.service.impl.SharedThreadPoolImpl$1.run(SharedThreadPoolImpl.java:41) …Run Code Online (Sandbox Code Playgroud) 我还没有找到任何关于如何做到这一点的例子.我假设基于这样的例子是不可能的:
@Bean(MyImplementation.class)
MyInterface myInterface;
Run Code Online (Sandbox Code Playgroud)
注入的类已经确定.
android unit-testing mocking ioc-container android-annotations
我遇到了android-annotations和继承问题:
@EFragment(R.layout.fragment_foo)
public class TestBaseFragment {
@AfterViews
public void afterTestBaseFragmentViews() {
}
}
@EFragment(R.layout.fragment_foo)
public class TestFragment extends TestBaseFragment {
@AfterViews
public void afterTestFragmentViews() {
}
}
Run Code Online (Sandbox Code Playgroud)
产生:
public final class TestFragment_
extends TestFragment
{
...
private void afterSetContentView_() {
afterTestFragmentViews();
afterTestBaseFragmentViews();
}
...
Run Code Online (Sandbox Code Playgroud)
如何在afterTestFragmentViews()之前确保调用afterTestBaseFragmentViews()?或者您可以指出任何描述如何使用AndroidAnnotations进行继承的文档吗?
我想知道是否有人使用Transfuse以及它与Android Annotations的区别.我的意思是每个人的利弊,除了这两个之外还有其他选择.
谢谢.
我试图从服务调用一个活动(活动 A),我想要发生的是检查堆栈上是否已经有 A 的实例,如果有,将它带到堆栈的顶部(和触发 onNewIntent() 方法),而不是总是创建 A 的新实例。
想知道这是否可能。我的活动在 androidmanifest 中使用“singleTop”启动模式。从活动外部调用活动所需的通常 Intent.FLAG_ACTIVITY_NEW_TASK 标志不会将已经打开的活动 A 带到堆栈顶部,而是始终创建 A 的新实例。而且似乎当我同时使用两者时flags (intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 同样的事情发生了(仍然是同一活动的 2 个实例)。有没有办法做到这一点,请始终牢记我是从服务,我不想将活动上下文传递给服务?
(PS 我正在使用 androidannotations,对打开活动 A 的调用发生在 @EBean 内部,@EBean 本身在服务中使用。是否有一种简单的方法可以将该活动上下文传递给该 @EBean?)
我一直在尝试了Android的注解最近,一切都一直工作顺利,直到我决定添加applicationIdSuffix在buildTypes我的build.gradle文件.目前它看起来像这样:
buildTypes {
debug {
applicationIdSuffix '.debug'
}
...
}
Run Code Online (Sandbox Code Playgroud)
在编译时,我在gradle控制台中获得以下日志:
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:pre_testBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72220Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42220Library UP-TO-DATE
: app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app :generateDebugResValues UP-TO-DATE
:app:processDebugGoogleServices
找不到包名为'org.me.myapp.debug'的匹配客户端
:app:generateDebugResources
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
: app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJavaWithJavac
注意:将日志文件解析为/ dir/myapp/app/build/generated/source/apt /androidannotations.log
注意:使用选项{androidManifestFile =/d初始化AndroidAnnotations 3.3.1 ir/myapp/app/build/intermediates/manifests/full/debug/AndroidManifest.xml}
注意:开始处理18个元素上的4个注释
注意:使用指定路径找到AndroidManifest.xml文件:/ dir/myapp/app/build /中间体/清单/完整/调试/ AndroidManifest.xml注意:AndroidManifest.xml发现:AndroidManifest [applicationPackage = org.me.myapp.debug,componentQualifiedNames = [org.me.myapp.ui.MainActivity_,net.hockeyapp.android.UpdateActivity ],permissionQualifiedNames = [android.permission.ACCESS_WIFI_STATE,android.permission.ACCESS_NETWORK_STATE],applicationClassName …
我正在使用AndroidAnnotaion,但由于Android Studio 2.3和Gradle 2.3.0,他们说android-apt已经过时了.而且annotationProcessor是一个新的.所以,我想知道我怎么能annotationProcessor像apt以前一样配置.
如果我误解了什么,请帮忙.
所以,之前......
apply plugin: 'android-apt'
dependencies {
def AAVersion = '4.2.0'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
arguments {
library 'true'
}
}
Run Code Online (Sandbox Code Playgroud)
现在...
dependencies {
def AAVersion = '4.2.0'
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
Run Code Online (Sandbox Code Playgroud) android android-annotations android-gradle-plugin android-apt annotation-processor
android ×10
annotations ×2
android-apt ×1
dagger ×1
gradle ×1
java ×1
manifest ×1
mocking ×1
transfuse ×1
unit-testing ×1