Hola expertos/hackers expertos,La implementación de aplicaciones de Google Play de instalación silenciosa de fondo sobre Android
Estoy tratando de poner en práctica la aplicación Google en silencio Juego función de instalación (similar a AppBrain instalador web rápida) en android.
Hasta ahora era capaz de lograr lo siguiente:
Estudia un método para recuperar el Google Play de autenticación Token (concesión de permisos tanto para mi aplicación para hablar con la aplicación Google Play en el teléfono). He enumerado el código que he usado para este continuación:
Log.i(TAG,"Getting the Google Play Auth Token Using Account Manager : START"); AccountManager accountManager = AccountManager.get(getApplicationContext()); Account[] accArr = accountManager.getAccountsByType("com.google"); for (Account acc : accArr) { Log.i(TAG, "For Account Name : " + acc.name + " - "+ "Account Type : " + acc.type); accountManager.getAuthToken(acc, "googleplay", null, this,new AccountManagerCallback<Bundle>() { public void run( AccountManagerFuture<Bundle> paramAccountManagerFuture) { try { Bundle localBundle = (Bundle) paramAccountManagerFuture.getResult(); String authToken = localBundle.get("authtoken") + ""; Log.i(TAG, "Got AuthToken : " + authToken); } catch (Exception ex) { StackTraceElement[] starray = ex.getStackTrace(); StringBuffer bf = new StringBuffer(); bf.append("Error : " + ex.getMessage()).append("\n"); for (StackTraceElement ste : starray) { bf.append(ste.toString()).append("\n"); } Log.e(TAG, bf.toString()); } } }, null); } Log.i(TAG,"Getting the Google Play Auth Token Using Account Manager : END")
Estudia cómo recuperar el Android-ID del teléfono (este ID ya que creo que se debe utilizar al enviar la solicitud a la AppInstall servidores GPlay o la aplicación/expendedora Gplay en el teléfono androide)
Log.i(TAG, "Getting the Android ID Of the Phone : START"); Uri localUri = Uri.parse("content://com.google.android.gsf.gservices"); ContentResolver localContentResolver = getContentResolver(); String[] arrayOfString = new String[1]; arrayOfString[0] = "android_id"; Cursor localCursor = localContentResolver.query(localUri, null,null, arrayOfString, null); Log.i(TAG, "Column Count : " + localCursor.getColumnCount()); if ((localCursor != null) && (localCursor.moveToFirst())) { String androidId = Long.toHexString(Long.parseLong(localCursor.getString(1))); Log.i(TAG, "Received Android ID : " + androidId); Log.i(TAG,"Other Value in Column : " + localCursor.getString(0)); } Log.i(TAG,"Getting the Android ID of the Phone : END");
Encuentra la solicitud de búfer de protocolo que se enviarán a Google Play servidores o la aplicación/expendedora Gplay en el teléfono para iniciar la descarga de la aplicación en silencio & proceso de instalación.
message InstallRequest { optional string appId = 1; } message RequestContext { required string authSubToken = 1; required bool isSecure = 2; required int32 version = 3; required string androidId = 4; optional string deviceAndSdkVersion = 5; optional string userLanguage = 6; optional string userCountry = 7; optional string operatorAlpha = 8; optional string simOperatorAlpha = 9; optional string operatorNumeric = 10; optional string simOperatorNumeric = 11; } message Request { optional RequestContext context = 1; repeated group RequestGroup = 2 { optional InstallRequest installRequest = 10; } }
4.I incluso se utiliza el compilador protobuf y generó la clase Java para manipular la solicitud de búfer de protocolo arriba y llena los campos búfer de protocolo anteriores con algunos datos de ejemplo. Ver el código de abajo:
public void buildAndSendSilentInstallProtoBuffMessage(String gplayAuthToken, String deviceAndroidId){
try{
/*
* The Root Request Object Assumed to be Holding the Silent Install Request
*/
Request.Builder request = Request.newBuilder();
//Populating the ReequestContext Object
RequestContext.Builder context = RequestContext.newBuilder();
context.setAndroidId(deviceAndroidId);
context.setAuthSubToken(gplayAuthToken);
context.setIsSecure(true);
context.setVersion(1002);
context.setDeviceAndSdkVersion("dream:4");
context.setUserLanguage("en");
context.setUserCountry("us");
context.setOperatorAlpha("Android");
context.setOperatorNumeric("310260");
context.setSimOperatorNumeric("310260");
//Building the Install Request
InstallRequest.Builder installRequest = InstallRequest.newBuilder();
installRequest.setAppId("-2564446724934482383");
//Setting the Install Request to the Request Group
RequestGroup.Builder requestGroup = RequestGroup.newBuilder();
requestGroup.setInstallRequest(installRequest);
//Setting the Request Context to the Main Request Object
request.setContext(context);
//Setting the Request Group to the Request Object
request.addRequestGroup(requestGroup);
los datos de ejemplo para GPlay simbólico y el ello Android son los siguientes:
- Android_ID:
3a0f901831a0f402
- Google Play authToken :
DQAAAMgAAACpOyPf6apRbb0i4qhTVaf0yYoikTAb4TYlHCRLrW 4mu5f14j-H35KGmO9TQKUDYCfj3-b-QIH5chfXT3bS02Uxljg7vYt4I-kgXLEJwPcynjugDcJ9fYPOh1c2FnOnywFXXxXw6hcqs5sVnJEt 5zW2ditoB5VeeXG9Zfodj9dXKobObi50-XnHoGfWi2b64Uf3EHGdQTsDCMzfZrE4mb22fr9LCW1oZG5tkzw S4KhPBHWMN2fO7w-1IZ4UK5LOI80vPBLjxBaavKAXHoVUHSNV
- También hizo algunas oler usar mi teléfono Galaxy Nexus arraigado durante la aplicación Gplay instalar en silencio y sólo se encuentran dos peticiones HTTP GET.
he intentado reproducir las esas dos peticiones HTTP GET capturados usando tiburón de raíz (usando mi teléfono Galaxy Nexus androide enraizado) y la primera solicitud simplemente descarga el archivo mismo mercado (que yo era capaz de guardar en la tarjeta SD del teléfono. Pero luego debe instalarse como cualquier aplicación de fuentes desconocidas) mientras que la segunda solicitud no devuelve nada.
Las dos peticiones GET capturadas se muestran a continuación:
petición GET UNO:
21 0.827240 192.168.135.102 173.194.36.4 HTTP 535 GET /market/download/Download? packageName=com.gau.go.launcherex.theme.appwidget.gopowermaster.futureworld&versionCode=1&token=AOTCm0QRnH3rmypWtCGoAL_SU1BSt311wpyz-_LZTodkUSAlc- f5SrdMiz5WDRDUKMMm6S3plBI9Jbh1tukT1jyCYXLgP4QhVvZvn5JLtZQ&downloadId=-165214892049282883 HTTP/1.1 Which has the following http headers : Cookie: MarketDA=17214805622679635526\r\n Host: android.clients.google.com\r\n Connection: Keep-Alive\r\n User-Agent: AndroidDownloadManager/4.1.1 (Linux; U; Android 4.1.1; Galaxy Nexus Build/JRO03C)\r\n
petición GET DOS:
44 6.595093 192.168.135.102 222.165.163.15 HTTP 608 GET /market/GetBinary/com.gau.go.launcherex.theme.appwidget.gopowermaster.futureworld/1?expire=1346838270&ipbits=0&ip=0.0.0.0&cp=SnpybWlzSFk6OTYzMzg0MTE2NzA1ODEwOTYxMjE&sparams=expire,ipbits,ip,q:,cp&signature=2C0778C4635F6F8AE1DA8479FB08DCB9BC04C2E9.60202D8D4D2FDDA70609A3862A25852F0BAA2766&key=am2 HTTP/1.1 Which has the following http headers : Cookie: MarketDA=17214805622679635526\r\n Host: o-o.preferred.slt-cmb2.v12.lscache4.c.android.clients.google.com\r\n Connection: Keep-Alive\r\n User-Agent: AndroidDownloadManager/4.1.1 (Linux; U; Android 4.1.1; Galaxy Nexus Build/JRO03C)\r\n
he estado investigando esto por alrededor de dos semanas ahora, pero todavía no podía encontrar el siguiente:
Si el instalador rápido Web AppBrain utiliza el búfer de protocolo para invocar el Gplay (aplicación de vending) en el teléfono o los servidores Gplay?. Si es así, ¿es correcto el formato de solicitud de almacenamiento intermedio de protocolo anterior?
Si el formato de solicitud de referencia de búfer de protocolo es correcta, entonces a dónde en el teléfono o en el servidor Gplay debería enviar la solicitud de búfer de protocolo para invocar a la descarga de aplicaciones silencioso y procedimiento de instalación?.
También tengo un servidor C2DM (ahora GCM) y la configuración del cliente en esta tarea también. ¿Podría alguien señalarme en la dirección correcta o darme alguna pista para resolver esto? Cualquier ayuda es muy apreciada .
Tenga en cuenta que el canal para desarrolladores de Android de Google en plus (https://plus.google.com/+AndroidDevelopers/posts) albergará un Q & A en los Servicios de Google Play en un par de horas a partir de ahora. Claramente, su respuesta es anhelar ese formato, pero podría llamar su atención sobre el problema general: son receptivos a las preguntas que incluyen un enlace SO. – Tom
Acabo de leer que Google ha limitado esta característica secreta. Algunas veces, fue posible lograr esto. Pero si puede obtener el apk del mercado y guardarlo, entonces puede hacer la instalación silenciosa en dispositivos rooteados. –
¿Intentó buscar "dentro" del apk? – sherpya