分类目录归档:Android开发

Android开发经验

Android权限机制总结与常见权限不足问题分析

Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制, 很多像我这样的新手,尤其是习惯了windows低安全限制的用户,很容易在这方面弄混淆,下面是我总结的Android系统权限相关的内容, 作为这段时间对android权限学习的总结,也希望能对大家有所帮助,不正确之处请指出。 首先分清两个概念: 要区分apk运行时的拥有的权限与在文件系统上被访问(读写执行)的权限两个概念。 apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置。 (一)linux文件系统上的权限 -rwxr-x–x system   system       4156 2010-04-30 16:13 test.apk 代表的是相应的用户/用户组及其他人对此文件的访问权限,与此文件运行起来具有的权限完全不相关。 比如上面的例子只能说明system用户拥有对此文件的读写执行权限;system组的用户对此文件拥有读、执行权限;其他人对此文件只具有执行权限。 而test.apk运行起来后可以干哪些事情,跟这个就不相关了。 千万不要看apk文件系统上属于system/system用户及用户组,或者root/root用户及用户组,就认为apk具有system或root权限。 (二)Android的权限规则 (1)Android中的apk必须签名 这种签名不是基于权威证书的,不会决定某个应用允不允许安装,而是一种自签名证书。 重要的是,android系统有的权限是基于签名的。比如:system等级的权限有专门对应的签名,签名不对,权限也就获取不到。 默认生成的APK文件是debug签名的。 获取system权限时用到的签名,见:如何使Android应用程序获取系统权限 (2)基于UserID的进程级别的安全机制 大家都知道,进程有独立的地址空间,进程与进程间默认是不能互相访问的,是一种很可靠的保护机制。 Android通过为每一个安装在设备上的包(apk)分配唯一的linux userID来实现,名称为”app_”加一个数字,比如app_43 不同的UserID,运行在不同的进程,所以apk之间默认便不能相互访问。 Android提供了如下的一种机制,可以使两个apk打破前面讲的这种壁垒。 在AndroidManifest.xml中利用sharedUserId属性给不同的package分配相同的userID,通过这样做,两个package可以被当做同一个程序, 系统会分配给两个程序相同的UserID。当然,基于安全考虑,两个package需要有相同的签名,否则没有验证也就没有意义了。 (这里补充一点:并不是说分配了同样的UserID,两程序就运行在同一进程, 下面为PS指令摘取的, 显然,system、app_2分别对应的两个进程的PID都不同,不知Android到底是怎样实现它的机制的) User   PID PPID system    953   … 继续阅读

发表在 Android开发 | 标签为 , | 留下评论

Android样式之在代码中添加样式

有时候需要在java中定义控件,但是系统的控件难看。 想换Style?setStyle?Android View中根本就没有这个方法。 因为Style不是一个属性,而是一个属性集合。所以是无法直接set的。 这里以CheckBox做示例 找到framework下的res目录下的values/Theme.xml。找到CheckBox的样式定义 1 2 3 <item name="checkboxStyle"> @android:style/Widget.CompoundButton.CheckBox </item> 打开同目录下的style.xml,找到“Widget.CompoundButton.CheckBox”样式。 1 2 3 4 5 6 7 8 <style name="Widget.CompoundButton.CheckBox"> <item name="android:background"> @android:drawable/btn_check_label_background </item> <item name="android:button"> @android:drawable/btn_check </item> </style> 下面知道该怎么做了吧? 在代码中给上面的属性赋相应的值就可以了。 1 2  cb.setBackgroundResource(R.drawable.checkbox_bg);  cb.setButtonDrawable(R.drawable.checkbox_button); 还有一种方法,但是对大部分应用程序来说都做不到,因为需要在系统资源中添加Style(可能有更好的方法,暂未找到)。 … 继续阅读

发表在 Android开发 | 标签为 , | 留下评论

ListView之动态修改

关于ListView样式及内容的动态修改,本文使用了重写BaseAdapter。 MyAdapter 类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 … 继续阅读

发表在 Android开发 | 标签为 , | 留下评论

众多Android 开源项目推荐,给力工作给力学习

FBReaderJ  FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb、ePub和fb2。此外还支持直接读取zip、tar和gzip等压缩文档。   项目地址:http://www.fbreader.org/FBReaderJ/   Angle     Angle是一款专为Android平台设计的,适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现。项目地址: http://code.google.com/p/angle/         android-shuffle    android-shuffle是一个GTD(Getting Things Done)个人备忘记事本。   项目地址:http://code.google.com/p/android-shuffle/      Open GPS Tracker  GPSTracker是一个能够使用Android地图记录你的驾车或旅行路线的项目,出发前打开软件选择开始记录,你所经过的路线就会实时显示在地图上,同时还会显示当前的行驶速度。程序会按用户自己设置的标题自动存路线留做日后查看,也可以把路线分享给朋友。GPSTracker项目是一个Map方面的完整应用,包括两个主要组成部分,第一部分是一个收集和存储GPS追踪数据的系统服务,第二部分是Map Activity控制跟踪数据并在地图上显示提供接口。GPSTracker项目用到了osmdroid项目的部分功能,其中OpenStreetMap是一个可供自由编辑的世界地图,允许您查看,编辑或者使用世界各地的地理数据来帮助您。   项目地址:http://code.google.com/p/open-gpstracker/      Rokon  Rokon是一个强大、可扩展、灵活的Android 2D游戏引擎,基于OpenGL ES技术开发,物理引擎为Box2D,因此能够实现一些较为复杂的物理效果,有人将它称为Cocos2d-iPhone引擎的Android版(因为业务逻辑和编码风格上也确实很像)。 )。 项目地址:http://code.google.com/p/rokon/        … 继续阅读

发表在 Android开发 | 标签为 , | 留下评论

Android Permission中英对照

android.permission.ACCESS_CHECKIN_PROPERTIES Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded 允许读写访问 “properties”表在checkin数据库中,改值可以修改上传 android.permission.ACCESS_COARSE_LOCATION Allows an application to access coarse (e.g., Cell-ID, WiFi) location 允许一个程序访问CellID或WiFi热点来获取粗略的位置 android.permission.ACCESS_FINE_LOCATION Allows an application to access fine (e.g., … 继续阅读

发表在 Android开发 | 标签为 , , | 留下评论

Android 控制台错误 应用程序获取系统权限

在windows平台通过eclipse编译android源码中,如果编译Settings或者android manifest XML中 shared user id 包含android.uid.shared等系统权限的时候,则会报以下错误。 一、Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE 1、由于卸载没有完全,可以使用设置中卸载相应应用,或者adb uninstall com.android.*** 二、Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 主要是由于使用了android.uid.shared导致的问题。 第一个方法简单点,不过需要在Android系统源码的环境下用make来编译: 1. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行 2. 使用mm命令来编译,生成的apk就可以在模拟器中运行了。 第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译: 1. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。 2. 查看Android.mk文件,加入LOCAL_CERTIFICATE := 这一行,根据这行的内容,选择相应的签名。 platform—–>platform.pk8和platform.x509.pem shared  —–>shared.pk8和shared.x509.pem 3. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦, 首先找到密钥文件,在我的Android源码目录中的位置 是”build\target\product\security”,下面的platform.pk8和platform.x509.pem 两个文件。 然后用Android提供的Signapk工具来签名,signapk的源代码是 … 继续阅读

发表在 Android开发 | 标签为 , | 留下评论