求指导关于:AndroidMenifest.xml中的权限问题:sharedUserId

Ryan 2011-03-10 05:13:31
大家好,我正在修改2.2平台下Settings里的源码,碰到了点问题,望大家帮忙,问题是这样的



在AndroidMenifest.xml中我们可以看到android:sharedUserId="android.uid.system"
但是有了这句后,我就无法对sd卡进行读写操作,比如我丢个test.txt到sd卡下在进行IO操作,是找不到这个文件的


如果我把android:sharedUserId="android.uid.system"注释掉,就可以对test.txt进行IO操作了,也找的到这个文件。


在Settings中android:sharedUserId="android.uid.system"是不可少的,少了它很多Settings下应用直接开不了,或一开就报错。


问下大家,有什么方法在有android:sharedUserId="android.uid.system"的情况下,还能对sd卡进行读写操作吗??
...全文
1912 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangyi329 2012-11-02
  • 打赏
  • 举报
回复
看看9楼。。。
dzy83629795 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
可以解决的

关键在于你把android:sharedUserId="android.uid.system"指配给了全局,也就是说,你是这么写的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.tsinghua.onekeyalarm.autoupdate"
……
[/Quote]

用了九楼的方法,可是service并没有拿到system权限,是否还有其他的操作?
Combox2008 2012-03-21
  • 打赏
  • 举报
回复
vold 模块里的 Volume.cpp文件

doMount(devicePath, path, false, false, false,1000, 1015, 0702, true)

doMount(devicePath, path, false, true, false,1000, 1015, 0002, true)

summer小橙子 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mentats 的回复:]
可以解决的

关键在于你把android:sharedUserId="android.uid.system"指配给了全局,也就是说,你是这么写的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.tsinghua.onekeyalarm.autoupdate"
……
[/Quote]

9楼mentats,你在manifest里把system权限加给了service,可是这个service的貌似并没有拿到system权限。
我如果加到全局的话,只需要再用signapk.jar给这个apk重新弄个签名就好,如果只加给service的话,有什么额外操作吗?谢谢
http_it 2011-08-04
  • 打赏
  • 举报
回复
good,九楼的解决了我编译的问题。
傲慢的上校 2011-07-13
  • 打赏
  • 举报
回复
楼上是怎么样解决的阿?给大家分享一下阿 谢谢了。
csw429714 2011-03-31
  • 打赏
  • 举报
回复
请问楼上是怎么解决的,能说一下吗
Ryan 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mentats 的回复:]
可以解决的

关键在于你把android:sharedUserId="android.uid.system"指配给了全局,也就是说,你是这么写的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.tsinghua.onekeyalarm.autoupdate"
……
[/Quote]

非常感谢,可能是我没说清楚,你的方法是剥离,是肯定可以的。
但是我想要的是我的应用既是android.uid.system级的,又可以读写sd卡,因为我自身的应用中有些方面也要用到android.uid.system才能用的权限。

现在我解决了 我修改了 Volumn.cpp里面关于SD卡的一些东西.
sky123123 2011-03-15
  • 打赏
  • 举报
回复
丫 顶酒楼 写的太好了 我也遇到了同样的问题 就是把android:sharedUserId="android.uid.system"指配给了全局,导致无法在sdcard上创建文件,郁闷了老半天了, 现在 重要明个喽 多谢多谢啊 真是踏破铁鞋无觅处 得来就在csdn论坛哦 O(∩_∩)O~
mentats 2011-03-15
  • 打赏
  • 举报
回复
可以解决的

关键在于你把android:sharedUserId="android.uid.system"指配给了全局,也就是说,你是这么写的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.tsinghua.onekeyalarm.autoupdate"
android:sharedUserId="android.uid.system"

这样意味着你的全部进程都会以system身份在运行。这导致全部的进行都无法对sd卡进行写操作(但是可以读,你可以试试)

所以,合理的方式是只指派一个进程以system身份运行,你把需要该权限的操作都用这个进程来完成就行了。比如我让一个Service以system身份运行,让他去给我安装app,那你需要这样定义这个Service:

<service android:name="PackageInstallService"
android:sharedUserId="android.uid.system">
</service>

不要把android:sharedUserId="android.uid.system"写在整个manifest中。

这样,其他的进程,无论是Activity还是Service,都可以不受system权限的影响,可以去写sd卡了。


把完整的AndroidManifest.xml贴上来吧:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.tsinghua.autoupdate"
android:versionCode="1"
android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".AutoUpdate"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<service android:name="UpdateService" ></service>

<service android:name="PackageInstallService"
android:sharedUserId="android.uid.system">
</service>

</application>

<uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<uses-permission android:name="android.permission.INSTALL_PACKAGES"></uses-permission>

</manifest>
Ryan 2011-03-14
  • 打赏
  • 举报
回复
难道没有办法可以直接解决吗
Ryan 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 l417584711 的回复:]
setting 不可以写sd卡 就不通过他写
setting 里面的不都是在setting那个app里
比如通话设置是在phone里面
自己写一个程序 放在setting里面显示 但是这个应用没有声明sharedUserId

仅供参考,没有实际尝试过~-~
[/Quote]

不行,我也应用也得有系统权限才行,不然我有些功能实现不了,所以我也必须要有system的sharedUserId
...
Ryan 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 l417584711 的回复:]
setting 不可以写sd卡 就不通过他写
setting 里面的不都是在setting那个app里
比如通话设置是在phone里面
自己写一个程序 放在setting里面显示 但是这个应用没有声明sharedUserId

仅供参考,没有实际尝试过~-~
[/Quote]

这个也许可以,今天我试一试
无糖咖啡123 2011-03-11
  • 打赏
  • 举报
回复
我曾今也遇到过这个问题,可以确定当使用了android:sharedUserId="android.uid.system" 签名后,确实会引起无法访问SD卡的问题,解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中.
我最后的解决方式,在程序外部单独写了一个service,对这个service进行android:sharedUserId="android.uid.system"签名, 应用程序所需的数据都由service获得,然后向外广播,这个方法的确是不太好,希望有更好的办法
FrankBIBI 2011-03-10
  • 打赏
  • 举报
回复
MARK!帮顶!
android:sharedUserId="android.uid.system应该是运行在系统进程中的吧,应用程序调用需要权限吧,也要在系统进程中
具体我没试过。
aSysBang 2011-03-10
  • 打赏
  • 举报
回复
setting 不可以写sd卡 就不通过他写
setting 里面的不都是在setting那个app里
比如通话设置是在phone里面
自己写一个程序 放在setting里面显示 但是这个应用没有声明sharedUserId

仅供参考,没有实际尝试过~-~
Ryan 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 madsky007 的回复:]
遇到同样问题,帮顶。
[/Quote]

我在eoe里面悬赏100金币了,希望有高人出现啊

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