文档章节

Android Gradle 相同应用多包名打包,实现测试发布包分离,不同服务器地址以生成不同安装包

quanke_
 quanke_
发布于 2016/11/14 18:33
字数 1371
阅读 520
收藏 0

Android Gradle 相同应用多包名打包,实现测试发布包分离,不同服务器地址以生成不同安装包

简介: 公司的新需求:同一份代码打出另一个包名的apk,即包名不同、名称不同的两个apk。因为市场是识别包名的,所有可以相同的代码可以发布多个APP,以便于测试什么样的名字被用户接受(本人不太认同这种观点,这里只谈技术),可以在同一个手机同时安装测试包和发布包(大部分测试的接口地址与发布的接口地址是不一样的,还有一些公司还有开发的接口),方便测试

我经过多方渠道发现大致有一下三种方法:

  • 通过ant打多包名应用
  • 建立多个与“main”同级的文件夹,修改清单文件及build.gradle以达到打多包名效果
  • 通过修改build.gradle文件的applicationId达到打多包名的效果,原理与第二种方法但比较简单

因为是新手,对ant并不太了解,原理也不太清楚,为了赶时间所以直接选择了第二种与第三种方法,经过测试发现第三种方法要更加简单的多,所以最后直接使用了第三种方法,以下为详解。


因为要修改的是build.gradle文件而该文件一经修改就要重新编译,用过史丢丢的童鞋应该都清楚等待编译完成是是件多么蛋疼的事情所以建议大家一次性修改完成以便节约开发时间。

上面已经说过该方法主要是通过修改build.gradle文件的applicationId达到打多包名的效果的,下面便粘出本人代码供大家参考。

  productFlavors {
        app_one {
            applicationId "com.example.app1"
            manifestPlaceholders = [
                    app_name:"测试-1"
            ]
        }
        app_two {
            applicationId "com.example.app2"
            manifestPlaceholders = [
                    app_name:"测试-2"
            ]
        }
        app_three {
            applicationId "com.example.app3"
            manifestPlaceholders = [
                    app_name:"测试-3"
            ]
        }
    }

是不是感觉这个方法很眼熟? 没错就是多渠道打包的地方,通过添加这段代码后需要用到gradle面板进行打包,得到app_one 通过查看包名发现它的包名为 com.example.app1 显示的名称也为 测试-1,app_two 与 app_three 效果等同,至此已经完成多包名打包,且通过同一份代码打出了不同包名、不同名称的三个应用,而需求也达到了。

可能有的朋友会问如果还需要其他的渠道包怎么办,如果有10的渠道而又要打包两个不同的应用那岂不是要写20个类似于app_one的东西,那不是要很麻烦?没错我正好也碰到了这种情况,经过多次研究测试发现并没有那么麻烦,只需设定一个默认的包名、应用名即可,废话不多说,直接贴代码。

 defaultConfig {
        if (PACKAGE == "one") {
            applicationId "com.example.app1"
            manifestPlaceholders = [
                    app_name:"测试-1"
            ]
        } else {
            applicationId "com.example.app2"
            manifestPlaceholders = [
                    app_name:"测试-2"
            ]
        }
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        app_one {}
        app_two {}
        app_three {}
    }

嗯,就是这样,在defaultConfig里面设置一个默认的包名与应用名就可以了。

好了,到了这一步我们就要用到另一个神奇的文件了

工程目录下配置文件

看看你的工程根目录下得这个东西,没错就是它,这里我设置了一个字段“PACKAGE”,即告诉Studio我想要什么包,到这里相信大家也就明白我写的判断的目的了。

PACKAGE=one

只要通过修改这一字段为“one”,然后通过打包后就可以得到三个“测试-1”的app_one、app_two、app_three的apk文件了,同理将其修改为其他字段即可打出其他包名、应用名的应用了。 但是转到本人公司项目后发现这种方法竟然失灵了,即修改 properties 文件内的字段后得不到我想要的包,经过探索发现可能是与项目工程的大小有关,改完重启后就可以了。 当然还有另一个最重要的地方

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.morepackagenametest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${app_name}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

