java.lang.SecurityException:Permission Denial:

时间:2010-06-21 07:28:50

标签: android

我使用Instrumentation来测试PhoneApp 我通过Instrumentation

编写了我的测试应用程序

我创建了apk并在Nexus One上安装了它 - Android手机 - 这个通过了 在我的代码中,我使用的内部类不是标准SDK的一部分。 我不是在Eclipse中构建它,而是在我的嵌入式环境中构建它。我是开发Android的公司所以我拥有和所有内部库的Android树。

我在清单中使用了适当的权限。

我的apk创建可能签名了一些签名!! 但可能这个签名不够好。

现在我通过adb运行测试并立即收到此错误:

-------------------------------------------------------------------------------------
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Permission Denial: starting instrumentation ComponentInfo{com.android.phonetests/com.android.phonetests.PhoneInstrumentationTestRunner} from pid=495, uid=495 not allowed because package com.android.phonetests does not have a
 signature matching the target com.android.phone
INSTRUMENTATION_STATUS_CODE: -1
java.
lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{com.android.phonetests/com.android.phonetests.PhoneInstrumentationTestRunner} from pid=495, uid=495 not allowed because package com.android.phonetests does not have a
signature matching the target com.android.phone
-------------------------------------------------------------------------------------

请帮忙。

9 个答案:

答案 0 :(得分:4)

您找到了解决此问题的方法吗?当我在使用另一个密钥签名的设备上安装测试apk时,我可以重现这一点。

因此,为了使用您的应用程序包和测试包修复执行第一次adb卸载。

adb uninstall com.android.phone
adb uninstall com.android.phonetests

答案 1 :(得分:1)

  

我认为问题可能是   用于签署“主要”的证书   应用程序和您的测试应用程序是不同一世   假设您的测试应用正在定义   本身作为你的仪器   主应用程序。这样做可以让你的测试   应用程序在主应用程序的进程中运行,   访问它的类等,因此   这两个应用必须是安全原因   用相同的证书签名。

答案来自this forum

答案 2 :(得分:1)

清理您的项目,并立即构建。 如果有这样的迭代,请查看AndroidManifest:

category android:name="android.intent.category.LAUNCHER"

答案 3 :(得分:1)

错误是因为您正在测试系统权限级别的应用程序,要测试的应用程序应该在系统/数据中,而application_test项目可以安装在data / app中

答案 4 :(得分:1)

这是

  

'签名匹配'

问题。确保测试项目的APK和目标项目的APK使用相同的证书进行签名。

答案 5 :(得分:0)

我通过添加签名我的应用程序的证书来修复同样的问题,如Android开发者网站中所述: 在Eclipse中:转到Windows>偏好> Android>在自定义调试密钥库中构建和添加应用程序密钥库。

重建测试包,你应该好好去。

希望这有帮助。

答案 6 :(得分:0)

可以通过从模拟器中卸载apk文件和测试应用程序来解决此问题。然后使用re-sign.jar重新签名应用程序,然后安装apk然后运行测试应用程序。

答案 7 :(得分:0)

有一个类似的问题,没有运气让任何签名同意。

使用调试应用程序构建(./gradlew assembleDebug)而不是发布可以帮助完全解决问题,因为调试应用程序在安装之前不需要签名。

答案 8 :(得分:0)

此解决方案仅适用于系统应用

在我的情况下,当我为现有系统应用程序创建InstrumentationTest案例时出现此错误(我们正在构建基于AOSP的自己的Android操作系统)

我们通常使用基于mm文件的Android.mk命令构建apk,此处的关键是LOCAL_CERTIFICATE

在目标系统应用中查找Android.mk以及由您开发的测试用例项目。

系统应用的Android.mk LOCAL_CERTIFICATE值应与InstrumentationTest案例项目的Android.mk LOCAL_CERTIFICATE值匹配

祝你好运!