当前位置: 首页 > 知识库问答 >
问题:

Gradle Android插件:挂钩到所有产品风格的编译后任务

荀增
2023-03-14
gradlew tasks --all

安装Flavorb

等等。

preBuild <<{
    //Do some stuff
}
assemble <<{
    //Get's never executed
}

build <<{
    //Get's never executed
}
myapp:assembleFlavorARelease - Assembles the Release build for flavor FlavorA [library:bundleRelease]
    myapp:checkFlavorAReleaseManifest
    myapp:compileFlavorAReleaseAidl
    myapp:compileFlavorAReleaseJava
    myapp:compileFlavorAReleaseNdk
    myapp:compileFlavorAReleaseRenderscript
    myapp:dexFlavorARelease
    myapp:generateFlavorAReleaseAssets
    myapp:generateFlavorAReleaseBuildConfig
    myapp:generateFlavorAReleaseResValues
    myapp:generateFlavorAReleaseResources
    myapp:generateFlavorAReleaseSources
    myapp:lintVitalFlavorARelease - Runs lint on just the fatal issues in the FlavorARelease build
    myapp:mergeFlavorAReleaseAssets
    myapp:mergeFlavorAReleaseResources
    myapp:packageFlavorARelease
    myapp:preFlavorADebugBuild
    myapp:preFlavorAReleaseBuild
    myapp:preAltdorfDebugBuild
    myapp:preAltdorfReleaseBuild
    myapp:preBerlinDebugBuild
    myapp:preBerlinReleaseBuild
    myapp:preBuild
    myapp:prepareFlavorAReleaseDependencies
    myapp:prepareComAndroidSupportAppcompatV71910Library - Prepare com.android.support:appcompat-v7:19.1.0
    myapp:prepareTrunkGradleLibraryUnspecifiedLibrary - Prepare trunk-gradle:library:unspecified
    myapp:processFlavorAReleaseJavaRes
    myapp:processFlavorAReleaseManifest
    myapp:processFlavorAReleaseResources
    myapp:validateReleaseSigning
    myapp:zipalignFlavorARelease

我只看到preBuild,但既没有看到assemble也没有看到build,这很奇怪,因为它是在运行时显示的

gradlew tasks 

但是上面列表中的大多数方法都是特定口味的,我不想有同样的任务20次,因为我有20种不同的口味。那么,一旦编译完成,但APK还没有打包成所有版本,我如何执行必要的任务呢?类似于:

//I know there is no task called "postCompile" - so anything post compiling and pre-packaging would be fine
postCompile << {
    //Do something that needs to be done for all flavors
}

编辑,所以我在构建customerA时重新检查了命令行输出,例如通过:

    C:\Users\user\workspace\android\trunk-gradle>gradlew assembleCustomerARelease
:library:compileLint
:library:copyReleaseLint UP-TO-DATE
:library:mergeReleaseProguardFiles UP-TO-DATE
:library:preBuild
:library:preReleaseBuild
:library:checkReleaseManifest
:library:preDebugBuild
:library:preDebugTestBuild
:library:prepareComAndroidSupportAppcompatV71910Library UP-TO-DATE
:library:prepareReleaseDependencies
:library:compileReleaseAidl UP-TO-DATE
:library:compileReleaseRenderscript UP-TO-DATE
:library:generateReleaseBuildConfig UP-TO-DATE
:library:generateReleaseAssets UP-TO-DATE
:library:mergeReleaseAssets UP-TO-DATE
:library:generateReleaseResValues UP-TO-DATE
:library:generateReleaseResources UP-TO-DATE
:library:mergeReleaseResources UP-TO-DATE
:library:processReleaseManifest UP-TO-DATE
:library:processReleaseResources UP-TO-DATE
:library:generateReleaseSources UP-TO-DATE
:library:compileReleaseJava UP-TO-DATE
:library:processReleaseJavaRes UP-TO-DATE
:library:packageReleaseJar UP-TO-DATE
:library:compileReleaseNdk UP-TO-DATE
:library:packageReleaseJniLibs UP-TO-DATE
:library:packageReleaseLocalJar UP-TO-DATE
:library:packageReleaseRenderscript UP-TO-DATE
:library:packageReleaseResources UP-TO-DATE
:library:bundleRelease UP-TO-DATE
:myapp:preBuild
Path to customer file: C:\Users\user\workspace\android\trunk-gradle\myapp\src\CustomerA\res\xml\customer.xml
Selected server: release
:myapp:preCustomerAReleaseBuild
:myapp:checkCustomerAReleaseManifest
:myapp:preCustomerADebugBuild
:myapp:preCustomerBDebugBuild
:myapp:preCustomerBReleaseBuild
:myapp:preCustomerCDebugBuild
:myapp:preCustomerCReleaseBuild
:myapp:prepareComAndroidSupportAppcompatV71910Library UP-TO-DATE
:myapp:prepareTrunkGradleLibraryUnspecifiedLibrary UP-TO-DATE
:myapp:prepareCustomerAReleaseDependencies
:myapp:compileCustomerAReleaseAidl UP-TO-DATE
:myapp:compileCustomerAReleaseRenderscript UP-TO-DATE
:myapp:generateCustomerAReleaseBuildConfig UP-TO-DATE
:myapp:generateCustomerAReleaseAssets UP-TO-DATE
:myapp:mergeCustomerAReleaseAssets UP-TO-DATE
:myapp:generateCustomerAReleaseResValues UP-TO-DATE
:myapp:generateCustomerAReleaseResources UP-TO-DATE
:myapp:mergeCustomerAReleaseResources UP-TO-DATE
:myapp:processCustomerAReleaseManifest UP-TO-DATE
:myapp:processCustomerAReleaseResources UP-TO-DATE
:myapp:generateCustomerAReleaseSources UP-TO-DATE
:myapp:compileCustomerAReleaseJava UP-TO-DATE
:myapp:lintVitalCustomerARelease
//Some logoutput from the dex-ing task not really relevant in this case
:myapp:dexCustomerARelease UP-TO-DATE
:myapp:processCustomerAReleaseJavaRes UP-TO-DATE
:myapp:validateReleaseSigning
:myapp:packageCustomerARelease UP-TO-DATE
:myapp:zipalignCustomerARelease UP-TO-DATE
:myapp:assembleCustomerARelease

