Android 多渠道配置

二次信任 提交于 2020-01-22 00:01:43

多渠道打包早已不是什么新技术,网上一搜千千万万数不尽数,但是对于没使用过的开发者,看了网上复制又复制的文章却是一头雾水,完全找不到符合自己需求的多渠道配置,以下总结:

需求:

  1. 不同渠道,配置不同包名。
  2. 不同渠道,不同app名称。
  3. 不同渠道,icon需要对应。
  4. 不同渠道,版本号需要单独指定。

代码撸起来:
gradle的多渠道配置,利用productFlavors 需要几个包就配置几个马甲,在android{} 里面添加如下:

 productFlavors {
        baidu {}
        xiaomi {}
        huawei {}
    }

配置三个渠道,然后 Sync Now,发现报错:

ERROR: All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
Affected Modules: app

defaultConfig下添加`

 flavorDimensions "versionName"

根据需求配置:
AndroidManifest.xml 的application里面需先配置 meta:

 <meta-data
            android:name="CHANNEL"
            android:value="${CHANNEL_VALUE}" />
  productFlavors {

        baidu{
            applicationId "com.allen.channel.baidu"
            versionName "1.0.1"
            resValue "string", "app_name", "百度"
            manifestPlaceholders = [CHANNEL_VALUE: "baidu"
                                    ,app_icon   : "@mipmap/app_icon"]
        }
        xiaomi{
            applicationId "com.allen.channel.xiaomi"
            versionName "1.0.2"
            resValue "string", "app_name", "小米"
            manifestPlaceholders = [CHANNEL_VALUE: "xiaomi"
                                    ,app_icon : "@mipmap/app_icon"
            ]
        }

        huawei{
            applicationId "com.allen.channel.huawei"
            versionName "1.0.3"
            resValue "string", "app_name", "华为"
            manifestPlaceholders = [CHANNEL_VALUE: "huawei"
                                    ,app_icon : "@mipmap/app_icon"
            ]
        }
    }

说明:
applicationId:顾名思义,指定对应马甲的包名。
versionName:这个不用说。
resValue:指定马甲的应用名称,注意:如果马甲中指定了app的名称,项目中的strings.xml文件的app_name必须删除

<resources>
    <string name="app_name">安安</string>
</resources>

manifestPlaceholders:指定马甲的icon,需要在src目录下新建相对应渠道的文件夹:
在这里插入图片描述
该目录下可以存放res等资源文件,如华为马甲为例:

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

在“huawei”渠道目录下的mipmap文件夹中有一张app_icon的图片,实例:
在这里插入图片描述
发现我把其他渠道的icon名称都配了“app_icon”,这个不是固定,自定义的。主目录下的app_icon是默认的,AndroidManifest.xml默认配置。
在这里插入图片描述
AndroidManifest如下:
在这里插入图片描述

打包
签名包需要在gradle配置signingConfigs:

signingConfigs {
        release {
            storeFile file('channel.jks')
            storePassword '123456'
            keyAlias 'channel'
            keyPassword '123456'
        }
        debug {
            storeFile file('channel.jks')
            storePassword '123456'
            keyAlias 'channel'
            keyPassword '123456'
        }
    }

channel.jks我已放置app目录下。

在这里插入图片描述
双击–》
assemble:打出来的包,包含release和debug两种类型。
assembleDebug:只有debug。
assembleRelease:只有release。
也可以渠道单独打包,如assembleXiaomi等等可以自己尝试。

我双击assembleRelease之后:
在这里插入图片描述
注意位置查看,打出来的都是release。

最后我在MainActivity中获取渠道测试:

public class MainActivity extends AppCompatActivity {

    private TextView tv_content;
    private TextView tv_id;
    private TextView tv_channel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_id = findViewById(R.id.tv_id);
        tv_channel = findViewById(R.id.tv_channel);
        tv_content = findViewById(R.id.tv_content);

        tv_id.setText(BuildConfig.APPLICATION_ID);
        tv_channel.setText(BuildConfig.FLAVOR);
        tv_content.setText(BuildConfig.VERSION_NAME);
    }
}

简单获取对应的渠道信息。

效果:

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!