10

Android Studio で AndroidAnnotations を使用してプロジェクトを作成しようとしています。プロジェクトをビルドして実行すると、すべてが正常にコンパイルされているように見えますが、アプリの空のアクティビティしか得られません。さらに、AndroidAnnotations によって何かが生成されているようには見えません。

プロジェクトの依存関係として追加し、 とは別のフォルダーにあるandroidannotations-api-2.7.1.jarへのプロセッサ パスで注釈処理を有効にしました。モジュール コンテンツ ルートを基準にして生成されたソースを格納することを確認し、ソースのさまざまなディレクトリを試しました。何も機能していません。マニフェストのアクティビティ名を に変更し、プロジェクトの実行時にこれを起動するように構成を設定しました。androidannotations-2.7.1.jarandroidannotations-api-2.7.1.jargeneratedgen/aabuild/source/aaActivity_

私が持っている他の唯一の依存関係は、android-support-v4 と ActionBarSherlock です。これらの両方を無効にして試しましたが、結果はありませんでした。当初は AndroidAnnotations と組み合わせて Roboguice を使用する予定でしたが、この問題に集中するために当面は無効にしました。

私も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 を使い始めるために公式ガイドからコピーしただけです。

更新: Maven に戻ってビルドをテストしたところ、奇妙なことに気付きました。Mavenで設定しても何も生成されないようです。ただし、Maven ビルドでは、マニフェスト内のアクティビティ名を に変更せずにプロジェクトを実行でき、Activity_プロジェクトは正しくコンパイルおよび実行されます。これは非常に奇妙で、問題をさらに混乱させるか、Gradle で何かを示している場合は単純化する可能性があるようです。

4

6 に答える 6

26

これは robotoaster の応答に似ていますが、0.4.1 で動作し、生成された Java ソース ファイルを新しいディレクトリ (他の生成されたソース フォルダと一致する) に配置します。これにより、Android Studio はソースを確認して文句を言わなくなります。また、より多くの注釈プロセッサでも動作します。注釈プロセッサを「apt」構成に追加するだけです。

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
        ]
    }
}

更新:これはまだコンパイルに機能しますが、Android Studio 0.1.1 では UI を使用してプロジェクト構造を編集できなくなったため、AS に新しいソース フォルダーを参照するように指示することはできません。フォルダーを sourceSet に追加したいのですが、バリアントは実際には独自の sourceSet を持っていないようで、どこに配置すればよいかまだわかりません

更新 2 : プロジェクト ブラウザーで build/source/apt_generated/debug を右クリックし、[ Mark Directory As] -> [Source Root]を選択することで、Android Studio 0.1.1 に apt で生成されたソース ファイルを認識させることができます。

更新 3 : gradle プラグイン 0.5.5 以降はandroid.applicationVariants.each機能しなくなりました。android.applicationVariants.all代わりに使用してください。android.comの変更ログを参照してください。 バリアント コンテナへのアクセスは、タスクの作成を強制しません。これは、android.[application|Library|Test]Variant が評価段階で空になることを意味します。それを使用するには、.each の代わりに .all を使用します。

于 2013-05-28T22:01:16.063 に答える
6

ここでの回答と、 Google+ の質問に答えてくれた+Hugo Visserの助けを借りて、この build.grade 構成を取得しました。これにより、gradw ビルドが許可され、ソース ディレクトリとして Android Studio に適切な出力パスが追加されます。

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()
    }
}

更新: gradle android プラグイン 0.5.5 用に更新。android.applicationVariants.eachに変更android.applicationVariants.all

于 2013-07-24T17:03:14.150 に答える
4

依存関係を追加しても何もしません。JavaCompile タスクは、アノテーション プロセッサについて通知する必要があります。バージョン 0.3 では JavaCompile タスクにアクセスできました。

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 以降では、コンパイル タスクを別の方法で追加する必要があります。Artiom @ 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 Studio からコンパイルする場合、アプリの起動を無効にします。それ以外の場合、ランチャーは、注釈付きのアクティビティが見つからないと文句を言います。

于 2013-05-23T18:06:51.990 に答える
4

プロジェクトには、このケースの最新のドキュメントがあります。完全なサンプル プロジェクトも存在します。

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+"
}
于 2014-01-31T23:07:41.217 に答える
0

考えられる問題の 1 つは、R クラスが見つからないことです。Android Studio は、Eclipse のようにデフォルトで R.java を gen ディレクトリに配置しません。解決策は、プロジェクト設定 -> ファセット -> プロジェクトの Android ファセットを選択 -> コンパイラ タブに移動し、「R.java および Manifest.java ファイル」を「Make の前にプロセス リソース Maven タスクを実行」から「IDEによって生成」。

于 2013-07-16T13:25:27.217 に答える