AndroidAnnotations Нічога згенераваць, Empty актыўнасць

Я спрабую стварыць праект з выкарыстаннем AndroidAnnotations ў Android Studio. Калі я пабудаваць і запусціць праект, здаецца, што ўсё кампілявацца, але я не атрымліваю нічога, акрамя пустой дзейнасці для прыкладання. Акрамя таго, ён не з'яўляецца, што ўсе спараджаецца AndroidAnnotations.

Я дадаў androidannotations-АПА-2.7.1.jar як залежнасць для майго праекта, і ўключана апрацоўка анатацый са шляху працэсара шлях да androidannotations-2.7.1.jar </код >, якая знаходзіцца ў асобнай тэчцы з androidannotations-АПА-2.7.1.jar . Я праверыў краму генеравацца крыніц па адносінах да модулю кораня кантэнту, і перакаштаваў шмат розных каталогаў для крыніц - ад генераванай , у GEN/аа , каб (у цяперашні час) <�код > зборка/крыніца/аа , каб адпавядаць, дзе, здаецца, згенераваныя файлы ствараюцца ў Android Studio. Нічога не працуе. Я змяніў назву актыўнасці ў маніфесту Актыўнасць _ і наладзіць канфігурацыю для запуску гэтага пры запуску праекта.

Адзіныя іншыя залежнасці ў мяне ёсць гэта Android-падтрымка-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
  }
}

Тым не менш, я не вельмі зразумеў, як працуе Gradle, так што я ў асноўным толькі ўручную дадаць залежнасці, як вы б нармальны праект, затым пакласці кампіляцыі радкі ў Gradle таму праект будзе складаць правільна. Я ведаю, што гэта, верагодна, не правільны спосаб, каб выкарыстоўваць яго.

Мая дзейнасць і яе макет дастаткова стандартны, я проста скапіяваў іх з афіцыйнага кіраўніцтва, каб пачаць працу з AndroidAnnotations.

UPDATE: Так што я проста вярнуўся да Maven, каб праверыць зборку з гэтым, і я заўважыў нешта дзіўнае. Здаецца, што нават з тым, як я яго наладзіць у Maven, нічога не генеруецца. Тым не менш, са зборкай Maven я магу запусціць праект без змены назвы актыўнасці ў маніфесту Актыўнасць _ і праект будзе кампілявацца і працаваць правільна. Гэта вельмі дзіўна і здаецца, што ён можа альбо яшчэ больш заблытаць праблему, або спрасціць яго, калі ён паказвае на тое, з Gradle, а таксама.

10
можа быць, гэта дапаможа -> спасылка </а>
дададзена аўтар Bobby Hargett, крыніца

6 адказы

Гэта падобна на адказ robotoaster, але ён працуе ў 0.4.1 і змяшчае згенераваныя зыходныя файлы Java у новым каталогу (у адпаведнасці з іншымі згенераванымі зыходнымі тэчкамі), што дазваляе Android-студыі, каб убачыць крыніца і перастаць скардзіцца. Ён таксама працуе з вялікай колькасцю працэсараў анатацый. Проста дадайце вашыя анатацый працэсараў да «пазнакай» канфігурацыі.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.1'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

ext.daggerVersion = '1.0.0';
ext.androidAnnotationsVersion = '2.7.1';

configurations {
    apt
}

dependencies {
    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
    apt "com.squareup.dagger:dagger-compiler:${daggerVersion}"
    compile "com.squareup.dagger:dagger:${daggerVersion}"
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 17
    }
}

android.applicationVariants.all { variant ->
    aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
    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
        ]
    }
}

UPDATE: This still works to compile, but with Android Studio 0.1.1 you can no longer edit your project structure with the UI, so you can't tell AS to look at the new source folder. I'd like to add the folder to a sourceSet, but variants don't seem to actually have their own sourceSets so I'm not sure yet where to put it.

UPDATE 2: You can get Android Studio 0.1.1 to recognize the apt-generated source files by right-clicking on build/source/apt_generated/debug in the project browser and selecting Mark Directory As->Source Root

UPDATE 3: Since gradle plugin 0.5.5 the android.applicationVariants.each does not work anymore. Use android.applicationVariants.all instead. See the changelog at android.com: access to the variants container don't force creating the task. This means android.[application|Library|Test]Variants will be empty during the evaluation phase. To use it, use .all instead of .each

