问题描述

我在打多渠道包的时候,我需要区分debug版本,release版本,其中涉及到包名的不同,我使用release编译的时候,发现如下错误信息。这个原因是因为你的agconnect-services文件里面含有一个 package_name 参数,这个参数是需要指定包名的,如果 package_name 填写的报名,和目前你所使用的包名没有对应上就会出现这样的错误

修改过程中遇到的错误信息

* What went wrong:

Execution failed for task ':app:processDebugAGCPlugin'.

> ERROR: Failed to verify AGConnect-Config '/client/package_name', expected: 'com.gxx.fast', but was: 'com.gxx.fast.debug'

1

2

3

*Whatwentwrong:

Executionfailedfortask':app:processDebugAGCPlugin'.

>ERROR:FailedtoverifyAGConnect-Config'/client/package_name',expected:'com.gxx.fast',butwas:'com.gxx.fast.debug'

不是很完美的解决问题

既然是需要区分包名的,我不如直接copy 2份出来,放到src下面,并新建一个类 pushservices 里面存放 debug/release 的类并存放 agconnect-services.json文件,这样我们想使用哪个版本的,就使用哪个版本的

存放agconnect-services.jpg

agconnect-services.json 记得里面修改

//测试环境

"package_name":"com.gxx.fast.debug"

//正式环境

"package_name":"com.gxx.fast"

1

2

3

4

//测试环境

"package_name":"com.gxx.fast.debug"

//正式环境

"package_name":"com.gxx.fast"

打开你的app下面的build.gradle

def isUseReleaseAppPackageName = false 是否使用正式环境的包名

