Android自动化编译设置AndroidManifest.xml中package值(包名)

手动修改Android的AndroidManifest.xml中package值(包名)很简单,手动修改即可。但是项目中需要把Android的项目源代码放到服务器端在客户下载时候动态编译生成,且生成的app签名相同但包名不同(若此时包名相同就是相同的app),这种需求需要在服务器端自动化编译Android源代码时候自动调整AndroidManifest.xml中package值才能实现。查阅相关资料,结合Java对XML文件的读写技术,写了一个方法,让服务器端在编译之前预加载修改AndroidManifest.xml中的package值。

// 参数:
	// File file:AndroidManifest.xml文件。
	// String packagename:新的包名。
	public static void operationAndroidManifestXML(File file, String packagename) {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
		DocumentBuilder db;
		try {
			db = factory.newDocumentBuilder();
			Document doc = db.parse(file);
			NodeList nl = doc.getChildNodes();

			// 只有一个node,即 manifest
			// item(0)即为 manifest。
			Node node = nl.item(0);

			// 获得manifest的各个属性
			NamedNodeMap map = node.getAttributes();

			// 重新设置package的值
			map.getNamedItem("package").setNodeValue(packagename);

			// 写
			saveXml(file, doc);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 保存到XML文件
	private static void saveXml(File file, Document doc) {
		TransformerFactory transFactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = transFactory.newTransformer();
			transformer.setOutputProperty("indent", "yes");
			DOMSource source = new DOMSource();
			source.setNode(doc);
			StreamResult result = new StreamResult();
			// 覆盖原文件
			result.setOutputStream(new FileOutputStream(file));
			transformer.transform(source, result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}



时间: 2024-10-27 12:55:08

Android自动化编译设置AndroidManifest.xml中package值(包名)的相关文章

AndroidManifest.xml中的action和category

当Intent在组件间传递时,组件如果想告知Android系统自己能够响应和处理哪些Intent,那么就需要用到IntentFilter对象. IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理. IntentFilter实行"白名单"管理,即只列出组件乐意接受的Intent,但IntentFilter只会过滤隐式Intent,显式的Intent会直接传送到目标组件. Android组件可以有一个或多个IntentFilt

Android学习笔记之AndroidManifest.xml文件解析

一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置. 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

[转载] Android学习笔记之AndroidManifest.xml文件解析

一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置. 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

Android学习笔记之AndroidManifest.xml文件解析(转)

//自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xmlns:android="http://schemas.android.com/apk/res/android"//定义android命名空间 package="com.example.helloworld"//包名 android:versionCode="

Android学习笔记之AndroidManifest.xml文件解析【转载地址:http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html】

一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置. 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

Android出错问题:AndroidManifest.xml:2: error: No resource identifier found for attribute &#39;installLocatio

出错点: AndroidManifest.xml: error: No resource identifier found for attribute 'installLocation' in package 'android' 解决方法: 这是因为所使用的android中不支持该属性(installLocation),删除      android:installLocation="auto"即可,或者选择别的版本的android. Android出错问题:AndroidManife

android学习-应用结构-AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <!-- package:用来标识这个应用的,就像人的身份证号 android:versionCode:系统内部的版本号,用户看不见这个 android:versionName:用户可以看见的版本号 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android"

《android---获取值AndroidManifest.xml中meta-data的value》

hive常用命令 show tables; 列出hive里面所有数据表名 desc userProfile; 显示数据表userProfile的基本表字段及字段type desc extended trackinfo; 显示数据表trackinfo的详细信息,包括字段说明,数据表等 /usr/local/cloud/hive/bin/hive 进入hive数据库 select attribute_name from pms_attribute where attribute_id=21000 a

安卓Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数