创新5 1声卡驱动下载-联想官网软件下载

manifest文件
2023年4月3日发(作者:helio x30)

通过gradle动态修改⽂件

前⾔

在Android使⽤Gradle进⾏编译打包时,有时候需要动态更改中application、activity、meta-data等节点属性,⼤多数

情况下⼀般通过productFlavors占位符替换即可完成相应的功能,但存在⼀些⽐较复杂的情况,⽐如说引⽤了⼀些第三⽅aar或者sdk,⾥⾯的⼀

些节点属性我们不需要、或者是需要采⽤占位符替换,显得就不再⽅便或者不能达到所想要的⽬的。下⾯介绍另⼀种通过Groovy动态更改

节点属性的⽅法。

通过Gradle动态修改Manifest⽂件

1、在项⽬配置结束的task中,找到⽣成Release的manifest的task

2、通过该task找到输出的manifest⽂件并读取⽂本内容

3、使⽤Groovy的XmlApi对manifest进⾏修改

4、修改后重新写,输出⾄原始⽬录

例如:在release包manifest中动态添加标签为meta-data的渠道号channel

android:value=“yingyongbao"/>

引⽤第三⽅sdk⾥⾯有⼀些多申请的权限,我们也可以在这边直接剔除掉,这⾥选择的切⼊点在processResources的任务执⾏之前,代码如

下:

{variant->

{output->

t{pm->

StringmanifestPath=stFile

println"=====testmanifestPath=====$manifestPath"

defmanifestContent=file(manifestPath).getText()

manifestContent=e('','')

defxml=newXmlParser().parseText(manifestContent)

println"=====testxml=====$xml"

ation[0].appendNode("meta-data",['android:name':'channel','android:value':'yingyongbao'])

defserialize=ize(xml)

file(manifestPath).write(serialize)

defoutputFile=File

if(outputFile!=null&&th(".apk")){

deffileName="Android_"

FileName=fileName

}

}

}

}

另外⼀种写法,在这⾥我们直接找到build⾥⾯manifest的具体路径,⼜不不同gradle的版本不⼀样,manifest的位置会有所区别,具体写法如

下:

{variant->

StringvariantName=lize()

defprocessManifestTask=ame("process${variantName}Manifest")

println"=====testprocessManifestTask=====$processManifestTask"

{pmt->

defmanifestPath=newFile("${buildDir}/intermediates/bundle_manifest/${e}/process${e}Manifest/bundle-manifest/")

println"=====testmanifestPath=====$manifestPath"

defmanifest=file(manifestPath).getText()

.replaceAll('','')

defxml=newXmlParser().parseText(manifest)

println"=====testxml=====$xml"

ation[0].appendNode("meta-data",['android:name':'channel','android:value':'yingyongbao'])

defserialize=ize(xml)

file(manifestPath).write(serialize)

defoutputFile=File

if(outputFile!=null&&th(".apk")){

deffileName="Android_"

FileName=fileName

}

}

}

//有些版本的gradle的manifest路径在这下⾯

//defmanifestPath="${buildDir}/intermediates/manifests/full/${e}/"

这⾥我们就处理掉项⽬中的BLUETOOTH权限,前提是项⽬中没有使⽤到蓝⽛权限,并且我们还在manifest⾥⾯添加了⼀个meta-data,包含了

渠道。

补充

由于在gradle3.3版本

processResources

提⽰已过期,这⾥我们根据系统提⽰使⽤了⼀种新的⽅式,代码如下:

{variant->

{output->

ManifestProcessorTaskprocessorTask=ull()

{ManifestProcessorTasktask->

defdirectory=dleManifestOutputDirectory()

println"=====testdirectory=====$directory"

defmanifestPath="$directory/"

println"=====testmanifestPath=====$manifestPath"

defmanifestContent=file(manifestPath).getText()

println"=====testmanifestContent=====$manifestContent"

manifestContent=e('','')

defxml=newXmlParser().parseText(manifestContent)

println"=====testxml=====$xml"

ation[0].appendNode("meta-data",['android:name':'channel','android:value':'yingyongbao'])

defserialize=ize(xml)

file(manifestPath).write(serialize)

defoutputFile=File

if(outputFile!=null&&th(".apk")){

deffileName="Android_"

FileName=fileName

}

}

}

}

更多推荐

manifest文件