如何使用系统签名密钥签署我的应用程序?

时间:2010-08-24 13:52:00

标签: android

我需要创建一个Robotium应用程序,该应用程序将使用“设置”应用程序从菜单设置 - >无线&中打开/关闭WIFi。网络 - >无线网络连接。我设法找到了一些示例代码here,它演示了如何通过仅使用apk文件来启动应用程序。问题是我的Robotium应用程序应该与(系统)设置应用程序具有相同的签名。在尝试运行应用程序时,我收到错误消息:

  

测试运行失败:权限拒绝:   开始仪器   ComponentInfo {com.jayway.test / android.test.InstrumentationTestRunner}   从pid = 354,uid = 354不允许   因为包com.jayway.test的确如此   没有签名匹配   目标com.android.settings

  1. 我可以以某种方式使其与Android模拟器一起使用吗?
  2. 如果我编译Android手机图像,如何在我的应用程序中使用Android系统签名?

2 个答案:

答案 0 :(得分:15)

我遇到了同样的问题..有一些权限只允许系统应用程序拥有。我试图访问 来自我的应用程序的adb shell dumpsys命令,其权限为android.permission.DUMP

解决方法是......

在项目的Android清单文件中,在清单标记

中添加以下行
android:sharedUserId="android.uid.system"

您需要在代码中包含两个签名密钥,用于构建二进制文件。

  

platform.x509.pem

     

platform.pk8

中存在的

  

机器人/建造/目标/产品/安全

从网上下载工具,即

  

signapk.jar

从eclipse导出你的未签名的apk。通过右键单击android工具中的项目。 将所有内容(即keys,unsigned apk和signapk.jar)保存在一个文件夹中。运行以下命令

java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk signed.apk

unsigned apk是你的apk的名字,而signed apk是你想要的新名字。 在此之后,只需使用命令

在手机中安装已签名的应用程序
adb shell install signed.apk

答案 1 :(得分:1)

从您的应用程序启用wifi的最佳方法是使用WifiManager

WifiManager wManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);

if(!wManager.isWifiEnabled() && wManager.getWifiState() != WifiManager.WIFI_STATE_ENABLING)
    wManager.setWifiEnabled(true);

注意:您还必须向清单添加以下权限

<uses-permission android:name="android.permissions.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permissions.CHANGE_WIFI_STATE" />