gradle控制多包名打包

文章目录

  • I.基础设置
    • 1.build.gradle设置
  • II.代码和资源文件目录设置
    • 1.代码
    • 2.AndroidManifest.xml设置
    • 3.资源文件

I.基础设置

1.build.gradle设置

项目根目录的build.gradle中android节点添加:

  flavorDimensions "version"
    productFlavors {
        // 开发
        dev {
            applicationId 'com.dev.messenger'
            ndk {
                abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
            }
            namespace 'com.dev.messenger'
        }

        // 测试
        check {
            applicationId 'com.check.messenger'
            ndk {
                abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
            }
            namespace 'com.check.messenger'
        }

     	// 正式发布
        prod {
            applicationId 'com.prod.messenger'
            ndk {
                abiFilters "arm64-v8a"
            }
            namespace 'com.prod.messenger'
        }
    }

II.代码和资源文件目录设置

1.代码

多包名打包主要影响的是app模块,需要更改包名,共有代码就放在main目录下即可,差异代码放在对应版本的目录下

app
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─xxx
    │  │          └─messenger
    │  │              └─main
    │  └─res
    ├─dev
    │  └─java
    │      └─com
    │          └─dev
    │              └─messenger
    │                  └─main
    ├─check
    │  └─java
    │      └─com
    │          └─check
    │              └─messenger
    │                  └─main
	└─prod 
        └─java
            └─com
                └─prod 
                    └─messenger
                        └─main

2.AndroidManifest.xml设置

已经在build.gradle中配置了namespace,AndroidManifest.xml中不需要再配置packname,如果不同版本需要不同的产品名称,那么每个版本目录下都要有一个AndroidManifest.xml,如果要有不同的icon,参考下面资源文件的配置。

3.资源文件

如果项目中涉及到需要更改图标、icon等,同时资源文件都放在单独的模块里面,那么这个模块(假如说叫res)下的build.gradle也需要进行配置,和项目根目录的build.gradle配置不同的是,资源文件模块下的build.gradle只需要声明Flavors即可,不需要配置属性:

  flavorDimensions "version"
    productFlavors {
        // 开发
        dev {
          
        }

        // 测试
        check {
          
        }

     	// 正式发布
        prod {
         
        }
    }

然后模块中目录也要对应:

res
└─src
    ├─main
    │  ├─assets
    │  └─res
    │      ├─anim
    │      ├─color
    │      ├─drawable
    │      ├─drawable-hdpi
    │      ├─drawable-xhdpi
    │      ├─drawable-xxhdpi
    │      ├─drawable-xxxhdpi
    │      ├─raw
    │      ├─values
    │      └─values-zh-rCN
    ├─dev
    │  └─res
    │      ├─drawable
    │      ├─values
    │      └─values-zh-rCN
    ├─check
    │  └─res
    │      ├─drawable
    │      ├─values
    │      └─values-zh-rCN
    └─prod
        └─res
            ├─drawable
            ├─values
            └─values-zh-rCN

注意:如果其他模块引用了该资源模块,那么引用该资源模块的模块也需要配置build.gradle,也只需要声明Flavors即可,把res模块中的配置抄过去就行。

你可能感兴趣的:(java,android,开发语言,gradle)