2010-08-24 14 views
8

Necesito crear una aplicación Robotium que usaría la aplicación de Configuraciones para activar/desactivar WIFi desde el menú Configuración-> Redes inalámbricas &-> Wi-Fi. Logré encontrar un código de ejemplo here que demuestra cómo iniciar la aplicación teniendo solo un archivo apk. El problema es que mi aplicación Robotium debe tener la misma firma con la aplicación de configuración (del sistema). Al intentar ejecutar la aplicación consigo el mensaje de error:¿Cómo puedo firmar mi aplicación con la clave de firma del sistema?

Marcha de prueba fallida: Permiso Negación: la instrumentación partir ComponentInfo {com.jayway.test/android.test.InstrumentationTestRunner} de pid = 354, uid = 354 no se permite porque el paquete no com.jayway.test no tiene una firma coincidir los com.android.settings objetivo

  1. ¿hay algún modo de hacer que funcione con el emulador de Android?
  2. Si compilo una imagen de un teléfono Android, ¿cómo puedo usar la firma del sistema Android con mi aplicación?

Respuesta

1

La mejor manera de habilitar wifi desde su aplicación sería usar el WifiManager.

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

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

Nota: También hay que añadir los siguientes permisos a su manifiesta

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

Yo no sólo es necesario encender Wi-Fi/apagado. Necesito controlar la aplicación de configuración con un script de Robotium. De hecho, quiero simular los clics de los usuarios para activar/desactivar WiFi. Este proceso se puede hacer mediante el uso de un script personalizado con la herramienta mono. Aunque me gustaría usar Robotium para verificar si realmente se encontró un Punto de acceso. Mi objetivo principal es hacer que este script de Robotium tenga acceso a través de com.android.settings.apk. Esto omitirá la discrepancia de la firma y permitirá que mi script de Robotium controle este APK. – Michalis

14

que estaba teniendo el mismo problema .. Hay algunos permisos que sólo las aplicaciones del sistema se les permite tener. Estaba intentando acceder a los comandos adb shell dumpsys desde mi aplicación con los permisos android.permission.DUMP.

La solución a esto es ...

En el archivo de manifiesto de Android de su proyecto de añadir la siguiente línea en la etiqueta manifiesta

android:sharedUserId="android.uid.system" 

Es necesario tener dos claves de firma presentes en el código que se usa para construir el binario.

platform.x509.pem

platform.pk8

que está presente en el

androide/build/destino/producto/seguridad

Descargue una herramienta de la red, es decir,

signapk.jar

de la exportación Eclipse archivo APK sin firmar. haciendo clic derecho en el proyecto de las herramientas de Android. Mantenga todas las cosas, es decir, claves, apk sin firmar y signapk.jar en una carpeta.Ejecute el siguiente comando

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

apk sin signo es el nombre del archivo APK y apk firmado es el nuevo nombre que desee. Después de esto sólo tiene que instalar la aplicación en el teléfono firmado con el comando

adb shell install signed.apk 
+1

Nirmit se olvidó de mencionar que para obtener 'android/build/target/product/security', debe verificar el árbol de códigos fuente de Android desde [aquí] (http://source.android.com/source/downloading. html). – ChuongPham

+0

gracias !! choungpham para el camino. –

+2

Si no puede verificar el código fuente completo de Android (por ejemplo, está en Windows), puede consultar este único repositorio: git clone https://android.googlesource.com/platform/build. Los archivos de la plataforma estarán bajo target/product/security – Alexey

Cuestiones relacionadas