26
дададзена
Гэта яшчэ актуальна? Я з AS 4.0.2 і атрымлівае гэтую памылку, выкарыстоўваючы згаданую build.gradle: «Не ўдаўся знайсці com.googlecode.androidannotations: androidannotations-АПА: 2,7 & ZWNJ; 0,1.»
дададзена аўтар Eugene, крыніца
Не было б магчыма дадаць згенераваныя файлы ў шляху Src, а таксама для Android студыі, каб забраць? Важдаўся з наладамі праекта перамагае мэта файла зборкі ...
дададзена аўтар botteaap, крыніца
яго проста альтэрнатыва згадваецца Xavier Ducrohet
дададзена аўтар robotoaster, крыніца
@Deekay Update 3 - у якасці альтэрнатывы выкарыстоўваць afterEvaluate {праект -> android.applicationVariants.each, як гэта паказана ў android-review.googlesource.com/#/с/62933
дададзена аўтар robotoaster, крыніца
У мяне ўзнікаюць праблемы, робячы гэтую працу з андроіда студыі 0.1.8 і АНДРОІД Gradle 0.4.2, любыя парады?
дададзена аўтар Calin, крыніца
@Shockwave ласка праігнаруйце мой каментар усё працуе цяпер, я зрабіў gradleclean && Gradle будаваць з кансолі
дададзена аўтар Calin, крыніца
@Shockwave Android-студыя не прызнае Activity_ (падкрэсліванне класаў) і дадатак умілаваных з java.lang.RuntimeException: Немагчыма стварыць асобнік актыўнасці ComponentInfo (... MainActivity_)
дададзена аўтар Calin, крыніца
Гэта нічога не робіць для мяне. Дзе ён праходзіць фактычныя працэсары для выканання?
дададзена аўтар Matthias, крыніца
Калі вы не хочаце, каб адзначыць direcotry як корань крыніцы ў Android студыі ўручную, зірніце на мой адказ. канфігурацыя там дадае верны выхадны шлях да sourceSets для ўсіх Стро varaints
дададзена аўтар Dodge, крыніца
Акрамя таго, калі ваш Gradle файл зборкі выкарыстоўвае packageNameSuffix атрыбут, вам трэба дадаць параметр -AresourcePackageName = yourPackage ці ваш клас R звычай быць знаходкай працэсарам AA (патрэбен апошні AA 3.0)
дададзена аўтар tbruyelle, крыніца
@Calin што канкрэтна там памылкі вы выпрабоўваеце?
дададзена аўтар NSchock, крыніца
Гэта выдатнае рашэнне, тым больш, што яна дазваляе некалькі анатацый працэсараў. Я змяніў гэта будзе пазначана як прынята адказваць з-за гэтага, але як гэта і працу рашэння robotoaster свідравіны. Дзякуй за дапамогу.
дададзена аўтар NSchock, крыніца
@robotoaster Аддаеце перавагу Вы гэтае рашэнне над прадстаўленым ці гэта проста раўнапраўнай альтэрнатывай?
дададзена аўтар deekay, крыніца

з адказамі тут і дапамогай + Hugo Visser , які адказаў мне на Google+ Пытанне я атрымаў гэтую канфігурацыю build.grade, якая дазваляе gradew будуе і таксама дадае схільны шлях высновы ў Android Studio ў якасці крыніцы directorys.

buildscript {
    repositories {
        mavenCentral()
    }
    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 'com.android.support:support-v4:13.0.+'

    apt "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "org.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 17
    }
}

def getSourceSetName(variant) {
    return new File(variant.dirName).getName();
}

android.applicationVariants.all { variant ->
    def aptOutputDir = project.file("build/source/apt")
    def aptOutput = new File(aptOutputDir, variant.dirName)
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    android.sourceSets[getSourceSetName(variant)].java.srcDirs+= aptOutput.getPath()

    variant.javaCompile.options.compilerArgs += [
            '-processorpath', configurations.apt.getAsPath(),
            '-AandroidManifestFile=' + variant.processResources.manifestFile,
            '-s', aptOutput
    ]

    variant.javaCompile.source = variant.javaCompile.source.filter { p ->
        return !p.getPath().startsWith(aptOutputDir.getPath())
    }

    variant.javaCompile.doFirst {
        aptOutput.mkdirs()
    }
}