BUILD SUCCESSFUL

Total time: 25.451 secs

所以根据上面的构建输出,我假设预构建实际上发生在编译阶段之后?因为它列在compileReleaseJava和其他编译任务之后。如果是这种情况,那么“prebuild”就足以满足我的需求。

更新日期:2015年2月4日

这个问题仍然没有解决,但是我已经改变了我的代码,不再依赖它。我没有尝试使用必须先由我的项目编译的java类,而是为该类创建了另一个项目,该项目生成了一个jar文件,我认为使用细节可以在这里找到:

共有1个答案

詹联
2023-03-14

您不能那样扩展装配和构建任务,因为它们在Gradle执行阶段之前就被相应的构建变量相关任务所替换。例如:assemble变成AssemblereRelease。

但是,当构建图组合在一起时,您仍然可以连接到构建过程中。如果要在包任务之前执行自己的代码,可以使用以下代码段:

task doStuff << {
    // Do stuff
}

tasks.whenTaskAdded { theTask ->
    if (theTask.name.contains('package')) {
        theTask.dependsOn 'doStuff'
    }
}

此代码将不区分构建变体;如果有必要,您可以在if条件下这样做。

 类似资料:
  • 我在prestashop 1.7中创建一个自定义模块。在该模块中,我想在产品详细信息页面中显示一些自定义内容块。所以自定义内容应该只显示在产品详情页中。我用过这些钩子,但它们不再工作了。 胡克特莱特酒店 这些挂钩仅适用于Prestashop 1.6。在Prestashop 1.7中可以使用哪些挂钩?

  • 我已经想了几个小时了,但运气不好。 现在,WooCommerce特色产品小部件垂直显示产品。我想让特色产品并排(水平)显示。 我找遍了所有我能想到的地方,但我找不到我需要编辑的东西来实现这一点。 所有的帮助将不胜感激!

  • 我有大约10个产品和接近200个变体每一个。我需要更新特定产品的销售价格,包括它的所有变化。 问题是: 所有的变种都有不同的价格。未输入销售价格-所有销售价格输入框均为空。 我需要一个SQL解决方案运行和更新所有特定产品的销售价格,采取常规价格并从中扣除350,或 任何其他方式,我不知道在这个阶段,因为我已经尝试了许多解决方案,包括Woocommerce内置的解决方案“设置销售价格”,再次不工作,

  • 我得到的是: HelloWorld: inner.java 内部2.Java 现在我要做的是编译这个,这样我就可以运行了。 我可以用以下方法编译它: 但我想使用一个不需要列出每个子文件夹的通用命令。我该怎么做?

  • 有人举过一个使用JDK 6风格的例子吗?只定义目录,而不是目录中每个jar的列表。类路径有ANT javac编译任务吗? 我们这样试过了 编写classpath=c:。。。。\WEB-INF\lib*;。。。websphere。。。\a、 罐子;。。。websphere。。。\b、 罐子;等,并在javac任务中使用了这个类路径,但WEB-INF\lib中的库没有被识别。 所以,我想知道是否有可能

  • 我想在用户创建并保存一个后,通过soap客户端将woocommerce产品数据发送到邮政公司的web服务。所以我需要一个在用户创建产品后触发的钩子。我搜索了很多,找到了一些wordpress和woodcommerce钩子,但没有一个做我的工作。发送日期之后,web服务返回一个应设置为产品sku的id。hear是我的函数代码:(参数来自save\u post\u产品挂钩) 我使用操作。它似乎是在用户