android permission

###1. android permision android 采用了和Linux类型的权限隔离机制,每个应用使用独立的系统标识(uid 和)来运行,从而使得不同应用之间以及应用和系统之间隔离开来, 每一个Android 应用都是在一个进程沙箱中运行的,缺省情况下,应用无权执行可能对其它应用,操作系统或是用户造成影响的任何操作,这些操作可能包括读写用户个人数据(比如通讯录或是电子邮件),读写其它应用的文件,访问网络,拨打电话,发送短信, 录音, 拍照, 读取定位信息等 如有需要,应用必须明确指明需要和其它应用共享的资源或数据。这需要通过申明缺省“沙箱”未支持的“Permissions”来获得这些额外的功能, 应用在 AndroidManifest.xml 文件中静态声明所需permission,Android系统在安装应用时会询问用户是否赋予该应用所需权限。为避免用户决定安全问题的复杂性,Android系统不支持在运行时动态赋予应用所需permission(android M开始, 已经支持 runtime permission) 例如: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.RECEIVE_SMS" /> ... </manifest> ###2. PermissionInfo / PermissionGroupInfo android framework 中使用 class PermissionInfo 来存储permission 相关的信息, 其中几个主要的成员如下: public int protectionLevel; 该permission的保护级别, 即获取该permission需要的条件 public...

Aidl

– layout: post title: “android AIDL” description: category: android tags: [android, app] mathjax: chart: comments: false — ###1. AIDL AIDL(Android Interface Definition Language)是一种接口定义语言,编译器通过*.aidl文件的描述信息生成符合通信协议的Java代码, AIDL可以处理多线程、多客户端并发访问 ###2. 定义AIDL文件 package com.android.example; Interface IRemoteService { String hello(String someone); } AIDL 会被翻译成对应的 java 文件, 例如,...

android aar包

###1. aar 传统的jar包只能打包class文件, 并不能打包android的资源文件, 在使用jar包来发布android的库时, 除了要提供jar包, 还要额外提供res文件,为此, android在推出了 “.aar”包(Android Archive) 简单来说, “.aar” 是一个包含如下的 文件/目录 的zip包 AndroidManifest.xml (mandatory) classes.jar (mandatory) res/ (mandatory) R.txt (mandatory) assets/ (optional) libs/*.jar (optional) jni//*.so (optional) proguard.txt (optional) lint.jar (optional) ###2. 使用Android Studio 打包 aar 在 Android...

java 反射机制

###1. java reflect 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力,java反射机制是指java语言动态获取信息以及动态调用对象的方法的特性: 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法 生成动态代理 java程序中一些类或方法中经常加上“@hide”注释标记。它的作用是使这个方法或类在生成SDK时不可见,因此由此注释的东西,你在编译期是不可见的,但是这样的类或者方法可以通过反射来访问 ###2. Class相关基础 Java中有一个Class类。Class类本身表示Java对象的类型,Class类是整个Java反射机制的源头 获得Class对象的方法有许多,但是没有一种方法是通过Class的构造函数来生成Class对象的: 类实例.class 例如 Test test; Class cl = test.class 类名.getClass() 例如 Class Test{}; Class cl = Test.getClass(); Class.forName(“类名”) 例如 Class cl = Class.forName(xxx.xxx.xxx.Test); 类名.TYPE (只适用于boolean,byte,char,short,int,long,float,double,void这些基本数据类型) 例如 Class...

android DexClassLoader

###1. ClassLoader “类装载器”(ClassLoader),顾名思义,就是用来动态装载class文件的。标准的Java SDK中有个ClassLoader类,借助此类可以装载需要的class文件,前提是ClassLoader类初始化必须指定class文件的路径。 每一个ClassLoader必须有一个父ClassLoader,在装载Class文件时,子ClassLoader会先请求其父ClassLoader加载该文件,只有当其父ClassLoader找不到该文件时,子ClassLoader才会继承装载该类。这是一种安全机制。对于Android而言,最终的apk文件包含的是dex类型的文件,dex文件是将class文件重新打包,打包的规则又不是简单地压缩,而是完全对class文件内部的各种函数表,变量表进行优化,产生一个新的文件,即dex文件。因此加载这种特殊的Class文件就需要特殊的类加载器。 android中提供了如下的2个类加载器: DexClassLoader :可以加载文件系统上的jar、dex、apk PathClassLoader :可以加载/data/app目录下的apk,这也意味着,它只能加载已经安装的apk URLClassLoader :可以加载java中的jar,但是由于dalvik不能直接识别jar,所以此方法在android中无法使用,尽管还有这个类 jar必须转换成dalvik所能识别的字节码文件,转换工具可以使用android sdk中platform-tools目录下的dx, 转换命令示例: dx --dex --output=dest.jar src.jar 利用这种技术, 可以实现apk插件, 被加载的apk称之为插件,因为机制类似于生物学的”寄生”,加载了插件的应用也被称为宿主。 ###2. DexClassLoader DexClassLoader的原型如下: DexClassLoader(String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent) 形参的意义如下: dexPath 需要装载的APK或者Jar文件的路径。包含多个路径用File.pathSeparator间隔开,在Android上默认是 “:” optimizedDirectory 优化后的dex文件存放目录,不能为null libraryPath...