Android如何优雅的写马甲包

在App开发过程中,经常会用到或者根据需要来制做马甲包。

什么时候可能会需要用到马甲包?

1.产品或者运营的同事提出需求;

2.在市场试水;

3.希望同时在一部手机上看多个测试服务器,以及生产服务器run的结果,测试也可能需要。

等等......

马甲包作用:

1.马甲包与原app包的功能基本一致,但包名,包id,包图标可以不同。同时也可以通过写.properties文件,来进行一些key包括baseUrl的配置,方便便捷;

2.对于大部分的App最核心的作用就是获取有效用户。关键词覆盖的多,就意味着能够被更多的用户搜索到,有助于增加下载量

3.抗风险,新功能先在马甲包中,随意测试新功能,避免用户流失;

4.增加用户量。等等

如何写?

在app下的buildgradle的android{}内部添加这样的代码就可以了

 productFlavors {
        /* 三种马甲包 马甲包可以多添加几种 */
        ceshi {} //测试  
        official {}//正式
        dbug {} //演示
    }
    productFlavors.each { flavor ->
        def props = new Properties()
        /* 读取config文件夹中的配置文件 */
        file("../config/${flavor.name}_config.properties").withInputStream {
            props.load(new InputStreamReader(it, "GBK"))
        }
        def application_id = props.getProperty("APPLICATION_ID")
        def app_name = props.getProperty("APP_NAME")
        def server_url = props.getProperty("SERVER_URL")
        def map_key = props.getProperty("MAP_KEY")
        def umeng_key = props.getProperty("UMENG_APPKEY")
        flavor.applicationId = application_id
        flavor.manifestPlaceholders = [
                APP_NAME    : app_name,
                MAP_KEY     : map_key,
                SERVER_URL  : server_url,
                UMENG_APPKEY: umeng_key
        ]
    }

其中有一个需要添加的文件夹,在工程中,添加了一个配置文件,这样上边的代码块便可以读取到对应的文件。

APPLICATION_ID =...
APP_NAME = ...
SERVER_URL =...
MAP_KEY=...
UMENG_APPKEY=...

配置文件的写法,内容包括Umeng的key,包名,app的名字等;

在java文件中需要配置信息时,那就需要考虑如何读取文件:

 <!--服务器请求地址-->
        <meta-data
            android:name="SERVER_URL"
            android:value="${SERVER_URL}" />

在清单文件中添加如此代码块便可以了。

在java文件中的使用:

封装在一个工具类方法中:

public static String getMetaDataInApp(@NonNull final String key) {
        String value = "";
        PackageManager pm = Utils.getApp().getPackageManager();
        String packageName = Utils.getApp().getPackageName();
        try {
            ApplicationInfo ai = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
            value = String.valueOf(ai.metaData.get(key));
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return value;
    }

//调用工具类方法
(类名).getMetaDataInApp("SERVER_URL");

缺点:

影响App的冷启动效率。由于添加配置文件,在app冷启动时,需要先将配置文件读到内存中,影响冷启动时间,因此尽量少配置,或者不进行配置。但这样写确实看着更加漂亮,优雅。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值