ReactNative ---- Android 使用Gradle实现多渠道打包,实现相同项目不同包名、Logo、名字、主题等。

最近公司有个新需求,按照之前的项目换个名字,logo及部分资源文件重新打包个新的app

实现思路

1.拷贝一份项目更换名字、logo等 (效率低,麻烦 ) ❌
2.多渠道打包 (方便,快捷) ✅

实现方法

项目下build.gradle>android下新以下代码

android {
	...
	...
    //多渠道打包
    productFlavors {
        //百度渠道
        baidu {
            //修改包名
            applicationId "com.product.baidu"
            //修改app名字,string资源下不能包含"app_name"
            resValue "string", "app_name", "百度"
            //修改AndroidManifest.xml部分字段(包含logo)
            manifestPlaceholders = [CHANNEL_VALUE: "baidu",app_icon: "@mipmap/logo"]
        }
        //小米渠道
        xiaomi {
            applicationId "com.product.xiaomi"
            resValue "string", "app_name", "小米"
            //修改AndroidManifest.xml部分字段(包含logo)
            manifestPlaceholders = [CHANNEL_VALUE: "xiaomi",app_icon: "@mipmap/logo"]
        }
    }

    
    

替换Logo

从上面代码中可以看到两个渠道中都有这行代码:

百度

manifestPlaceholders = [CHANNEL_VALUE: "baidu",app_icon: "@mipmap/logo"]

    
    

小米

manifestPlaceholders = [CHANNEL_VALUE: "xiaomi",app_icon: "@mipmap/logo"]

    
    

这行代码是向AndroidManifest.xml传值,但是AndroidManifest.xml需要使用占位符接收

 <application
        android:name=".MoneyApp"
        android:allowBackup="true"
        android:icon="${app_icon}"  <!--占位符,接收上面Gradle传来的值-->
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/NoActionBar"
        tools:replace="android:icon,android:theme">
        ...
        ...
	</application>

但是上面两个渠道传的值都是@mipmap/logo图片,这里需要使用同名不同图片的资源文件,同名文件是不能在同一个文件夹的,这里需要在app/res/下/main同级目录创建渠道单独文件夹
在这里插入图片描述
注意!文件夹名字一定要和渠道名相同,然后再各自渠道文件夹下创建logo资源文件
在这里插入图片描述
当打包时,各渠道会优先加载各自渠道文件夹的资源,就可以实现不同的logo了

最后签名打包就可以啦,两个渠道包分别在baidu和xiaomi文件夹下~

想看我的build.gradle 配置 请看另一篇博文

最近公司有个新需求,按照之前的项目换个名字,logo及部分资源文件重新打包个新的app

实现思路

1.拷贝一份项目更换名字、logo等 (效率低,麻烦 ) ❌
2.多渠道打包 (方便,快捷) ✅

实现方法

项目下build.gradle>android下新以下代码

android {
	...
	...
    //多渠道打包
    productFlavors {
        //百度渠道
        baidu {
            //修改包名
            applicationId "com.product.baidu"
            //修改app名字,string资源下不能包含"app_name"
            resValue "string", "app_name", "百度"
            //修改AndroidManifest.xml部分字段(包含logo)
            manifestPlaceholders = [CHANNEL_VALUE: "baidu",app_icon: "@mipmap/logo"]
        }
        //小米渠道
        xiaomi {
            applicationId "com.product.xiaomi"
            resValue "string", "app_name", "小米"
            //修改AndroidManifest.xml部分字段(包含logo)
            manifestPlaceholders = [CHANNEL_VALUE: "xiaomi",app_icon: "@mipmap/logo"]
        }
    }

  
  

替换Logo

从上面代码中可以看到两个渠道中都有这行代码:

百度

manifestPlaceholders = [CHANNEL_VALUE: "baidu",app_icon: "@mipmap/logo"]

  
  

小米

manifestPlaceholders = [CHANNEL_VALUE: "xiaomi",app_icon: "@mipmap/logo"]

  
  

这行代码是向AndroidManifest.xml传值,但是AndroidManifest.xml需要使用占位符接收

 <application
        android:name=".MoneyApp"
        android:allowBackup="true"
        android:icon="${app_icon}"  <!--占位符,接收上面Gradle传来的值-->
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/NoActionBar"
        tools:replace="android:icon,android:theme">
        ...
        ...
	</application>

猜你喜欢

转载自blog.csdn.net/qq_21937107/article/details/88827007