UPDATE: updated for gradle android plugin 0.5.5; changed android.applicationVariants.each to android.applicationVariants.all

6
дададзена
Заўвага для іншых прылад, якія выкарыстоўваюць гэтую канфігурацыю (якая з'яўляецца адзін я выкарыстоўваю). Калі вы вырашыце пазней дадаць Араматызатары ў гэтай канфігурацыі і перайменаваць пакет (як com.mycompany.myapp да com.mycompany.myapp.pro), вы, верагодна, сутыкнецеся з праблемай, дазваляльнага файл R.java класа ў "пра" версія. Каб абыйсці гэта выкарыстоўваць «-AresourcePackageName = MyBasePackageName» параметр для перанакіравання androidannotations да патрэбнага файлу R.java. Для больш глыбокага тлумачэння, см stackoverflow.com/questions/19351168/…
дададзена аўтар Michael Stoner, крыніца

Цяпер праект мае да даты дакументацыі для гэтага выпадку. поўны прыклад праекта таксама існуе.

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

apply plugin: 'android'
apply plugin: 'android-apt'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

apt {
    arguments {
        androidManifestFile variant.processResources.manifestFile

       //If you're using Android NBS flavors you should use the following line instead of hard-coded packageName
        //resourcePackageName android.defaultConfig.packageName
        resourcePackageName "com.example.your.package.name"

       //You can set optional annotation processing options here, like these commented options:
       //logLevel 'INFO'
       //logFile '/var/log/aa.log'
    }
}

dependencies {
    apt "org.androidannotations:androidannotations:3.0+"
    compile "org.androidannotations:androidannotations-api:3.0+"
}
4
дададзена
Яны толькі вярнуліся мае змены тутэйшыя артыкулы. Я спрабую зразумець, што я зрабіў няправільна.
дададзена аўтар Heath Borders, крыніца
Прыклад не працуе для мяне ...
дададзена аўтар syklon, крыніца

даданне залежнасцяў не робіць нічога. JavaCompile задача павінна быць паведамлена аб працэсары анатацый. Немагчыма атрымаць доступ задачу JavaCompile ў версіі 0.3:

configurations {
    compile
    androidannotations.extendsFrom(compile) 
}

dependencies {
    compile 'org.androidannotations:androidannotations-api:3.0-SNAPSHOT'
    androidannotations 'org.androidannotations:androidannotations:3.0-SNAPSHOT'
}

android.buildVariants.each {
  variant ->
    variant.javaCompile.options.compilerArgs += [
        '-classpath', configurations.compile.asPath,
        '-processorpath', configurations.androidannotations.asPath,
        '-processor', 'org.androidannotations.AndroidAnnotationProcessor',
        '-AandroidManifestFile=' + variant.processResources.manifestFile
    ]
}

Для Gradle плагіна 0,4 года кампіляваць задачы павінны быць прыкладзены па-рознаму. Дзякуючы Арцём @ Android Project вось як увесь build.gradle павінен выглядаць

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

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

configurations {
 compile
 androidannotations.extendsFrom(compile)
}

dependencies {
 compile files('libs/android-support-v4.jar')
 compile 'org.androidannotations:androidannotations-api:3.0-SNAPSHOT'
 androidannotations 'org.androidannotations:androidannotations:3.0-SNAPSHOT'
}

android {
 compileSdkVersion 17
 buildToolsVersion "17.0.0"

 defaultConfig {
    minSdkVersion 7
    targetSdkVersion 16
    packageName "org.labaa.aa"
    testPackageName "org.labaa.aa.test"
    testInstrumentationRunner "org.labaa.aa.test.Runner"

 }
}

afterEvaluate { project ->
 android.applicationVariants.each { variant ->
    variant.javaCompile.options.compilerArgs += [
            '-classpath', configurations.compile.asPath,
            '-processorpath', configurations.androidannotations.asPath,
            '-processor', 'org.androidannotations.AndroidAnnotationProcessor',
            '-AandroidManifestFile=' + variant.processResources.manifestFile
    ]
 }
}

Гэта не будзе абнаўляць Android Studio залежнасцяў. Дадаць androidannotations-API ўручную. Запуск зборкі з каманднага радка     Gradle installDebug

Пры кампіляцыі з запуску адключыць дадатак Andoid студыі у адваротным выпадку пускавы будзе скардзіцца на адсутнасць анатаваных актыўнасці.

4
дададзена
ды, выконвайце гэтым code.google.com/p/android/issues/ дэталь? ID = 55764
дададзена аўтар robotoaster, крыніца
ў Android студыі Структура адкрытага праекта і ў крыніцах модуля выбару/зборкі/класы/адладжваць/у якасці крыніцы.
дададзена аўтар robotoaster, крыніца
вы запусціце яго з каманднага радка «Gradle assembleDebug» або падобнае?
дададзена аўтар robotoaster, крыніца
Бег з Gradle 0.5.0 я атрымліваю Анатацыя працэсар «org.androidannotations.AndroidAnnotationProcessor» не знойдзены
дададзена аўтар Calin, крыніца
Дзякуй, выдатна працуе для мяне з апошняй версіяй плагіна і Android Studio.
дададзена аўтар Matthias, крыніца
Ах да, дзякуй! Гэты код працаваў.
дададзена аўтар NSchock, крыніца
Здаецца, у 0,4 android.buildVariants было зменена на android.applicationVariants. З дапамогай гэтага я магу пабудаваць штраф праекта, але я да гэтага часу не атрымліваю нічога генераванага.
дададзена аўтар NSchock, крыніца
Прывітанне, дзякуй @robotoaster, гэты код працуе ў Gradle у камандным радку. Аднак я не магу выкарыстоўваць падкрэслены класы ў Android Studio, так як яны генеруюцца ў каталог, Android студыя не ведае. Ці ёсць у вас якая-небудзь дапамога?
дададзена аўтар deekay, крыніца

гэта абнаўленне да адказу, які робіць наступныя рэчы:

  • працуе з Android Studio 0.1.9
  • выдаляе сінтаксічныя памылкі з IDE (нават на перабудоўвае)
  • выкарыстоўвае androidannotations без кінжала

Для дасягнення гэтай мэты я капіюю выхад для стварэння/крыніцы/г ведзьму будзе заставацца пазначаецца як крыніца падчас перастраенняў.

import groovy.io.FileType

buildscript {
}

apply plugin: 'android'

repositories {
    mavenCentral()
}

ext.androidAnnotationsVersion = '2.7.1';

configurations {
    apt
}

dependencies {
    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 16
    }
}