android {

signingConfigs {

.....省略代码

}

defaultConfig {

.....省略代码

}

buildTypes {

debug {

.....省略代码

}

release {

.....省略代码

}

//复制文件

task copyAgconnecToRelease(type:Copy){

// print "你好世界"

from "src/pushservices/release/"

include "agconnect-services.json"

into "./"

}

//复制文件

task copyAgconnecToDebug(type:Copy){

from "src/pushservices/debug/"

include "agconnect-services.json"

into "./"

}

afterEvaluate {

def isDebugBuiildTypes = false;//是否运行的debug模式,false表示不是 true表示是

if(isReleaseBuildType()){

isDebugBuiildTypes = false;

}else {

isDebugBuiildTypes = true;

}

tasks.matching {

it.name.equals("assembleDebug") || it.name.equals("assembleRelease")

}.each {task->

if(isDebugBuiildTypes){ //debug模式下编译环境

if (isUseReleaseAppPackageName ){ //使用正式环境包名

task.dependsOn(copyAgconnecToRelease);

}else {

task.dependsOn(copyAgconnecToDebug);

}

}else {

task.dependsOn(copyAgconnecToRelease);

}

}

}

//判断是否为debug模式

def isReleaseBuildType(){

boolean isReleaseTypes = false;

for(String s : gradle.startParameter.taskNames) {

if (s.equals(":app:assembleRelease")) {

isReleaseTypes = true;

break;

}

}

return isReleaseTypes;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

defisUseReleaseAppPackageName=false是否使用正式环境的包名

android{

signingConfigs{

.....省略代码

}

defaultConfig{

.....省略代码

}

buildTypes{

debug{

.....省略代码

}

release{

.....省略代码

}

//复制文件

taskcopyAgconnecToRelease(type:Copy){

//print"你好世界"

from"src/pushservices/release/"

include"agconnect-services.json"

into"./"

}

//复制文件

taskcopyAgconnecToDebug(type:Copy){

from"src/pushservices/debug/"

include"agconnect-services.json"

into"./"

}

afterEvaluate{

defisDebugBuiildTypes=false;//是否运行的debug模式,false表示不是true表示是

if(isReleaseBuildType()){

isDebugBuiildTypes=false;

}else{

isDebugBuiildTypes=true;

}

tasks.matching{

it.name.equals("assembleDebug")||it.name.equals("assembleRelease")

}.each{task->

if(isDebugBuiildTypes){//debug模式下编译环境

if(isUseReleaseAppPackageName){//使用正式环境包名

task.dependsOn(copyAgconnecToRelease);

}else{

task.dependsOn(copyAgconnecToDebug);

}

}else{

task.dependsOn(copyAgconnecToRelease);

}

}

}

//判断是否为debug模式

defisReleaseBuildType(){

booleanisReleaseTypes=false;

for(Strings:gradle.startParameter.taskNames){

if(s.equals(":app:assembleRelease")){

isReleaseTypes=true;

break;

}

}

returnisReleaseTypes;

}

上面的代码写完后,我们直接运行或者build一下,就会自动从debug/release 拷贝一份agconnect-services.json 文件到根目录路

注意

我们每次修改isUseReleaseAppPackageName 的值,都需要 删除根目录下的 agconnect-services.json

其它学习到的知识点

我们从上面copy一段代码下来,如下

task copyAgconnecToRelease(type:Copy){

print "你好世界"

from "src/pushservices/release/"

include "agconnect-services.json"

into "./"

}

1

2

3

4

5

6

taskcopyAgconnecToRelease(type:Copy){

print"你好世界"

from"src/pushservices/release/"

include"agconnect-services.json"

into"./"

}

我们在build或者直接run的时候,发现 “你好世界” 会最先打印,那是不是就意味着,from include into 也会默认的执行?其实不是的,print 是在配置阶段构建的,所以不管执行什么task都是最先执行的。 from, into, rename 都继承自 Copy,所以即使直接写也是在执行阶段执行,摘自十分钟搞定 Gradle 。我感觉就类似如下这样的代码 部分摘自 全面理解Gradle - 定义Task

task switchTvvvv(type:Copy){

print "你好"

}

class HelloGxxTask extends DefaultTask{

String message = 'This is RygTask'

// @TaskAction 表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行

@TaskAction

def hello(){

println "Hello world. $message"

}

}

// hello使用了默认的message值

task hello(type:HelloGxxTask)

// 重新设置了message的值

task hello1(type:HelloGxxTask){

message ="I am an android developer" //类似from include into 手动设置参数

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

taskswitchTvvvv(type:Copy){

print"你好"

}

classHelloGxxTaskextendsDefaultTask{

Stringmessage='This is RygTask'

//@TaskAction表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行

@TaskAction

defhello(){

println"Hello world. $message"

}

}

//hello使用了默认的message值

taskhello(type:HelloGxxTask)

//重新设置了message的值

taskhello1(type:HelloGxxTask){

message="I am an android developer"//类似fromincludeinto手动设置参数

}

自定义task.jpg

所以from include into 都是AbstractCopyTask 里面的方法,所以他们是在执行阶段执行

参考链接

android自动填充包名,debug/release 修改包名,取不同包名下的agconnect-services.json 文件...相关推荐

  1. 更改计算机用户文件夹下主机名,Win10系统修改主机名、用户名称和密码、以及C盘中的用户文件夹名...

    写在前面 近期重新安装了Ubuntu16.04系统,同时也修改了Windows10系统的用户名.密码,还有C盘用户文件夹名称.对于Linux和windows系统来说,修改名称基本都是三部分,主机名.用 ...

  2. android自动改,【玩机组ROM修改教程】自己修改安卓ROM 刷机包教程

    本帖最后由 威风凛凛77 于 2018-5-4 18:02 编辑 偉鎽凛凛头衔01.gif (279.94 KB, 下载次数: 85) 2018-5-4 12:41 上传 [玩机组ROM修改教程]自己 ...

  3. oracle r修改表名,oracle中修改表名

    <<>> answer1: ALTER TABLE old_table_name RENAME TO new_table_name;(大写为系统命令) answer2: SQL ...

  4. hosts多个ip对应一个主机名_Ubuntu16.04修改主机名和查看主机名的方法

    01. 查看主机名的方法 在Ubuntu系统中,快速查看主机名有多种方法: 其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于"@"符号后: 如下图所示 ...

  5. linux 修改主机名 命令,Linux修改主机名命令详解

    Linux修改主机名命令 1.如果只需要临时更改主机名,可以使用hostname命令. sudo hostname # 例如: sudo hostname myDebian 这条命令不会更改/etc/ ...

  6. oracle数据库怎么更改表名,oracle如何修改表名_数据库

    Oracle建表语句是什么_数据库 Oracle建表语句是CREATE TABLE tablename(column_name datatype).其中tablename是要创建的表名,column_ ...

  7. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

  8. Android自动填充短信验证码

    自动拦截短信实际上就是在系统注册一个BroadcastReceiver,然后通过设置拦截短信的: filter.addAction("android.provider.Telephony.S ...

  9. skype改名字 android,Skype Windows 桌面版用户可以修改Skype名或者昵称吗?

    在您登录Skype之后,您会在应用程序窗口的上方看到您的Skype用户名和昵称.它们也会出现在您的个人资料窗口的右侧. A. Skype用户名(例如:XXX) * 如果您把已有Skype账户和Micr ...

最新文章

  1. Ubuntu下建立Pycharm快捷方式
  2. .NET中Flags枚举的使用
  3. Delphi编译指令说明
  4. [USACO Mar08] 牛跑步 --k短路
  5. 扩大缩小Linux物理分区大小
  6. 华为交换机S3700-TELNET远程管理交换机配置
  7. 移动互联网时代,你的个人信息正通过这12种方式泄露
  8. android表情开源,Android可能很快就会获得新的表情符号 而无需等待操作系统更新...
  9. [转载] Python中字符串的处理方法
  10. c# 声音控制(转载)
  11. phpstudy集成安装环境所需运行库vc9-vc14(32+64位)下载集合
  12. APP版本号命名规范及原则,2018android面试题
  13. Python——输入若干行,每行若干行整数,求所有整数的最大值
  14. 如何截图一张完整的表_wps2016表格太长怎么截图打印?
  15. 蓝色音箱改装电源_JBL便携/无线音箱排行榜,JBL便携/无线音箱十大排名推荐
  16. 【树链剖分】月下毛景树
  17. 小程序中身份证号码认证简单的判断方法
  18. JSR303校验的简单使用以及自定义校验规则的代码编写
  19. iPhone手机怎么投影到MacPro上
  20. win7设置wifi热点_Windows系统设置WIFI热点

热门文章

  1. 【随笔】express中间件系统的基本实现
  2. 自研服务治理框架----文章汇总
  3. C# 单精度转换双精度丢失的问题
  4. nodejs连接mysql报connect ECONNREFUSED错误的解决方法
  5. 获取height固定折叠元素真实高度方法
  6. Git常用命令速查表
  7. 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子
  8. WordPress自动升级插件时需要填写FTP信息的解决
  9. CSP认证201312-3最大的矩形[C++题解]:枚举
  10. Mysql8.0.20下载和安装