多渠道打包使用不同的APP名称、logo和包名

对于Android手机来说,不同渠道的应用使用不同的界面和逻辑是常有的事。甚至有时候同一个App还得以不同的名称和面貌出现。如果需要使这些不同面貌但内在一样的App能在同一部手机上安装,那就需要使用不同的包名。那么我们预先设置好不同渠道的打包方式,日后的维护就很简单了。

这里几个基本点列一下。

1.设置渠道

在build.gradle里设置

defaultConfig {
        ...
        flavorDimensions "money"
    }

...

productFlavors {
        green_site {
            dimension "money"
        }
        home_site {
            dimension "money"
        }
    }

以上就设置了两个渠道,只不过这两个渠道没有设置任何个性化的区别,暂时还没有意义。

2.设置不同的logo和名称

我们加一点细节

productFlavors {
        green_site {
            dimension "money"
            resValue "string", "app_name", "绿色版"
            manifestPlaceholders = [app_icon: "@mipmap/logo_4_green"]
        }
        home_site {
            dimension "money"
            resValue "string", "app_name", "正式版"
            manifestPlaceholders = [app_icon: "@mipmap/logo"]
        }
    }

这里通过resValue加入了应用名称的设置。要注意的是需要把原先strings.xml文件中的app_name去掉,不然会冲突。
然后通过manifestPlaceholders设置AndroidManifest中可以使用的变量。这里我们设置了app_icon
那么对应的,在AndroidManifest中以"${app_icon}"的形式调用以上变量设置logo。



现在我们在不同渠道下有不同的名称和logo了。
但是,这两个安装包还无法在同一部手机上并存,因为他们的包名是一样的,本质上还是同一个App。

3.设置不同的包名

productFlavors {
        green_site {
            dimension "money"
            resValue "string", "app_name", "绿色版"
            applicationId "com.greenapp"
            manifestPlaceholders = [app_icon: "@mipmap/logo_4_green"]
        }
        home_site {
            dimension "money"
            resValue "string", "app_name", "正式版"
            applicationId "com.myapp"
            manifestPlaceholders = [app_icon: "@mipmap/logo"]
        }
    }

这里我们添加了applicationId
然后,在build.gradle里调用他。

defaultConfig {
        applicationId "${applicationId}"
        ...
    }

现在,我们打包出来后相当于两个App,可以同时在一部手机上安装了。
这里要注意的是打包的签名也要设置不同的文件,很多平台是要认签名的。

4.设置不同的FileProvider

如果你的App有使用FileProvider。那么还要设置一下,毕竟FileProvider是和包名关联的。不然会报同名错误。
我们再增加一个变量authorities

productFlavors {
        green_site {
            dimension "money"
            resValue "string", "app_name", "绿色版"
            applicationId "com.greenapp"
            manifestPlaceholders = [app_icon: "@mipmap/logo_4_green",authorities:"com.greenapp.FileProvider"]
        }
        home_site {
            dimension "money"
            resValue "string", "app_name", "正式版"
            applicationId "com.myapp"
            manifestPlaceholders = [app_icon: "@mipmap/logo",authorities:"com.myapp.FileProvider"]
        }
    }

然后在AndroidManifest中设置Provider


        
            
        

以上,完工。

你可能感兴趣的:(多渠道打包使用不同的APP名称、logo和包名)