忽略相同构建类型变体的某些apks的清单文件

时间:2017-10-18 10:12:19

标签: android android-manifest build.gradle manifest-merging

因此,要求是向清单中定义的活动添加意图类别标志。我已经有5个构建变体,对于一个构建变体,我有另外5个在teamcity中配置的选项。此类别应仅适用于一种构建变体类型。

我搜索了堆栈溢出的帖子,只获得了使用产品风味的选项。我已经使用了清单的activity-alias属性,并为这个构建变体创建了一个不同的Manifest文件,但我想忽略同一构建变体的其他版本的清单文件。

我怎样才能做到最好?

可能不需要代码,但如果需要,我会分享。

修改 假设结构是这样的:

app
   -src
   -- main
   -- build_variant_name_1
      --- AndroidManifest.xml
   -- build_variant_name_2
      --- build_variant_name2_1.xml ( i want the new manifest for this alone)
          ---- AndroidManifest.xml
      --- build_variant_name2_2.xml
   -- build_variant_name_3
      --- AndroidManifest.xml

我不想为build_variant_2_1创建新的构建类型,因为这意味着我可能需要创建新构建变体类型的所有其他更改。

1. Is it feasible to make these changes programmatically?
2. Is it feasible to do this via some conditions or something of the sort?

1 个答案:

答案 0 :(得分:0)

我在google-services.json文件中做了类似的事情,其中​​我需要google-services.json的变体用于不同的构建。您可以跳过为那些应使用默认清单的变体放置清单文件。

app
   -src
   -- main
   -- build_variant_name_1
      --- AndroidManifest.xml
   -- build_variant_name_2
      --- AndroidManifest.xml
   -- build_variant_name_3
      --- AndroidManifest.xml

通过定义口味,您将增加构建。假设你有两种这样的味道

productFlavors {
    flavourOne {
    }
    flavourTwo {
    }
}

比你有构建

  1. flavourOnebuild_variant_name_1
  2. flavourOnebuild_variant_name_2
  3. flavourOnebuild_variant_name_3
  4. flavourOneDebug
  5. flavourOneRelease
  6. flavourTwobuild_variant_name_1
  7. flavourTwobuild_variant_name_2
  8. flavourTwobuild_variant_name_3
  9. flavourTwoDebug
  10. flavourTwoRelease
  11. 目录结构将扩展如下。

    app
       -src
       -- main
       -- flavourOne
          --- AndroidManifest.xml
       -- flavourOnebuild_variant_name_1
          --- AndroidManifest.xml
       -- flavourOnebuild_variant_name_2
          --- AndroidManifest.xml
       -- flavourOnebuild_variant_name_3
          --- AndroidManifest.xml
       -- flavourTwo
          --- AndroidManifest.xml
       -- flavourTwobuild_variant_name_1
          --- AndroidManifest.xml
       -- flavourTwobuild_variant_name_2
          --- AndroidManifest.xml
       -- flavourTwobuild_variant_name_3
          --- AndroidManifest.xml
    

    为了保留一种口味的常见内容,它将被放置在flavor目录下,而不需要为所有构建变体提供它。

    你可以定义下面的常量

    productFlavors {
        flavourOne {
           resValue "string", "INTENT_CATEGORY_FLAG_NAME", 'android.intent.category.LAUNCHER'
        }
        flavourTwo {
           resValue "string", "INTENT_CATEGORY_FLAG_NAME", ''
        }
    }
    

    您可以创建以下

    的变体
    <category android:name="@string/INTENT_CATEGORY_FLAG_NAME" />
    

    现在,BuildVariant_2将为flavorTwo和flavourOne提供空类别。它将具有类别android.intent.category.LAUNCHER

    希望我解释得很好,它解决了你的问题,或者至少给你一个方向。