正文
PackageManager
.
GET_META_DATA
);
return
appInfo
.
metaData
.
getString
(
"CHANNEL_VALUE"
);
}
catch
(
PackageManager
.
NameNotFoundException
ignored
)
{
}
return
""
;
}
buildVariants.png
当然你也可以使用命令行:gradlew assemble 组装出所有的渠道包!!
反编译方式
gradle方式用着也挺不错的,为什么还要去搞什么反编译这么麻烦的东西呢?因为它有一个很大的问题,那就是每一个包都是要去编译打包的!这是相当的耗时!time is 加班啊!谁也不想加班打渠道包咯!!反编译的方式就是节省了每个渠道包都去编译的时间,而是编译好一个渠道包之后就使用该渠道包,通过反编译动态修改AndroidManifest.xml里面的信息,然后再重新打包签名!
说到反编译,那么这里就不得不提大名鼎鼎的apktool.jar了!纳尼,你说你从未听说过?!没事儿,以前没有听过,现在会用了就行了!!
然后总结一下接下来的一系列套路:
解包->修改相关参数->打包->签名->Zipalign优化
1、解包
apktool
d
your_original_apk
build
你没有看错,就是这样的!因为我们是站在巨人的肩膀上工作的嘛,所以好多工作就不同自己搞了!
执行以上命令之后,如果不出什么意外,你就会得到一个文件夹:
相关代码:
try
{
brut
.
apktool
.
Main
.
main
(
new
String
[]{
"d"
,
"-f"
,
apkFilePath
,
"-o"
,
outPath
});
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
callback
(
"解包失败 !!!!!\r\n"
+
e
.
getMessage
());
}
2、修改对应的参数
打开对应的AndroidManifest.xml,你没有看错,什么都在里面,直接修改就好了!等等,xml解析你不会?!没有关系,这里有dom4j.jar给你使用啦!!
修改反编译之后的AndroidManifest文件相关代码
try
{
File
androidManifestFile
=
new
File
(
appFolderName
+
File
.
separator
+
"AndroidManifest.xml"
);
Document
document
=
new
SAXReader
().
read
(
androidManifestFile
);
//使用dom4j的sax解析
Element
element
=
document
.
getRootElement
().
element
(
"application"
);
List
list
=
element
.
elements
(
"meta-data"
);
//获取到所有的“meta-data”
List
metaData
=
manifest
.
getMetaData
();
boolean
isUpdate
=
false
;
for
(
MetaData
data
:
metaData