`
bbcallen
  • 浏览: 2572 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

友盟打包工具(Java+shell)

阅读更多
一共4个文件


my.keystore.properties 打签名的配置,合并到ant里也可以
SetUMengChannel.java 编译成SetUMengChannel.jar
build_channel.xml ant配置
build_channel.sh 打签名的批处理


-1. 基于android-sdk_r18-macosx,其他环境我没测过
0. 用java而不用python和perl,是因为,不管在哪个平台开发Android,你一定有java用。(笑
1. 先设置环境变量,放脚本里面或者放配置文件都可以
export ANDROID_SDK=...
2. 编译SetUMengChannel.jar,放到合适的位置
3. sh build_channel.sh <渠道字符串>

文件名: my.keystore.properties
签名文件的配置
key.store=...
key.alias=...
key.store.password=...
key.alias.password=...


文件名: build_channel.xml
ant配置文件
从Android SDK 的tools/build.xml 借鉴了一些代码
主要目的:
1. 指定签名文件的参数 my.keystore.properties
2. 定制安装包apk的文件名,这里会输出的文件名形如
     HelloWorld_0.8.6_build75_google.apk

<?xml version="1.0" encoding="UTF-8"?>
<project
    name="HelloWorld"
    default="help" >

    <loadproperties srcFile="my.keystore.properties" />

    <property environment="env" />

    <condition
        property="umeng.channel"
        value="${env.UMENG_CHANNEL}" >
        <and>
            <not><isset property="${env.UMENG_CHANNEL}" /></not>
            <not><isset property="umeng.channel" /></not>
        </and>
    </condition>

    <condition
        property="sdk.dir"
        value="${env.ANDROID_SDK}" >
        <and>
            <not><isset property="${env.ANDROID_SDK}" /></not>
            <not><isset property="sdk.dir" /></not>
        </and>
    </condition>

    <import file="build.xml" />

    <!-- Custom tasks -->
    <taskdef name="xpath"
             classname="com.android.ant.XPathTask"
             classpathref="android.antlibs" />

    <target name="release-channel"
        depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-channel-sign, -post-build"
        description="Builds the application in release-channel mode.">
    </target>

    <!-- custom output file name -->
    <target name="-release-channel-sign" if="has.keystore" >
        <!-- only create apk if *not* a library project -->
        <do-only-if-not-library elseText="Library project: do not create apk..." >
            <sequential>
                <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unaligned.apk" />

                <echo>umeng.channel=${umeng.channel}</echo>

                <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName"
                    output="version.name" default="0.0.0.0"/>
                <echo>version.name=${version.name}</echo>

                <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionCode"
                    output="version.code" default="0"/>
                <echo>version.code=${version.code}</echo>

                <echo>Signing final apk...</echo>
                <property name="version.name" value="${version.name}" />
                <property name="version.code" value="${version.code}" />

                <!-- 在这里定义安装包的文件名规则 -->
                <property name="out.channel.file" location="${out.absolute.dir}/${ant.project.name}_${version.name}_build${version.code}_${umeng.channel}.apk" />

                <!-- Signs the APK -->
                <echo>Signing final apk...</echo>
                <signjar
                        jar="${out.packaged.file}"
                        signedjar="${out.unaligned.file}"
                        keystore="${key.store}"
                        storepass="${key.store.password}"
                        alias="${key.alias}"
                        keypass="${key.alias.password}"
                        verbose="${verbose}" />

                <!-- Zip aligns the APK -->
                <zipalign-helper
                        in.package="${out.unaligned.file}"
                        out.package="${out.channel.file}" />
                <echo>Release Package: ${out.channel.file}</echo>
            </sequential>
        </do-only-if-not-library>
        <record-build-info />
    </target>

</project>




文件名: SetUMengChannel.java
编译成 SetUMengChannel.jar 使用
使用java是因为,如果你能build apk,就一定能用java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 通过正则表达式修改AndroidManifest.xml中的渠道号
 * @param args
 */
public class SetUMengChannel {

	/**
         * 懒得检查参数了,有需要的请自己加
	 * args[0] AndroidManifest.xml 的文件位置
         * args[1] 渠道号的字符串
	 */
	public static void main(String[] args) {
		String channel = args[1];

		StringBuilder sb = new StringBuilder();
		try {
			File file = new File(args[0]);
			file = new File(file.getAbsolutePath());
			BufferedReader bufReader = new BufferedReader(
					new InputStreamReader(new FileInputStream(file)));
			String str = bufReader.readLine();
			if (str != null) {
				sb.append(str);
			}

			while ((str = bufReader.readLine()) != null) {
				sb.append('\n');
				sb.append(str);
			}

			bufReader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		String metaChannel = String
				.format("<meta-data android:name=\"UMENG_CHANNEL\" android:value=\"%s\"/>",
						channel);

		String replaced = sb
				.toString()
				.replaceAll(
						"<meta-data\\s+android:name=\"UMENG_CHANNEL\"\\s+android:value=\".*?\"\\s*/>",
						metaChannel);

		System.out.println(replaced);
	}
}



文件名: build_channel.sh
shell 脚本,要改成bat神马的也很容易

#! /bin/sh

# 从命令行获取渠道号
export UMENG_CHANNEL=$1

# 先重置 AndroidManifset.xml
# 你也可以使用 svn, copy 神马的
git checkout -f AndroidManifest.xml

# 修改AndroidManifset.xml
sh set_channel.sh ${UMENG_CHANNEL} > AndroidManifest.channel.xml
mv AndroidManifest.channel.xml AndroidManifest.xml

# 编译并加上签名
ant -f build_channel.xml release-channel

# 重置 AndroidManifset.xml
git checkout -f AndroidManifest.xml


分享到:
评论

相关推荐

    友盟打包工具

    友盟打包工具是一款专为Android应用开发者设计的自动化打包解决方案,尤其适用于那些希望将应用程序发布到多个市场的开发者。这个工具简化了APK的构建过程,整合了友盟的各种服务,如统计分析、推送通知等,使得...

    友盟渠道打包工具.zip

    友盟渠道打包工具主要是提供基本的通过工程源码打包的功能。 常见错误见这里目前不支持的Apk特性见这里(可能会导致发布的SDK产生严重bug)。 Google 现在已经发布了最新的构建系统(New Building System) , 在 Android...

    友盟apk批量打包工具

    友盟apk批量打包工具是一款专为Android应用开发者设计的实用工具,主要功能在于高效地生成多个渠道包。在Android应用的推广过程中,通常需要针对不同的推广渠道制作具有唯一标识的APK文件,以便追踪各个渠道的下载量...

    apk友盟多渠道打包java实现

    【标题】:apk友盟多渠道打包java实现 在Android应用开发中,为了适应不同的推广渠道,开发者通常需要创建多个版本的APK,每个版本针对一个特定的渠道。友盟(Umeng)作为国内知名的移动互联网统计分析平台,提供了...

    Android Studio使用友盟进行多渠道打包+统计

    本篇文章将详细介绍如何在Android Studio中结合友盟实现多渠道打包和统计。 一、友盟集成 1. 注册与获取AppKey: 首先,你需要在友盟官网(umeng.com)注册一个账号,并创建一个新的应用。创建成功后,系统会分配...

    友盟消息推送Java springboot

    本文将深入探讨如何在Java SpringBoot项目中集成友盟消息推送服务,并通过Redis缓存来管理推送次数限制。 首先,我们要理解Java SpringBoot是一个轻量级的框架,它简化了创建生产级的Java应用流程。在SpringBoot...

    android多渠道批量打包工具

    "android多渠道批量打包工具"就是为了解决这个问题而设计的,它利用Python语言实现了自动化打包的功能,大大提高了开发效率。 首先,我们需要理解这个工具的工作原理。在Android应用打包的过程中,通常会在APK文件...

    友盟消息推送java后台模块demo

    总结来说,"友盟消息推送java后台模块demo"是一个实用的工具,帮助开发者快速实现基于Java后台的推送服务,适用于需要向iOS和Android设备发送消息的应用。通过学习和理解这个示例,你可以更好地掌握友盟推送服务的...

    使用友盟分渠道打包和统计

    2. 配置构建脚本:使用Gradle或Ant等构建工具,编写脚本来处理不同渠道的打包。在Gradle中,可以在build.gradle文件中定义变量channel,然后在assemble任务执行时传入不同的值,如`assembleRelease -Pchannel=渠道名...

    友盟消息推送Java后端

    友盟消息推送Java后端是将友盟(Umeng)的推送服务与SpringBoot框架相结合,用于实现高效、可靠的批量消息发送功能。SpringBoot以其简洁的配置和快速的应用开发能力,成为了许多Java开发者构建微服务的首选框架。而...

    android打包工具多渠道批量打包

    比如,"在友盟打包工具的基础上修改"可能意味着该工具支持自定义统计平台,开发者不仅可以为友盟,还可以为Google Analytics、Flurry或其他任何统计平台配置打包参数。 使用这样的工具,开发者通常需要进行以下步骤...

    java友盟Jpush使用demo.zip

    Java友盟JPush使用Demo是一个基于Java开发的示例项目,它主要展示了如何集成和使用友盟推送服务(JPush)来实现向Android和iOS设备发送推送消息。友盟JPush是一个强大的移动推送平台,提供了丰富的功能,如个性化推...

    友盟消息推送 Java服务端Push SDK

    友盟消息推送,帮助开发者建立于用户直接沟通的渠道。将APP的内 友盟推送PushSDK 友盟推送PushSDK 容更新或者活动通知主动推送给终端用户,让用户第一时间获取到相关信息,有效提升用户活跃度和忠诚度。

    友盟推送集成写的demo

    6. **测试与调试**:使用友盟提供的测试工具,验证消息推送功能是否正常工作。 在`PushDemo`这个DEMO中,你应该能看到如何完成上述步骤的具体代码实现,包括初始化、注册、接收和处理推送消息等。通过研究这个DEMO...

    umeng友盟消息推送工具类-包括广播、单播、组播的工具实现

    在压缩包中的“tools”文件夹中,可能包含了实现以上功能的Java或Kotlin类文件,这些类可能包括用于注册、发送消息、接收广播、处理推送事件等的工具方法。开发者可以通过阅读源码,理解并运用到自己的项目中,以...

    友盟SDK集成辅助工具

    SDK集成辅助工具为PC端的辅助工具,需要Java环境才可使用,现在提供的功能有友盟Android SDK自动生成module,检查打包APK,辅助升级三项功能

    美图打包工具

    【标题】"美图打包工具"是一个专门针对Java代码和Python脚本的打包解决方案,它旨在简化多渠道打包过程,并且能够与友盟的后台统计系统无缝对接,以实现更有效的渠道追踪和分析。 【描述】这个工具集包含了Java代码...

    unity调友盟方法

    unity接友盟SDK最快的方法,内容包含ios 和android 只需要在友盟官网下载unitySDK ,在用本脚本直接就可以调到

    Unity 集成友盟+统计SDK(IOS端)

    详细流程可参考博文,https://czhenya.blog.csdn.net/article/details/116800320 博客看下实现效果。没有积分的童鞋可以V信关注【开发同学留步】,回复【IOS友盟】获取完整源码吧~

    友盟登录+分享—集成文档-官方

    同时,友盟开发者后台通常提供日志查看和调试工具,方便排查问题。 10. **版本更新**:友盟会定期发布新版本的SDK,修复已知问题并增加新功能。因此,开发者应关注友盟的更新公告,及时升级SDK以保持最佳兼容性和...

Global site tag (gtag.js) - Google Analytics