C#实现APK自动打包
C#实现APK自动打包
一、思路
<meta-data android:name="Vendorid" android:value="xx" />,把每个供应商的Id值写到android:value这里,然后用命令行打包。
二、准备工作
三、测试 - 用命令行打包

四、代码实现
private void Package()
{
Process pcmd = new Process();
pcmd.StartInfo.FileName = "cmd.exe";
pcmd.StartInfo.UseShellExecute = false;
pcmd.StartInfo.RedirectStandardInput = true;
pcmd.StartInfo.RedirectStandardOutput = true;
pcmd.StartInfo.CreateNoWindow = true;
pcmd.Start();
pcmd.StandardInput.Write("cd /d D:\src");
pcmd.StandardInput.WriteLine("");
pcmd.StandardInput.Write("D:\apktools\tools\android.bat update project -n ButtonDemo -t android-17 -p d:\src");
pcmd.StandardInput.WriteLine("");
pcmd.StandardInput.Write("D:\apktools\apache-ant-1.9.1\bin\ant.bat debug");
pcmd.StandardInput.WriteLine("");
pcmd.StandardInput.Write("D:\apktools\apache-ant-1.9.1\bin\ant.bat release");
pcmd.StandardInput.WriteLine("");
pcmd.StandardInput.WriteLine("exit");
string stroutput = pcmd.StandardOutput.ReadToEnd();
}
cd /d D:\src
call D:\apktools\tools\android.bat update project -n ButtonDemo -t android-17 -p d:\src > {log}
call D:\apktools\apache-ant-1.9.1\bin\ant.bat debug >> {log}
call D:\apktools\apache-ant-1.9.1\bin\ant.bat release >> {log}
private bool Package()
{
//先删除编译后的文件,执行完批处理后,通过判断文件存在与否来确定打包是否成功
string releaseFile = "d:\src\ButtonDemo-release.apk";
if (File.Exists(releaseFile))
{
File.Delete(releaseFile);
}
//生成批处理命令D:\package.bat
CreateBatFile();
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = "D:\package.bat";
pi.UseShellExecute = true;
pi.CreateNoWindow = true;
Process pcmd = Process.Start(pi);
//等待进程结束
while (pcmd.HasExited == false)
{
pcmd.WaitForExit(1000);
}
pcmd.Close();
pcmd.Dispose();
if(!File.Exists(releaseFile))
{
//打包失败
return false;
}
//打包成功
return true;
}
private void InsertVendorXmlElememnt()
{
List<string> androidnames = new List<string>();
string xmlfile = @"AndroidManifest.xml";
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(_androidSourcePath + xmlfile);
XmlNode xmlApp = xmldoc.SelectSingleNode("//application");
XmlNodeList xmlnodes = xmlApp.SelectNodes("//meta-data");
foreach (XmlNode item in xmlnodes)
{
if (!androidnames.Contains(item.Attributes["android:name"].Value))
{
androidnames.Add(item.Attributes["android:name"].Value);
}
}
if (!androidnames.Contains("vendorid"))
{
XmlElement xmlelemember = xmldoc.CreateElement("meta-data");
XmlAttribute memAttr = xmldoc.CreateAttribute("android", "name", "http://schemas.android.com/apk/res/android");
memAttr.Value = "vendorid";
xmlelemember.SetAttributeNode(memAttr);
XmlAttribute memValue = xmldoc.CreateAttribute("android", "value", "http://schemas.android.com/apk/res/android");
memValue.Value = "";
xmlelemember.SetAttributeNode(memValue);
xmlApp.AppendChild(xmlelemember);
}
xmldoc.Save("d:\src\AndroidManifest.xml");
}
C#实现APK自动打包的更多相关文章
- Unity自动打包Apk
unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了.这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当 ...
- unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置
项目进行中,领导要求能够进行一键设置Player settings及自动打包并设置apk的位置,所以自己就上网搜索了很多大神的文章.最后是完成了领导需要的功能,在这里记录并分享一下(此项指针对安卓ap ...
- Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解
文/ skay csdn博客:http://blog.csdn.net/sk719887916/article/details/40541163 最近遇到项目从Eclispe迁移到Android st ...
- Gradle实现自动打包,签名,自定义apk文件名
Gradle实现自动打包,签名,自定义apk文件名 什么是签名,签名有什么用 Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行 ...
- 建立apk定时自动打包系统第二篇——自动上传文件
在<建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期>这篇文章中介绍多渠道打包的流程.很多时候我们需要将打包好的apk上传到ftp中,这时候我可以修改custo ...
- 建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统
我们的思路是每天下班后团队各成员在指定的时间(例如下午18:30)之前把各自的代码上传到SVN,然后服务器在指定的时间(例如下午18:30)更新代码.执行ant 打包命令.最后将apk包存放在指定目录 ...
- Android ant自动打包脚本:自动替换友盟渠道、版本号、包名
本文最后修改时间:2014-3-10 Android项目开发时,给公司人员安装,频繁升级,版本号总需要改,太麻烦,跟着时间变,自动升级才方便. Android项目开发新版时,手机上可能要装两个版本,一 ...
- [原] Jenkins Android 自动打包配置
一.Jenkins自动打包配置 目标:1. 自动打包:2. 自动上传:3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作. 减少重复劳 ...
- ANT自动打包U3D安卓项目研究笔记
概述 因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务.在此将研究过程及一些相关知识整理记录在此. 本 ...
随机推荐
- 利用 java.lang.Runtime.addShutdownHook() 钩子程序,保证java程序安全退出
以前在开发时只知道依靠数据库事务来保证程序关闭时数据的完整性. 但有些时候一个业务上要求的原子操作,不一定只包括数据库,比如外部接口或者消息队列.此时数据库事务就无能为力了. 这时我们可以依靠java ...
- 车牌识别LPR(二)-- 车牌特征及难点
第二篇:车牌的特征及难点 2.1 对我国车牌的认识 我国目前使用的汽车牌号标准是 2007 年开始实施的<中华人民共和国机动车号牌>GA36-2007(2010 年修订).根据 GA36 ...
- myeclipse快速开发配置
1,打开MyEclipse 2013然后“window”→“Preferences” 2. 选择“java”,展开,“Editor”,选择“Content Assist”. 3. 选择“Content ...
- GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别
GetKeyState.GetAsyncKeyState.GetKeyboardState函数的区别: 1.BOOL GetKeyboardState( PBYTE lpKeyState );获得所有 ...
- ogre, dx, opengl坐标矩阵
opengl 右手坐标系 列向量 左乘 列主序存储矩阵osg 右手坐标系 行向量 右乘 行主序存储矩阵d3d 左手坐标系 行向量 右乘 行主序存储矩阵ogre 右手坐标系 列向量 ...
- Android查询:模拟键盘鼠标事件(adb shell 实现)
1. 发送键盘事件: 命令格式1:adb shell input keyevent “value” 其中value以及对应的key code如下表所列: KeyEvent Value KEYCODE ...
- git - svn 平滑到 git
1. 建立自己的git仓库,需要是空git仓库 2. checkout 你的 git仓库 3. svn忽略.git文件,忽略.git .gitignore 4. 把 .git文件拷到你的 svn仓库 ...
- Windows下FFmpeg快速入门
本系列文章导航 Windows下FFmpeg快速入门 ffmpeg参数解释 mencoder和ffmpeg参数详解(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视 ...
- jvm内部现成运行
hi,all 最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据. 前段时间因为系统代码问题,造成性能瓶颈,于是就dump了一份stack出来 ...
- 【转】Android SwitchButton(滑动开关)
原文网址:http://blog.csdn.net/wangjinyu501/article/details/27961303 版本:1.0 日期:2014.5.17 2014.6.1 版权:© 20 ...