SharedUserId

关于SharedUserId的总结:

我们知道一般每个app都有一个唯一的linux user ID,则这样权限就被设置成该应用程序的文件只对该用户可见,只对该应用程序自身可见,而我们可以使他们对其他的应用程序可见,这会使我们用到SharedUserId,也就是让两个apk使用相同的userID,这样它们就可以看到对方的文件。为了节省资源,具有相同ID的apk也可以在相同的linux进程中进行(这儿需要注意,并不是一定要在一个进程里面运行),共享一个虚拟机。

我们可以建立两个application,分别为test_a和test_b,我们的目的就是让test_b访问test_a里面的文件或者是数据:具体做法如下

在test_a应用程序的包com.test1的manifest里面添加anroid:shareuserid=“com.test2”(注:这儿test_a是被访的apk,so 加上这句 android:exported="false"说明它是私有的,然后会让shareuserid应用更有力)

具体内容如下:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test1" android:sharedUserId="com.test2" android:exported="false" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".TestAcitvity1" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

然后再应用程序test_b的包com.test2下的manifest.xml中添加anroid:shareuserid=“com.test2”

然后在test_b的TestActivity2中添加如下代码:

private Button.OnClickListener button_listener = new Button.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClassName("us.imnet.iceskysl.db","us.imnet.iceskysl.db.DBSharedPreferences"); //intent.setClassName("com.test1","com.test1.TestActivity1"); startActivity(intent); } };

这样就可以调整跳转,然后就可以运行。完整代码是:

package com.test2; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class TestActivity2 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); find_and_modify_button(); } private void find_and_modify_button(){ Button change_test1 = (Button) findViewById(R.id.change_test1); change_test1.setOnClickListener(button_listener); } private Button.OnClickListener button_listener = new Button.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClassName("us.imnet.iceskysl.db","us.imnet.iceskysl.db.DBSharedPreferences"); //intent.setClassName("com.test1","com.test1.TestActivity1"); startActivity(intent); } }; }

运行结果是:从test_b的TestActivity1中进去,然后跳到TestActivity2中,这样可以读取到它里面的数据出来

文件访问:

可以通过getSharedPreferences(String, int), openFileOutput(String, int) 或者 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)创建一个新文件时, 你可以同时或分别使用 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 标志允许其它包读/写此文件。

下面是用getSharedPreferences(String, int),创建到文件,修改它的属性为MODE_WORLD_WRITEABLE 则看到它的文件权限的变化:

(补充):关于linux下面文件权限

第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。
w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
-:表示不具有该项权限

android安全和权限①----ShareUserId和文件访问(File Access)--Security and Permission相关推荐

  1. Linux 权限管理: 权限的概念、权限管理、文件访问权限的设置、 粘滞位

    Linux下的基本指令 目录: 权限的概念 权限管理 文件访问权限的设置方法 目录的权限 粘滞位 权限的概念 Linux下用户有两种: 超级用户(root).普通用户. 超级用户:具有最高权限,可以在 ...

  2. Android中SeLinux权限 .te文件编写

    在android中添加一个LocalSocket通信,权限部分折腾了好几天,终于搞定了. 首先在root权限下使用setenforce 0命令放开selinux权限,看看需要的操作是否能成功.如果可以 ...

  3. 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致

    安装 32位  库文件 sudo apt-get install lib32z1 给文件夹加权限 chmod 777 -R SDK chmod 777 -R android-studio -R表示所有 ...

  4. 【安卓笔记】android申请储存权限,读写文件

    首先在AndroidManifest.xml中注册读取USB存储设备中的内容 <!-- 读取您的USB存储设备中的内容 --><uses-permission android:nam ...

  5. android tmp目录权限不够,/tmp目录下执行脚本失败提示Permission denied

    Linux上执行Shell脚本运行失败提示Permission denied一个问题,挺好的问题,切中了知识盲点. 问题现象 Shell脚本在/tmp目录下,执行./test.sh运行失败,提示Per ...

  6. Android隐藏的权限管理机制:AppOps

    最近整理以前开发中的笔记,发现有点零乱,遂决定将这些笔记整理迁移到 CSDN 上,分享出来与大家一起交流学习.如果有发现不当或有待商榷的地方,欢迎大家拍砖和指正.废话结束,进入本文正题:Android ...

  7. linux 文件权限 rwt,linux 文件权限

    三种特殊权限简介 SUID 当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行, 也就是说无论谁来执行这个文件,他都有文件所有者的特权. 如果所有者是 root 的话,那么执行人 ...

  8. Android Studio SD卡访问权限及asserts文件夹下的文件操作

    Android Studio SD卡访问权限 1.在 AndroidManifext.xml 中添加如下代码 <uses-permission android:name="androi ...

  9. linux文件的权限模式,Linux文件权限和访问模式

    为了更加安全的存储文件,Linux为不同的文件赋予了不同的权限,每个文件都拥有下面三种权限: 所有者权限:文件所有者能够进行的操作 组权限:文件所属用户组能够进行的操作 外部权限(其他权限):其他用户 ...

最新文章

  1. 浅谈并发与并行(一)
  2. jcenter下载慢
  3. ubuntu下小键盘不能用
  4. frpc在linux下开机启动,frp 设置开机自启
  5. 实战RxSwift中的Observable, subscribe, dispose, filter
  6. c语言源程序注释说明只能,C语言选择题
  7. 《自己动手写网络爬虫》笔记3-宽度优先遍历互联网
  8. GD32上SFUD万能Flash驱动移植
  9. Python读取文件找出重复元素
  10. 根2是无理数的几种证明方法
  11. noi linux 比赛使用哪个编译器,noi linux简介.pdf
  12. Java实现HTML页面截图功能
  13. 阿里云服务器可选系统有哪些?如何选择?
  14. 《击掌为盟》读后感1742字
  15. ABP框架—从项目下载到运行详细讲解
  16. 修改DNS—出现一个意外,不能完成更改
  17. 散转程序c语言,单片机 散转表程序的使用
  18. 小说里的编程 【连载之二十二】元宇宙里月亮弯弯
  19. 8、Hudson集成服务器的安装配置与使用
  20. ps切图与版心页面布局注意问题

热门文章

  1. ChatGPT的前生: Prompting思想
  2. 毕业设计实验日志2021.0304
  3. python炒股教程_Python股市数据分析教程 学会它,或可以实现半“智能”炒股
  4. 转载:我对大数据算法的认知
  5. 博客备份到iPhone/ipad,我的博文我做主
  6. 历史回顾:全球股灾大放送
  7. cocos2dx 制作单机麻将(一)
  8. PHP7.0至PHP8部分特性总结
  9. 机器学习算法之Boosting
  10. 金三银四想拿到20K的高薪offer,到底是不是痴人说梦