/**

* @author Tibib

*

*/

public class AndroidManifestParser {

public String NS = "http://schemas.android.com/apk/res/android" ;

public AppInfo parse(InputStream in) throws Exception {

try {

//使用pull解析库

XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();

NS = parser.getNamespace();

//设置使用 namespaces特性

parser.setFeature(XmlPullParser. FEATURE_PROCESS_NAMESPACES , true );

parser.setInput(in, "UTF-8" );

parser.nextTag();

return readAppInfo(parser);

} catch (Exception e){

e.printStackTrace();

throw e;

} finally {

in.close();

}

}

private AppInfo readAppInfo(XmlPullParser parser) throws Exception{

AppInfo appInfo = new AppInfo();

while (parser.next() != XmlPullParser. END_TAG) {

if (parser.getEventType() != XmlPullParser. START_TAG) {

continue ;

}

String name = parser.getName();

// Starts by looking for the General tag

if ("application" .equals(name)){

String attrLabelValue = parser.getAttributeValue( NS, "label" );

String attrIconValue = parser.getAttributeValue( NS, "icon" );

appInfo.setAppName(attrLabelValue.split( "/" )[1]);

appInfo.setIconName(attrIconValue.split( "/" )[1]);

}

else {

skip(parser);

}

}

return appInfo;

}

// Skips tags the parser isn't interested in. Uses depth to handle nested tags. i.e.,

// if the next tag after a START_TAG isn't a matching END_TAG, it keeps going until it

// finds the matching END_TAG (as indicated by the value of "depth" being 0).

private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {

if (parser.getEventType() != XmlPullParser. START_TAG) {

throw new IllegalStateException();

}

int depth = 1;

while (depth != 0) {

switch (parser.next()) {

case XmlPullParser. END_TAG:

depth--;

break ;

case XmlPullParser. START_TAG:

depth++;

break ;

}

}

}

}

修改strings.xml中name属性为app_name(具体名称看配置)的值

/**

* @author Tibib

*

*/

public class XmlModifyUtil {

/**

* 使用的是 jdom库

*/

public static void modifyXML(File modifyXmlFile, String appNameAttrValue,

String appNameText) {

OutputStreamWriter bos = null ;

try {

SAXBuilder builder = new SAXBuilder();

if (modifyXmlFile.exists()) {

Document document = (Document) builder.build(modifyXmlFile);

Element root = document.getRootElement();

List stringChildList = root.getChildren( "string");

for (Element element : stringChildList) {

String nameAttrValue = element.getAttribute("name" )

.getValue();

if (nameAttrValue.equals(appNameAttrValue)) {

element.setText(appNameText);

}

}

String xmlFileData = new XMLOutputter().outputString(document);

// strings.xml默认是UTF-8格式

bos = new OutputStreamWriter(

new FileOutputStream(modifyXmlFile), "UTF-8" );

bos.write(xmlFileData);

bos.flush();

} else {

System. out .println("File does not exist" );

}

} catch (Exception ex) {

ex.printStackTrace();

} finally {

if (bos != null ) {

try {

bos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

执行编译和签名命令

android底层oem,Android中如何实现OEM相关推荐

  1. android底层截图,Android源码中屏幕截图的实现

    Android手机一般都自带有手机屏幕截图的功能:在手机任何界面(当然手机要是开机点亮状态),通过按组合键,屏幕闪一下,然后咔嚓一声,截图的照片会保存到当前手机的图库中,真是一个不错的功能! 以我手头 ...

  2. 怎么看手机android底层,安卓手机中fastboot是一种比recovery更底层的模式

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1 手机进入fastboot需要一定的操作才能进入,尤其是没刷过机的情况下 2 先说刷过机的,如果刷过机,root过,一般民间自制的ROM都会有重启的选项 ...

  3. android底层按键监听,Android应用中Back键的监听及处理实例

    MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...

  4. android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...

    你也能够查看我的其它同类文章.也会让你有一定的收货 关于使用Gradle来控制版本号和生成不同版本号的代码.我总结了三篇文章,网上关于这些知识,都比較零散.我在学习这些的之前.根本不知道还有这种方法. ...

  5. 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/49247815 文章出自:薛瑄的博客 你也能够查看我的其它同类文章.也会让你有一定的 ...

  6. Android 底层知识拾零,字节跳动Android高级工程师

    NotoSansTeluguUI-Bold.ttf 泰卢固语(印度) NotoSansTeluguUI-Regular.ttf ------------------------------------ ...

  7. Android 底层知识拾零,app架构升级

    NotoSansTeluguUI-Regular.ttf ----------------------------------------------------------------------- ...

  8. Android 底层知识拾零,android原生开发框架

    ------------------------------------------------------------------------------------------------- pa ...

  9. Android 底层知识拾零

    http://blog.csdn.net/zhoumushui/article/details/41623903 1.Android字库文件 打开Android源码路径: framework/base ...

  10. Android底层开发之Audio HAL Android Audio Overview

    http://blog.csdn.net/kangear/article/details/44939429 Android底层开发之Audio HAL 在Android音频底层调试-基于tinyals ...

最新文章

  1. kali linux 下载百度云大文件
  2. Linux 环境安装 Node、nginx、docker、vsftpd、gitlab
  3. 计算机组成原理——概述3
  4. PyTorch随笔-2
  5. angular6父子组件之间的引入报错
  6. .NET Core 学习资料精选:进阶
  7. 一篇搞懂mysql中的索引(大白话版)
  8. 英伟达的“千人摩擦计划”:几千个智能体互相玩耍,学习跑酷更轻松
  9. 强化学习中价值迭代和策略迭代各有什么优缺点?
  10. 记一次YUV图像分析(二)
  11. Redis——Lettuce的主从哨兵模式
  12. URP无法使用 RenderType:Overlap
  13. 华为S5300系列交换机V200R001SPH027升级补丁
  14. 一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结
  15. 关于PDF文件无法打印的问题的解决办法
  16. 笔记本计算机故障排除,笔记本电脑开机黑屏的原因及故障排除方法
  17. 双精度移位指令SHLD,SHRD
  18. 犀牛Rhino和他的插件
  19. 南京信息工程大学本科毕业论文答辩和论文选题PPT模板
  20. 进入一个家初创公司,没有完整的测试体系该如何开始展开式工作?

热门文章

  1. 02ODBC基本概念
  2. 超强Python入门基础知识总结!是时候学起来了
  3. 奉劝那些想学编程的人
  4. 工作只用jquery,原生js知道就好了
  5. java ac自动机_如何使用Java实现AC自动机全文检索实例
  6. 向上取整函数_向上取整函数ROUNDUP在BOM表里面的实际应用
  7. 获得诺贝尔奖之后影响力会下降?绘制精英科学家的职业生涯路线图
  8. 第十二届 2021年1月 蓝桥杯青少年组省赛C++组 第1题--第3题(python3实现)
  9. 第4课 列朋波骨《小学生C++趣味编程》
  10. STM32H743+CubeMX-串口重定向printf