run-as: 无法设置权限:操作不允许。

60

在安卓6.0.1上,当我尝试使用run-as时遇到了这个错误。

⋊> ~ adb shell                                                          14:29:01
shell@trlte:/ $ run-as org.ligi.passandroid                                    
run-as: Could not set capabilities: Operation not permitted

我真的很喜欢 run-as 命令 - 有没有办法让它在6.0.1上工作?


4
根据此内容,这是三星设备上的一个漏洞: https://code.google.com/p/android/issues/detail?id=206581#c4 - ChristophK
10个回答

81
如果你使用的是SAMSUNG设备,别费劲了 - SAMSUNG因为取消了setuid标志而run-as(所以run-as无法切换到不同的身份)。
此外,尝试使用Smart Switch的“重新初始化设备”解决方法也没有用,直到SAMSUNG在固件中修复它之前都不会起作用(所以最好更新到最新版本)。
使用其他方法来访问应用程序的数据,例如adb备份
adb backup -f data.ab <my.package>
dd if=data.ab  bs=24 skip=1 | openssl zlib -d > data.tar

你可以使用abe工具代替dd,该工具还可以编写.ab文件。


2
谢谢,你真是救星啊。但是在我的 Mac 上 zlib 没有起作用,所以我不得不使用 abe.jar 进行解压缩。请查看我的回答 https://dev59.com/vWUp5IYBdhLWcg3wEEI5#48077004 - Henry
5
如下面的回答所述,您可以在Mac上使用以下命令:dd if=data.ab bs=24 skip=1 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > data.tar - Marc_Alx
这对我很有效。由于我使用的是Windows,我不得不安装Cygwin并将您的命令复制到.sh文件中并运行.sh文件。它完美无缺地工作了。谢谢。 - Martin
我得到了“dd不是内部或外部命令”的错误提示。 - Vishal Thakkar
根据这条评论,在我从三星设备中卸载了我的应用程序后,Visual Studio 无法重新安装和调试,所以我运行了 adb uninstall com.companyname.packagename。现在我又能够进行调试了。 - Ranvir

13

对我来说,情况是这样的。我使用的是三星s6 API 24。错误列表日志的细节与问题中提到的相同。但是当我检查构建日志时,我在那里找到了解决方案。要设置MSBuild。因此,我按照以下步骤解决了这个问题,应用程序成功运行。

为了纠正这个问题,我必须:

从解决方案资源管理器中卸载Android项目 右键单击已卸载的项目并选择“编辑项目文件” 搜索“EmbedAssembliesIntoApk”的代码 在项目文件中找到该出现

<EmbedAssembliesIntoApk>false</EmbedAssembliesIntoApk>

将其更改为true并重新加载项目。

<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>

运行了应用程序后,该应用程序在三星S6上开始运行。


没有在Android .csproj文件中看到该行,但添加了'true'行后,我的三星s5就可以工作了。谢谢! - TriCron
非常荣幸! - SaadurRehman
只是在使用Samsung T-810平板电脑调试我的项目时,对MAUI .NET CORE 6和VS2022有了一些经验。我确认这个解决方案完美地运行! - Cheung

3
我的解决方案是在项目的调试器配置中,在参数字段中使用参数-autolaunch。
我使用Delphi 10.2和S7 Edge Android 7。

确认。在运行->参数中使用-autolaunch,对我来说有效,我使用Delphi 10.1.2和三星A7(2017)进行开发。 - Freddie Bell

1
我使用Delphi 10.1 Berlin进行编程工作。 遇到了同样的问题,我的解决方法是将SDK配置为先前版本。 我使用的是Android SDK 25.2.5.32位版本,降级到了Android SDK 24.3.3 32位版本。配置步骤如下:

工具->环境选项->SDK管理器

然后,添加必要的SDK,例如Android SDK 24.3.3 32位版本。

1
欢迎来到 Stack Overflow。请使用英语编写您的答案,因为 Stack Overflow 是一个仅限英语的站点 - Zoe stands with Ukraine
@Daniel,为了将来的参考,请不要为OP翻译帖子;即使你知道这种语言。 - Zoe stands with Ukraine