android.applicationVariants.each { variant ->
    aptOutput = file("${project.buildDir}/source/r/${variant.dirName}")
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    variant.javaCompile.doFirst {
        println "*** compile doFirst ${variant.name}"
        aptOutput.mkdirs()

        aptOutput.eachFileRecurse FileType.FILES, {
            if (it.name.equals('R.java')) {
                return
            }
            it.delete()
        }

        variant.javaCompile.options.compilerArgs += [
                '-processorpath', configurations.apt.getAsPath(),
                '-AandroidManifestFile=' + variant.processResources.manifestFile,
                '-s', aptOutput
        ]
    }
}

Тым не менш даволі Hacky прапановы па паляпшэнню вітаюцца

EDIT the android-apt way

Нядаўна пакет пад назвай Android-схільны https://bitbucket.org/hvisser/Android-схільны/агляд быў рэліз, што робіць рэчы нашмат прасцей (версія 1.1 мае падтрымку АНДРОІД анатацый патрэбаў)

Проста абнавіць build.gradle так:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "com.neenbedankt.gradle.plugins:android-apt:1.1"
    }
}

apply plugin: 'android-apt'

apt {
    arguments {
        androidManifestFile variant.processResources.manifestFile
    }
}

dependencies {
    apt 'com.googlecode.androidannotations:androidannotations:2.7.+'
}

Вялікі дзякуй ідзе ў hvisser стваральніка андроіда-схільны

3
дададзена
ды трохі Hacky, але гэта працуе. У мяне было дзіўныя паводзіны з яго будаўніцтва ў два разы.
дададзена аўтар Romain Piel, крыніца
@RomainPiel паспрабаваць Gradle чыстага && Gradle зборка часам гэта дапамагае
дададзена аўтар Calin, крыніца

One possible problem is the R class is not found. Android Studio doesn't place the R.java into the gen directory by default like eclipse. The solution is to go into Project Settings -> Facets -> Select the Android facet for your project -> Compiler tab, and change the "R.java and Manifest.java files" from "Run process-resources Maven task before Make" to "Generated by IDE".

0
дададзена