2017年的第一篇文章,新的起点,不忘初心

花了点时间,解决了最近遇到的一个问题:

在引用第三方的服务时都会在Manifest中添加权限,一般都是无脑的复制粘贴,久而久之,项目里重复的权限越来越多

在我印象里好像以前的编辑器是会提醒你在AndroidManifest.xml里重复申请的权限,无论是eclipse还是Android studio,不过很奇怪,现在好像这个功能没有了,就算你重复申请了很多,只会在你编译的时候在日志里警告你一下,不会报错。

但是对于有严重强迫症的我,怎么能忍一大堆重复的权限呢,so ...

用Python写了个简单的脚本,方便快捷

欢迎提 bug

去除AndroidManifest.xml里重复申请的权限(uses-permission)

使用说明:

本程序使用ElementTree对XML进行处理,它在Python2.5以后成为Python标准库的一部分,但是Python2.4之前需要单独安装。

使用方法:

将 ClearManifest.py 和 AndroidManifest.xml 放在一个文件夹下

然后执行 python ClearManifest.py

得到的 AndroidManifest.xml 就是清理后的文件( AndroidManifest_backup.xml 为备份)

以下为源码:

# -*- coding: UTF-8 -*-

'''

Created on 2017年1月1日

@author: ckdroid

'''

import xml.etree.ElementTree as ET

import sys

import shutil

class PCParser(ET.XMLTreeBuilder):

def __init__(self):

ET.XMLTreeBuilder.__init__(self)

# assumes ElementTree 1.2.X

self._parser.CommentHandler = self.handle_comment

def handle_comment(self, data):

self._target.start(ET.Comment, {})

self._target.data(data)

self._target.end(ET.Comment)

# 备份源文件

shutil.copy("AndroidManifest.xml", "AndroidManifest_backup.xml")

try:

# 定义namespace,这一步必须在parse之前做

ET.register_namespace('android', "http://schemas.android.com/apk/res/android")

ET.register_namespace('tools', "http://schemas.android.com/tools")

ET.register_namespace('app', "http://schemas.android.com/apk/res-auto")

parser = PCParser()

tree = ET.parse("AndroidManifest.xml",parser) #打开xml文档

root = tree.getroot() #获得root节点

except Exception, e:

print "Error:cannot parse file:AndroidManifest.xml."

print e

sys.exit(1)

print('root.tag =', root.tag)

#获得 android 的 name space

name_space="{http://schemas.android.com/apk/res/android}"

mdict = { };

print('----- clear uses-permission -----')

for element in root.findall('uses-permission'):

rank = element.get(name_space+'name')

if(mdict.has_key(rank)):

root.remove(element)

print(rank)

else:

mdict[rank]=element

print('----- clear done -----')

tree.write('AndroidManifest.xml',encoding="utf-8", xml_declaration=True, method='xml')

android 重复申请权限,去除AndroidManifest.xml里重复申请的权限(uses-permission)相关推荐

  1. android基础知识13:AndroidManifest.xml文件解析【转载】

    注:本文转载于:http://blog.csdn.NET/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...

  2. android id 重名_android 中Xml里面的id重名问题

    今天在做项目的时候,居然发现@+id 居然可以重名,而且 情况一:同个一个Xml文件中的同名 在同个一个Xml文件的中若同名了,则前一个有效,而后一个无效,即后一个Null掉.如: android:i ...

  3. Android应用清单文件:AndroidManifest.xml

    AndroidMainfest.xml清单文件是每个Android项目所必需的,它是整个Android应用的全局描述文件. <?xml version="1.0" encod ...

  4. android 微信6.2.0 AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8" standalone="no"?> <manif ...

  5. python去重复行_python 去除Excel中的重复行数据

    原博文 2019-08-05 16:15 − 导入pandasimport pandas as pd1.读取excel中的数据:frame = pd.DataFrame(pd.read_csv('ex ...

  6. Android系统版本在6.0+以上需要动态申请权限

    在Androidmanifest.xml里申请过还不够,还需要在Mainactivity里动态申请.调试时报错有2种,不能创建父目录和连接超时.好用的框架有com.github.dfqin:grant ...

  7. android 获取AndroidManifest.xml中的meta-data元素

    android 开发中: 在AndroidManifest.xml中,<meta-data>元素可以作为子元素, 被包含在<activity>.<application& ...

  8. android调用另一app的xml,Android 7.0+调用其他App打开文件

    ​ 近期需要用到读取Android设备外存中的JSON和Word,在前期开发时用于调试的是Android 6.0的米4,当拿到实际应用环境(Android 7.0)时,Android 6.0之后的版本 ...

  9. 对Android系统权限的认识(包含如何获得root权限思路)

    点击打开链接 Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制, Android系统权限相关的内容, (一)linux文件系统上的权限 -r ...

最新文章

  1. C#让windows程序只运行一次
  2. 如何解决Keil5打红叉的问题
  3. 小白入门深度学习 | 第四篇:配置PyTorch环境
  4. Linux线程时间片如何修改,请教如何修改线程时间片
  5. STL--lower_bound()upper_bound();
  6. 面向视频原生,火山引擎发布视频云与边缘云软硬一体的新云解决方案
  7. flatMap()和事件顺序– RxJava常见问题解答
  8. 关于mysql的cpu占用高的问题
  9. vue学习:7、路由跳转
  10. 温故而知新 forEach 无法中断(break)的问题
  11. 最简单的PHP MVC留言本实例(二)
  12. soapUI简介、安装使用教程、接口(性能)测试
  13. CSGO中最新骗术!新老玩家须知-CSGO防骗指南
  14. 计算机考研的初试和复试的区别,考研初试和复试之间的区别
  15. 4、6、7、8、9、11、13、27的倍数的特征
  16. 面试常见的 10 大问题
  17. 笔记 09-集合(HashSet HashMap TreeMap) 练习
  18. ps人物素描及黑白上色
  19. tree--树,最常见的复杂关系结构
  20. 劣质VGA线导致不支持非标准分辨率显示

热门文章

  1. 【Rayeager PX2分享】OpenCV入门之图像显示
  2. MySQLdb不能调用Sql脚本?
  3. 11种刷新按钮的方法
  4. Part 1——使用 Go Modules
  5. Make sure you've included captcha.urls as explained in the INSTALLATION section on
  6. Cassandra 权威指南
  7. Linux取消挂载,删除用户及其目录
  8. 【Linux开发】【Qt开发】Qt界面键盘、触摸屏、鼠标的响应设置
  9. JMeter启动时显示Could not open/create prefs root node Software\JavaSoft\Prefs at root 0X80000002...
  10. 网页设计中时尚​​的下拉菜单案例