专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
复利大王  ·  前央视主持人曝光黑幕,太无耻 ·  7 小时前  
复利大王  ·  程序员收入高,为啥不好找女朋友 ·  7 小时前  
鸿洋  ·  Flutter 小技巧之:实现 iOS ... ·  昨天  
复利大王  ·  四大又要降薪了 ·  昨天  
郭霖  ·  抱歉,今年劝各位别轻易跳槽...... ·  2 天前  
51好读  ›  专栏  ›  安卓开发精选

Android 多渠道打包方式详解(上)

安卓开发精选  · 公众号  · android  · 2016-09-22 08:18

正文

请到「今天看啥」查看全文


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







请到「今天看啥」查看全文