UIDandroid
A. 安卓的UID是什么意思
Android 里的 UID 是 跟随着“软件”(例如 Android 应用程序)。 由于每个应用程序都有个 UID,只有带着此 UID,才能存取该 UID 所涵盖的有关资料。就跟安装软件的附件一样吧。
B. android中如何生成uid
一般android系统会自动为应用生成一个uid,并且每个应用会被分配不同的UID ,用于管理各个应用的权限以及数据共享。。。其次我查了一些资料。在AndroidMenifest.xml中 在<manifest>标签里面增加 android:sharedUserId="xxxx",“xxxx”就是你自定义的uid了。。
C. android中如何生成uid
一般android系统会自动为应用生成一个uid,并且每个应用会被分配不同的UID
,用于管理各个应用的权限以及
数据共享
。。。其次我查了一些资料。在AndroidMenifest.xml中
在
标签里面增加
android:sharedUserId="xxxx",“xxxx”就是你自定义的uid了。。
D. android系统的uid问题
不对,UID不是数字,PID才是,PID也没有你说的那种情况。应用程序的UID是app_#,#代表数字。而系统进程的UID是root或者system
连上android设备或者模拟器,进入adb shell,top就可以看到当前所有进程。
E. android手机中PID和UID有什么联系
PID就是各进程的身份标识,独一无二。
UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理。
找了一个详细讲解的网页,你看下。http://www.cnblogs.com/perseus/articles/2354173.html
F. android uid 和 pid 的理解获取
1.理解
uid:uid 对于 应用来说其实就是指我们当前应用是在那个 group 组内
就是指这个shareuserid,一个组内的uid相同,,并且具有相同的uid的应用才能共享用户内存
pid:是指每个进程在liunx下的 进程的id 是唯一的。
2.获取
获取uid:
PackageManager pm = getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo("com.speedsoftware.rootexplorer", PackageManager.GET_ACTIVITIES);
Log.d("!!", "!!" + ai.uid);
获取pid:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> list = activityManager.getRunningAppProcesses();
for(ActivityManager.RunningAppProcessInfo runningAppProcessInfo : list){
if(runningAppProcessInfo.pid == pid){
processName = runningAppProcessInfo.processName;
}
}
G. Android中的uid
uid 是user 用户id
Android 里的UID是基于应用程序,每一个程序都有一个UID,如果应用程序1和应用程序2的uid不同,则在default情况下,二者无法读取对方的数据,这样提升了应用的安全性。
当使用者安装了某一应用程序时,android系统就会赋予一个uid,用户可以在屏幕上的窗口里可以检视这个AndroidManifest.xml档案的内容,用户回了解这个应用程序的目的、权限等,并选择接受与不接受。
一些特殊情形下,两个应用程序是可以持有一样的UID。
例如,当需要推出新版本时,这两种版本的程序可以持有一样的UID, 才有权限将旧版程序的数据转移到新版软件里。
Pid 是 process 进程ID,Uid 是 user 用户ID,只是Android和计算机不一样。
计算机每个用户都具有一个Uid,而Android中每个程序都有一个Uid。
默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果用互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性。
每一个不同的 程序 都能有一个UId,但是一个应用里面可以有多个PId。
一个用户可以打开多个进程(Pid),并且这些进程的uid是一样的;
一个pid对应一个进程,每次打开时系统都会赋予不同的pid,但是uid是当你安装Apk时,系统赋予的,是不变的,除非你卸载了重装,又会重新赋予一个Uid;
参考: 认识Android的UID(Unix user ID)与权限
ANDROID 中UID与PID的作用与区别
H. Android uid
Process#uid 即 ApplicationInfo#appId 、UserHandle#appId 为从 Process#FIRST_APPLICATION_UID 开始增加的数字。其中约定 system 应用的 uid 为 Process#SYSTEM_UID,phone 进程为 Process#SYSTEM_UID 等。
这个 uid 在应用安装时就由 PMS 分配:
I. 如何获得所有android应用程序UID
一、修改Android Studio(以下简称AS)的内存配置
因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一个没有classpath的JDK, 这样可以确保使用源码里的库文件
并将其作为要使用的SDK的java SDK。
三、生成导入AS所需配置文件(*.ipr)
①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)
②检查out/host/linux-x86/framework/目录下是否有idegen.jar
如果idegen.jar不存在,执行:
mmm development/tools/idegen/
在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。
我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。
③执行
development/tools/idegen/idegen.sh
等待出现类似下面的结果:
Read excludes: 5ms
Traversed tree: 44078ms
这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ IDEA(AS是基于IntelliJ IDEA社区版开发的)的配置文件
Tips:
AS在导入代码时比较慢,建议先修改android.iml,将自己用不到的代码exclude出去.可以仿照过滤.repo文件夹的语法,如:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
删除掉所有不需要的mole-library项
这样在导入时就会跳过abi和art文件夹.过滤的越多,AS的处理速度就会越快.
④在AS中打开源码根目录下新生成的android.ipr
如果在导入时AS出现
则建议按照其给定的解决方法来解决(网址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit)
四、解决源码中跳转错误问题
①为当前工程设置正确的SDK和JDK
②设置'Moles'的依赖
先将所有依赖删掉(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
点击指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:
注:推荐把frameworks和external这两个移到最上面,这样在代码跳转时会优先从这两个文件夹下查找,而不是在Android.jar中查找。
其它版本的代码在添加frameworks时可能会显示成:
没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的.
如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可.
五、DEBUG源码
可以通过给刚导入的工程在'Moles'中添加'Android Framework'来让AS将它作为一个Android工程,从而方便调试代码.
可以来添加Android Framework支持.
在代码中加断点,然后选择'Run'->'Attach debugger to Android process'
在弹出的选择进程(Choose Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.
六、其它
代码中很多地方提示Call requires API Level x.... 出现这个问题是因为AS将工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.
只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。
也可以考虑使用build.gradle来解决该问题。
J. Android 怎样添加对应的权限UID,使用 property
1.首先在源代码根目录(src下)下创建一个名为netconfig.properties的文件(也可以在其他目录下)。
2.打开netconfig.properties文件,在该文件中添加下列代码.
Java代码:
#该处为注释
IP=192.168.1.111
PORT=3535
MSG=这是一个很长的字符串,<br>我们可以使其换行 \
一行显示不下时,<br>可以分行显示。
#该处为注释
IP=192.168.1.111
PORT=3535
MSG=这是一个很长的字符串,<br>我们可以使其换行 \
一行显示不下时,<br>可以分行显示。
说明:上面代码中,#为配置文件中的注释,而在配置文件中,可以使用<br>等进行格式处理,在配置文件中,如果某个属性过长,一行不能输入完全是,可以通过 \ 通知系统,下一行同样为该属性的值。
3.之后创建一个工具类Utils类,其代码如下所列。
**
* @description: 工具类
* @version 1.0
* @created on 2010-12-3 下午02:39:52
*/
public class Utils {
/**
* 得到netconfig.properties配置文件中的所有配置属性
*
* @return Properties对象
*/
public static Properties getNetConfigProperties() {
Properties props = new Properties();
InputStream in = Utils.class.getResourceAsStream("/netconfig.properties");
try {
props.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return props;
}
}
4.在需要使用配置文件中配置的属性值时,直接调用上述方法即可,如下所示。
String IP = Utils.getNetConfigProperties().getProperty("IP");