Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Gradle和AspectJ与Android产品风格结合使用,它们有自己的来源_Android_Gradle_Aop_Aspectj - Fatal编程技术网

将Gradle和AspectJ与Android产品风格结合使用,它们有自己的来源

将Gradle和AspectJ与Android产品风格结合使用,它们有自己的来源,android,gradle,aop,aspectj,Android,Gradle,Aop,Aspectj,我搜索了很多,但没有找到答案。我有不同口味的来源。比如: App/src/flavorA/MyFlavor.java App/src/flavorB/MyFlavor.java App/src/flavorC/MyFlavor.java pathelement(location: "$`enter code here`{project.buildDir}/../src/flavorA/java") 它工作得很好,直到我需要运行AOP步骤。我发现它无法完成,因为它找不到这个类,它是从App/s

我搜索了很多,但没有找到答案。我有不同口味的来源。比如:

App/src/flavorA/MyFlavor.java
App/src/flavorB/MyFlavor.java
App/src/flavorC/MyFlavor.java
pathelement(location: "$`enter code here`{project.buildDir}/../src/flavorA/java")
它工作得很好,直到我需要运行AOP步骤。我发现它无法完成,因为它找不到这个类,它是从App/src/main/中的源代码引用的

这找不到MyFlavor类:

android.applicationVariants.all { variant ->

    variant.javaCompile.doLast {
        def androidSdk = android.adbExe.parent + "/../platforms/" + project.ext.android_version + "/android.jar"
        def iajcClasspath = configurations.compile.asPath + ";" + androidSdk

        // This add's project jars as well as support jars.
        project.ext.tree = fileTree(dir: "${project.buildDir}/intermediates/exploded-aar", include: '**/*.jar')
        project.ext.tree.each { jarFile ->
            iajcClasspath += ":" + jarFile
        }

        ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties",
                classpath: configurations.ajc.asPath)
        ant.iajc(
                source: "1.6",
                target: "1.6",
                destDir: "${project.buildDir}/intermediates/classes/${variant.dirName}",
                fork: "true",
                maxmem: "512m",
                aspectPath: configurations.aspects.asPath,
                inpath: configurations.ajInpath.asPath,
                sourceRootCopyFilter: "**/.svn/*,**/*.java",
                classpath: iajcClasspath
        ) {
            sourceroots {
                android.sourceSets.main.java.srcDirs.each {
                    pathelement(location: it.absolutePath)
                }

                pathelement(location: "${project.buildDir}/generated/source/r/${variant.dirName}")
                pathelement(location: "${project.buildDir}/generated/source/buildConfig/${variant.dirName}")
            }
        }
    }
}
如果我添加以下内容,我可以让它工作:

App/src/flavorA/MyFlavor.java
App/src/flavorB/MyFlavor.java
App/src/flavorC/MyFlavor.java
pathelement(location: "$`enter code here`{project.buildDir}/../src/flavorA/java")
但如果我只想做一个调味酱的话。是否有更好的设置方法,以便当IAJC任务运行时,它可以找到它正在构建的特定变体所需的源代码?如果我组装FlavorRelease,我的变体名称将类似于FlavorRelease,我可以通过执行variant.buildType.name获得“release”的构建类型,但这对我没有帮助。我需要指出我正在制作的口味的来源

我取了variant.name并从中减去构建类型名称,留下“flavorA”部分:


似乎仍然不可靠。如果我想简化并构建所有的口味呢?必须有一种更好的方法来实现这一点,但我没有看到。

您可以使用以下方法对特定变体的可用口味进行迭代:

风味;
variant.productFlavors.each{flavor->
风味选择
}

从这里,您可以从列表中获取所需的味道,然后添加一个类似于“main”源集的path元素,如:


android.sourceset.“${flavortochose}”.java.srcDirs.each{
pathelement(位置:it.absolutePath)
}


确保将此块粘贴在sourceroots部分。

似乎指定的sourceroots只查看android.sourceset.main.java.srcDirs.each{…},并将其作为pathelements添加。问题是我在android.sourceset.flavorA中有代码,对吗?仍然感觉肮脏和脆弱。别误会我的意思,它会起作用的。如果你可以编写或使用这样的插件:我认为你可以让Gradle更简单,但你依赖于其他东西。