不同服务器地址以生成不同安装包方法类似,我这里不细说,有问题请留言

就是这里了,即之前定义的名字赋给应用了,在这里大家要注意一下在该项目的其他 model 内的清单文件里最好不要写 android:label 这句了,否则会报错的,至于是什么错一眼就可以看到了,当然如果报错了有两个方法:

  1. 删掉其他 model 内清单文件下applicationlabel 属性
  2. 通过在 application 下添加 tools:replace="android:label" 属性解决

好了,打完收工。期待大神的批评指导。

此文同事编写,此后会增加不同服务器地址以生成不同安装包的demo

原文:http://blog.csdn.net/qq_33673284/article/details/52875696

最后附上资源下载地址 Android 多包名打包应用 供各位参考

本文转载自:http://download.csdn.net/detail/qq_33673284/9659262

共有 人打赏支持
quanke_

quanke_

粉丝 70
博文 53
码字总数 54059
作品 3
浦东
程序员
Android多渠道打包相关介绍

一、多渠道打包概述 由于国内存在着有众多的应用市场,在不同的应用市场可能有不同的统计需求,为此Android开发人员需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。在...

Ruheng
06/23
0
0
读书笔记--Android Gradle权威指南(下)

前言 最近看了一本书《Android Gradle 权威指南》,收获挺多,就想着来记录一些读书笔记,方便后续查阅。 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南(上) 上一篇中我们讲了:...

请叫我大苏
05/27
0
0
Gradle实现Android多渠道定制化打包

最近在项目中遇到需要实现 Apk 多渠道、定制化打包, Google 、百度查找了一些资料,成功实现了上述功能,在此记录以备不时之需,温故而知新,可以为师矣~ 需求可以总结如下: 如何实现多个 ...

玄学酱
2017/08/03
0
0
Android批量打包-如何一秒内打完几百个apk渠道包

在国内Android常用渠道可能多达几十个,如: 谷歌市场、腾讯应用宝、百度手机助手、91手机商城、360应用平台、豌豆荚、安卓市场、小米、魅族商店、oppo手机、联想乐商、中兴汇天地、华为、安...

SuShine
2017/10/23
0
0
使用Gradle构建Android项目

新项目中,使用了Google I/O 2013发布的新工具,使用Gradle构建android项目,并且在新版的Intellig IDEA以及google的Android Studio对其支持。本文就介绍一下怎么使用gradle构建android项目,...

码农明明
2014/05/25
0
12

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Minifilter的动态安装、加载及卸载

MINIFILTER框架的文件系统过滤驱动,无法使用的CreateService和OpenService进行动态加载。 看了一下,使用Inf文件安装Minifilter驱动的方式是在注册表驱动服务项下比传统驱动多创建了Instanc...

simpower
12分钟前
0
0
idea新建springCloud项目(6)- Config Server使用

1.在IDEA新建springCloud项目-Config Server 修改版本,和之前建的eureka项目版本一致,修改完记得刷新: 删除掉不需要的文件: 2.把Config S 服务注册到eureka上去,配置git地址,启动项目 ...

monroeCode
18分钟前
3
0
大数据可视化项目开发总纲

第1章 开发文档总纲 1.1 开发工具清单 名称 版本 备注 Pentaho-bi server pentaho-server-ce-7.1 Pentaho Cde为其内置工具 Pentaho-prd pentaho-prd-ce-7.1 Pentaho Report Designer报表工具...

ZhangLG
18分钟前
1
0
pip安装超时问题

pip3 install --default-timeout=100 tensorflow 设置为100秒 参考: User Guide How to solve ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443) with pip?......

亚林瓜子
20分钟前
0
0
fragment 旋转时保持当前实例

设备旋转时保存Fragment的交互状态: setRetainInstance(true);

zdglf
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部