1

1
与其他答案不同,我也尝试使用智能切换和硬设备重置,但不幸的是这种方法对我无效(只是为了尝试这种方法浪费了额外的一小时)。除了无法工作外,它可能会创建附加问题“三星帐户:会话已过期” - 仅在您拥有设备的根访问权限时才能修复的问题。
我自己使用了这里的说明: https://www.youtube.com/watch?v=Sy4FWLHxGYs 然后从这里开始: https://www.tomsguide.com/us/samsung-galaxy-s6-guide,review-2856-3.html 获取设备的根访问权限,之后可以使用额外的命令“su -c”执行run-as以获取root用户。因此,整个命令将如下所示:
su -c run-as org.ligi.passandroid
警告:如果您还有任何保修,获得设备的根访问权限很可能会使其失效。
此外,我希望能够在三星Galaxy S6内部调试我的应用程序,因此我已经修改了Visual Studio组件。更多的说明可以在这里找到:

https://issuetracker.google.com/issues/37093233#comment53

如果你正好拥有三星基于的安卓设备 - 我已经向三星报告了这个错误,但我无法得到任何时间表,是否会修复这个问题。如果你拥有其他品牌的安卓设备 - 报告这个问题给制造商是有意义的。


0
在Visual Studio中,应用程序属性,Android选项中,将调试器从C++更改为.Net(Xamarin)似乎已经解决了一个混合的C++/C#应用程序的问题。

0
今天我在尝试在运行Android 6的Samsung Xcover 3上部署/调试我的应用程序时遇到了这个错误。 我通过将项目属性“Android选项/使用快速部署”更改为false来解决了这个问题。

0

@RustyX的回答对我有所帮助。在我的Mac上,zlib无法正常工作。因此,我必须使用Android Backup Extractor .ab 文件转换为.tar 文件。您可以从此处下载它。

有关完整的逐步说明,请参考此处


-1

我之前在这里发布了一个答案,但被删除了,可能是因为它是指向另一个stackoverflow问题的链接,而不是包含完整答案。

https://dev59.com/cVsV5IYBdhLWcg3wsguh#43242739重新发布其内容:

我在三星Galaxy S6 Edge上遇到了非常类似的问题,尝试在VS2015上开始调试时,我得到了一个不同于附加的截图中的错误,要简洁得多:

run-as:无法设置权限:操作不允许

基于上面附加的截图的内容,我尝试使用三星的智能切换“初始化”/恢复出厂设置设备,它实际上解决了我遇到的“run-as”问题。

这是唯一有效且不需要对设备进行root的解决方案,因此我相信它必须是公开可用的。当然,尝试此操作的人应该记住,恢复出厂设置意味着数据将会丢失,除非已备份。同样的三星软件可以帮助您备份数据。


你能解释一下“根据上面附加的截图内容,我尝试使用三星的智能切换进行'初始化' / 恢复出厂设置,实际上解决了我遇到的'run-as'问题”这句话的意思吗?我已经安装了三星的智能切换,但甚至没有看到恢复出厂设置的选项,它似乎只是用来在设备之间传输文件... - Vincy
打开智能切换,点击“更多”,选择“紧急软件恢复和初始化”。 - Giedrius
尝试执行硬重置,花费了30分钟至1小时,但问题仍然存在。请问您是否已经亲自尝试过这个方法? - TarmoPikaro
我使用我上面发布的步骤在自己的设备上解决了问题。你所说的硬重置是什么意思?硬重置与恢复出厂设置和初始化有不同的含义。 - Giedrius
无法在Galaxy S7上工作。智能切换显示“SM-G930A不支持初始化”。 - Zsombor
看起来有很多不同的设备型号。我在这里发布的说明适用于我的三星Galaxy S6 Edge,SM-G925F。我发布这种方法的优点是您不需要root您的设备。如果说明没有起作用,请尝试将操作系统更新到较新的版本。目前适用于我的操作系统版本号是NRD90M.G925FXXU5EQBC。 - Giedrius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接