一共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的构建过程,整合了友盟的各种服务,如统计分析、推送通知等,使得...
友盟渠道打包工具主要是提供基本的通过工程源码打包的功能。 常见错误见这里目前不支持的Apk特性见这里(可能会导致发布的SDK产生严重bug)。 Google 现在已经发布了最新的构建系统(New Building System) , 在 Android...
友盟apk批量打包工具是一款专为Android应用开发者设计的实用工具,主要功能在于高效地生成多个渠道包。在Android应用的推广过程中,通常需要针对不同的推广渠道制作具有唯一标识的APK文件,以便追踪各个渠道的下载量...
【标题】:apk友盟多渠道打包java实现 在Android应用开发中,为了适应不同的推广渠道,开发者通常需要创建多个版本的APK,每个版本针对一个特定的渠道。友盟(Umeng)作为国内知名的移动互联网统计分析平台,提供了...
本篇文章将详细介绍如何在Android Studio中结合友盟实现多渠道打包和统计。 一、友盟集成 1. 注册与获取AppKey: 首先,你需要在友盟官网(umeng.com)注册一个账号,并创建一个新的应用。创建成功后,系统会分配...
本文将深入探讨如何在Java SpringBoot项目中集成友盟消息推送服务,并通过Redis缓存来管理推送次数限制。 首先,我们要理解Java SpringBoot是一个轻量级的框架,它简化了创建生产级的Java应用流程。在SpringBoot...
"android多渠道批量打包工具"就是为了解决这个问题而设计的,它利用Python语言实现了自动化打包的功能,大大提高了开发效率。 首先,我们需要理解这个工具的工作原理。在Android应用打包的过程中,通常会在APK文件...
总结来说,"友盟消息推送java后台模块demo"是一个实用的工具,帮助开发者快速实现基于Java后台的推送服务,适用于需要向iOS和Android设备发送消息的应用。通过学习和理解这个示例,你可以更好地掌握友盟推送服务的...
2. 配置构建脚本:使用Gradle或Ant等构建工具,编写脚本来处理不同渠道的打包。在Gradle中,可以在build.gradle文件中定义变量channel,然后在assemble任务执行时传入不同的值,如`assembleRelease -Pchannel=渠道名...
友盟消息推送Java后端是将友盟(Umeng)的推送服务与SpringBoot框架相结合,用于实现高效、可靠的批量消息发送功能。SpringBoot以其简洁的配置和快速的应用开发能力,成为了许多Java开发者构建微服务的首选框架。而...
比如,"在友盟打包工具的基础上修改"可能意味着该工具支持自定义统计平台,开发者不仅可以为友盟,还可以为Google Analytics、Flurry或其他任何统计平台配置打包参数。 使用这样的工具,开发者通常需要进行以下步骤...
Java友盟JPush使用Demo是一个基于Java开发的示例项目,它主要展示了如何集成和使用友盟推送服务(JPush)来实现向Android和iOS设备发送推送消息。友盟JPush是一个强大的移动推送平台,提供了丰富的功能,如个性化推...
友盟消息推送,帮助开发者建立于用户直接沟通的渠道。将APP的内 友盟推送PushSDK 友盟推送PushSDK 容更新或者活动通知主动推送给终端用户,让用户第一时间获取到相关信息,有效提升用户活跃度和忠诚度。
6. **测试与调试**:使用友盟提供的测试工具,验证消息推送功能是否正常工作。 在`PushDemo`这个DEMO中,你应该能看到如何完成上述步骤的具体代码实现,包括初始化、注册、接收和处理推送消息等。通过研究这个DEMO...
在压缩包中的“tools”文件夹中,可能包含了实现以上功能的Java或Kotlin类文件,这些类可能包括用于注册、发送消息、接收广播、处理推送事件等的工具方法。开发者可以通过阅读源码,理解并运用到自己的项目中,以...
SDK集成辅助工具为PC端的辅助工具,需要Java环境才可使用,现在提供的功能有友盟Android SDK自动生成module,检查打包APK,辅助升级三项功能
【标题】"美图打包工具"是一个专门针对Java代码和Python脚本的打包解决方案,它旨在简化多渠道打包过程,并且能够与友盟的后台统计系统无缝对接,以实现更有效的渠道追踪和分析。 【描述】这个工具集包含了Java代码...
unity接友盟SDK最快的方法,内容包含ios 和android 只需要在友盟官网下载unitySDK ,在用本脚本直接就可以调到
详细流程可参考博文,https://czhenya.blog.csdn.net/article/details/116800320 博客看下实现效果。没有积分的童鞋可以V信关注【开发同学留步】,回复【IOS友盟】获取完整源码吧~
同时,友盟开发者后台通常提供日志查看和调试工具,方便排查问题。 10. **版本更新**:友盟会定期发布新版本的SDK,修复已知问题并增加新功能。因此,开发者应关注友盟的更新公告,及时升级SDK以保持最佳兼容性和...