Android Eclipse兰贝壳儿多渠道打包

移动开发 waitig 557℃ 百度已收录 0评论

效果
这里写图片描述
这里写图片描述

介绍
所谓多渠道打包,就是指分不同的应用市场打包。开发者在Android项目开发完成并打包生成apk后,往往需要发布到不同的应用市场,这些市场即为我们所说的渠道。
分渠道打包的目的是为了针对不同应用市场做出不同的一些统计(比如用户量),数据分析,以及收集用户信息等。通过在开发中植入不同的渠道号,然后对应不同渠道号打包生成不同的apk,最后将它们放到对应的应用市场上,就可以达到统计不同市场的效果了。开发者只需要在AndroidManifest.xml清单文件中使用meta-data标签配置渠道信息,即可使不同渠道发布的包具有表示该渠道包的能力。
然而,随着应用市场的不断增多,每回都要多次手动修改渠道信息并重新生成apk显得尤为繁琐,而且也增大了出错概率,为此,我们需要寻求更为方便高效的多渠道打包方式。

实现
1.首先请下载兰贝壳儿Eclipse插件
2.获取jar包,复制到Eclipse目录下的plugins文件夹下面
3.重启eclipse,右键选中需要打包的项目,就会看到兰贝壳儿
4.点击打包发布,第一次不会成功,因为此时没有配置任何东西。但是在项目中生成一个bom.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>  
<!-- 北京兰贝科技有限公司版权所有 -->  
<project>  
    <dependencies>  
        <dependency>  
            <groupId>com.marsor.android.common</groupId>  
            <artifactId>MarsorUtils</artifactId>  
            <version>1.0.0-SNAPSHOT</version>  
        </dependency>  
    </dependencies>  
    <repositories>  
        <repository>  
            <id>MarsorRepository</id>  
            <name>Marsor Maven Mirror</name>  
            <url>http://maven.marsorstudio.cn:8088/</url>  
        </repository>  
    </repositories>  
    <package>  
        <!-- 不区分大小写,逗号隔开的metaName,代表不同SDK的渠道标识符 -->  
        <channels keyname="UMENG_CHANNEL,gfan_cpid">  
            <!-- channel的数量代表最终生成的apk文件的数量 -->  
            <channel value="hiapk.com" />  
            <channel value="andao007.com" />  
            <channel value="domob.cn" />  
            <channel value="gfan.com" />  
        </channels>  
        <keystore path="F:\Repos\android\keystore\common\common.key" passwd="123456">  
            <alias name="marsor_common" passwd="123456" />  
        </keystore>  
        <outpath value="F:\Repos\android\keystore\output\" />  
    </package>      
</project> 

<channel>标签用于配置渠道号
<keystore>标签用于指定keystore文件所在路径以实现打包时自动签名
<outpath>标签用于指定打包后的apk文件输出的路径

5.在AndroidManifest.xml清单文件中使用标签配置渠道信息,名字name可以自由定义,不过需要对应修改bom.xml配置文件里标签的keyname,而值value会在打包时被逐一替换成标签里的value。

<application  
    android:allowBackup="true"  
    android:icon="@drawable/ic_launcher"  
    android:label="@string/app_name"  
    android:theme="@style/AppTheme" >  
    <activity  
        android:name=".MainActivity"  
        android:label="@string/app_name" >  
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  

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

    <meta-data android:name="channelId" android:value="normal"/>  
</application>  

6.根据自身情况和需要修改porm.xml文件,如下:

<?xml version="1.0" encoding="UTF-8"?>  
<!-- 北京兰贝科技有限公司版权所有 -->  
<project>  
    <dependencies>  
        <dependency>  
            <groupId>com.marsor.android.common</groupId>  
            <artifactId>MarsorUtils</artifactId>  
            <version>1.0.0-SNAPSHOT</version>  
        </dependency>  
    </dependencies>  
    <repositories>  
        <repository>  
            <id>MarsorRepository</id>  
            <name>Marsor Maven Mirror</name>  
            <url>http://maven.marsorstudio.cn:8088/</url>  
        </repository>  
    </repositories>  
    <package>  
        <!-- 不区分大小写,逗号隔开的metaName,代表不同SDK的渠道标识符 -->  
        <channels keyname="channelId">  
            <!-- channel的数量代表最终生成的apk文件的数量 -->  
            <channel value="wandoujia.com" />  
            <channel value="googleplay" />    
        </channels>  
        <keystore path="E:\Mad_Chan\Tools\Package\debug.keystore" passwd="android">  
            <alias name="androiddebugkey" passwd="android" />  
        </keystore>  
        <outpath value="E:\Mad_Chan\Tools\Package\" />  
    </package>      
</project>  

7.新建一个类,在Java代码中读取AndroidMenifest.xml清单文件中标签里的渠道号并输出。

try {  
    ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);  
    String channelId = appInfo.metaData.getString("channelId");  
    Toast.makeText(getApplicationContext(), channelId, Toast.LENGTH_LONG).show();  
} catch (NameNotFoundException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}  

8.再次打包发布,就可以在配置的apk文件输出路径中找到两个apk文件了。
(PS:网友反应,打包会有漏包现象 )

源码
http://download.csdn.net/detail/alfred_c/9259275

参考
http://blog.csdn.net/wave_1102/article/details/48370857
http://blog.csdn.net/qq247300948/article/details/48266019


本文由【waitig】发表在等英博客
本文固定链接:Android Eclipse兰贝壳儿多渠道打包
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)