Tuto modificar juegos android parte II



Aca esta la segunda parte del tutoria de modificacion de juegos y demas, espero lo esten siguiendo y les sea de utilidad.

3. Cómo deshabilitar la caché

Este paso es aún más simple, el archivo "GameInstaller.smali" encontrar la función "isRequiredFile"

Código :
. Método privado isRequiredFile (Ljava / lang / String; J) Z
. Locales 5
. Parámetros "fileName"
. Parámetro "tamaño"
. Prólogo
const / 4 v4, 0x1
. Línea 410
nueva instancia v2, Ljava / lang / StringBuilder;
invocar-directa {v2}, Ljava / lang / StringBuilder; - <init>> () V
sget-objeto v3, FCM gameloft / / android / Gand / GloftMCHP / GameInstaller; -> Data_Path: Ljava / lang / String;
invocar virtual {v2, v3}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2, p1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2}, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v1
. Línea 411
. Locales v1, ruta: Ljava / lang / String;
nueva instancia v0, Ljava / io / Archivo;
invocar-directa {v0, v1}, Ljava / io / Archivo; -> <init> (Ljava / lang / String V
. Línea 412
. Locales v0, archivo: Ljava / io / Archivo;
invocar-directa {p0, p1}, FCM gameloft / / android / Gand / GloftMCHP / GameInstaller; - replaceOconf> (Ljava / lang / String Z
movimiento número v2
si-eqz v2: cond_0
const / 4 v2, 0x0
. Línea 415
: Goto_0
volver v2
: Cond_0
invocar virtual} {v0, Ljava / io / Archivo; -> exists () Z
movimiento número v2
si-eqz v2: cond_1
invocar virtual} {v0, Ljava / io / Archivo; - Longitud> () J
movimiento en todo el resultado de la v2
cmp largo v2, v2, p2
si-eqz v2: cond_2
: Cond_1
const / 4 v2, 0x0
Ir a: goto_0
: Cond_2
const / 4 v2, 0x0
Ir a: goto_0
. Método de finalización

En él está interesado en un fragmento
Código:
invocar virtual} {v0, Ljava / io / Archivo; -> exists () Z
movimiento número v2
si-eqz v2: cond_1
invocar virtual} {v0, Ljava / io / Archivo; - Longitud> () J
movimiento en todo el resultado de la v2
cmp largo v2, v2, p2
si-eqz v2: cond_2

: Cond_1
const / 4 v2, 0x0


En este pasaje no se comprueba si existe un archivo en la memoria caché y si es así, lo mismo que su tamaño (o suma de comprobación) con la referencia? Sólo un cheque por la existencia de archivos, pero comparando el tamaño de una referencia a sí mismo
El resultado así lo

Código :
. Método privado isRequiredFile (Ljava / lang / String; J) Z
. Locales 5
. Parámetros "fileName"
. Parámetro "tamaño"
. Prólogo
const / 4 v4, 0x1
. Línea 410
nueva instancia v2, Ljava / lang / StringBuilder;
invocar-directa {v2}, Ljava / lang / StringBuilder; - <init>> () V
sget-objeto v3, FCM gameloft / / android / Gand / GloftMCHP / GameInstaller; -> Data_Path: Ljava / lang / String;
invocar virtual {v2, v3}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2, p1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2}, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v1
. Línea 411
. Locales v1, ruta: Ljava / lang / String;
nueva instancia v0, Ljava / io / Archivo;
invocar-directa {v0, v1}, Ljava / io / Archivo; -> <init> (Ljava / lang / String V
. Línea 412
. Locales v0, archivo: Ljava / io / Archivo;
invocar-directa {p0, p1}, FCM gameloft / / android / Gand / GloftMCHP / GameInstaller; - replaceOconf> (Ljava / lang / String Z
movimiento número v2
si-eqz v2: cond_0
const / 4 v2, 0x0
. Línea 415
: Goto_0
volver v2
: Cond_0
cmp largo v2, p2, p2
si-eqz v2: cond_2
const / 4 v2, 0x0
Ir a: goto_0
: Cond_2
const / 4 v2, 0x0
Ir a: goto_0
. Método de finalización


En algunos juegos, sobre todo la nueva función "isRequiredFile" no lo hace, se centran en los fragmentos de "invocar virtual {v0}, Ljava / io / Archivo; -> exists () Z", "invocar virtual {v0}, Ljava / io / Archivo; - Longitud> () J ", si se van de la mano y después de comprobar si" cmp-... ", entonces el 99% que es el control de la caché, se procede con ella es similar a la descrita anteriormente.


4. Asignación de un botón de hardware en cualquier acción

Antes de proceder a esta fase es necesario entender cómo funciona el juego, en general, sabemos que si presionó la tecla o si toco en la pantalla? Si una gran simplificación, se verá como cuando usted hace una acción con su unidad, que se bloquee el sistema (Android), el sistema transmite esta información a la aplicación activa mediante el envío de un mensaje acerca de lo sucedido. Este mensaje llega en forma de eventos a las aplicaciones de controlador de eventos, "controlador de eventos" se analiza y, si es necesario, va más tratamiento (a menudo en la biblioteca "*. so". Asimismo, al hacer clic en algún lugar de la pantalla táctil o pulsar un botón, los acontecimientos de este en el juego. Podemos tomar ventaja de esto podría ser ajustado para "controlador de eventos que, cuando se hace clic en un botón, controlador de eventos no pasa en algo que se ha presionado, y lo que tocar la pantalla en ciertas coordenadas. Programa de todos modos, si está o no meter o no en la pantalla, de manera que puede ser fácil de engañar
Por ejemplo, voy a utilizar el "Assassin's Creed". En primer lugar, echemos un vistazo a la "controlador de eventos (función)" onTouchEvent ", nos preocupa que lo que está en el" AssassinsCreed.smali ".

Código:
. Método onTouchEvent público (Landroid / ver / MotionEvent Z
. Locales 11
. Parámetros "evento"
. Prólogo
const / 4 v. 10, 0x2
const / 4 v9, 0x1
const / 4 v8, 0x0
. Línea 1002
sget v6, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> s_engineState: yo
si ne-v6, v9,: cond_0
. Línea 1004
invocar virtual {p0, p1}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; -> StateIntroVideo_onTouchEvent (Landroid / ver / MotionEvent Z
movimiento número v6
. Línea 1050
: Goto_0
volver v6
. Línea 1010
: Cond_0
invocar virtual {p1}, ver Landroid / / MotionEvent; - getAction> () que
movimiento número v0
. Línea 1011
. V0 local, la acción: I
and-int/lit16 v4, v0, 0xff
. Línea 1013
. Locales v4, la máscara: Yo
invocar virtual {p1}, ver Landroid / / MotionEvent; - getPointerCount> () que
movimiento número v1
. Línea 1014
. V1 local, cuenta: yo
const / 4 v5, 0x0
. Línea 1015
. Locales v5, pointerId: Yo
const v6, 0xff00
and-int/2addr v6, v0
shr-int/lit8 v5, v6, 0x8
. Línea 1017
si v0-nez,: cond_1
. Línea 1019
invocar virtual {p1} v8, vista Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1} v8, vista Landroid / / MotionEvent; -> Gety (I) F

movimiento número v7
flotador-a-int v7, v7
invocar estática {v8, v9, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1022
: Cond_1
const / 4 v6, 0x5
si ne-v4, v6,: cond_2
. Línea 1024
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v5, v9, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1027
: Cond_2
si ne-v0, v10,: cond_3
. Línea 1029
const / 4 v2, 0x0
. Locales v2, i: I
: Goto_1
si ge-v2, v1: cond_3
. Línea 1031
invocar virtual {p1, v2}, ver Landroid / / MotionEvent; - getPointerId> (yo)
movimiento número v3
. Línea 1032
. Locales v3, id: Yo
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v3, v10, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1029
add-int/lit8 v2, v2, 0x1
Ir a: goto_1
. Línea 1038
. Fin locales v2 # i: I
. Fin locales v3 # id: Yo
: Cond_3
si ne-v0, v9,: cond_4
. Línea 1040
const / 4 v2, 0x0
. Reinicie locales v2 # i: I
: Goto_2
si ge-v2, v1: cond_5
. Línea 1042
invocar virtual {p1, v2}, ver Landroid / / MotionEvent; - getPointerId> (yo)
movimiento número v3
. Línea 1043
. Reinicie locales v3 # id: yo
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> getX (I) F

movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v3, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1040
add-int/lit8 v2, v2, 0x1
Ir a: goto_2
. Línea 1046
. Fin locales v2 # i: I
. Fin locales v3 # id: Yo
: Cond_4
const / 4 v6, 0x6
si ne-v4, v6,: cond_5

. Línea 1048
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v5, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
: Cond_5
mover v6, v9
. Línea 1050
Ir a: goto_0
. Método de finalización



De particular interés para nosotros son estos fragmentos
Código:
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v5, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V

Si usted hizo " ajuste de la pantalla táctil, a continuación, estos fragmentos se pueden ver ligeramente diferentes.
Por ejemplo:
Código :
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
mul-int/lit8 v6, v6, 0xa
div-int/lit8 v6, v6, 0x6
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
mul-int/lit8 v7, v7, 0x3
div-int/lit8 v7, v7, 0x2

invocar estática {v5, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V

Estas piezas de código en la función "onTouchEvent", hay muchas veces, que son justas y responsables de la transmisión de información a "controlador de eventos" para la transformación posterior del juego. En consecuencia el fin de simular el tacto de la pantalla, tenemos que llamar a la "nativeOnTouch", pero no sé qué configuración que tenía que pasar. Para averiguarlo, usamos "Logcat" - ". Logcat" un mecanismo para el registro de todo lo que ocurre en el androide. Para acceder a "Logcat" que necesita para instalar la aplicación en el teléfono "aLogcat", se puede descargar el mercado. Para transferir datos desde el juego "Logcat", creamos una función temporal "LogTouch", entonces debería ser eliminado.

Código :
. Método estático privado LogTouch (IIII) V
. Locales 3
. Prólogo
const cadena v1 "/"
const cadena v2, "TouchEvent"
nueva instancia v0, Ljava / lang / StringBuilder;
invocar-direct} {v0, Ljava / lang / StringBuilder; - <init>> () V
invocar virtual {v0, p0}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, v1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, p1}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, v1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, p2}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, v1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, p3}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual} {v0, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v0
invocar estática {v2, v0}, Landroid / util / registro; -> d (Ljava / lang / String; Ljava / lang / String me
retorno vacío
. Método de finalización


Esta función tiene cuatro parámetros, así como "nativeOnTouch", y escribe sus valores en "Logcat". Su aplicación debe ser agregado a la misma "*. smali" archivo que contiene "controlador de eventos" "OnTouchEvent", en este caso, "AssassinsCreed.smali". La ubicación del archivo no importa, se puede colocar en cualquier lugar entre las otras características. Sin embargo, para mayor comodidad se añade justo antes de "OnTouchEvent".

Código:
...
. Línea 884
retorno vacío
. Método de finalización

. Método estático privado LogTouch (IIII) V
. Locales 3
. Prólogo
const cadena v1 "/"
const cadena v2, "TouchEvent"
nueva instancia v0, Ljava / lang / StringBuilder;
invocar-direct} {v0, Ljava / lang / StringBuilder; - <init>> () V
invocar virtual {v0, p0}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, v1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, p1}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, v1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, p2}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, v1}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual {v0, p3}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual} {v0, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v0
invocar estática {v2, v0}, Landroid / util / registro; -> d (Ljava / lang / String; Ljava / lang / String me
retorno vacío
. Método de finalización

. Método onTouchEvent público (Landroid / ver / MotionEvent Z
. Locales 11
. Parámetros "evento"

. Prólogo
const / 4 v. 10, 0x2

const / 4 v9, 0x1
...


Ahora ve a "controlador de eventos" "onTouchEvent", antes de cada llamada a "nativeOnTouch" Añadir llamada "LogTouch", pasarlo los mismos parámetros que en "nativeOnTouch".

Código :
. Método onTouchEvent público (Landroid / ver / MotionEvent Z
. Locales 11
. Parámetros "evento"
. Prólogo
const / 4 v. 10, 0x2
const / 4 v9, 0x1
const / 4 v8, 0x0
. Línea 1002
sget v6, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> s_engineState: yo
si ne-v6, v9,: cond_0
. Línea 1004
invocar virtual {p0, p1}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; -> StateIntroVideo_onTouchEvent (Landroid / ver / MotionEvent Z
movimiento número v6
. Línea 1050
: Goto_0
volver v6
. Línea 1010
: Cond_0
invocar virtual {p1}, ver Landroid / / MotionEvent; - getAction> () que
movimiento número v0
. Línea 1011
. V0 local, la acción: I
and-int/lit16 v4, v0, 0xff
. Línea 1013
. Locales v4, la máscara: Yo
invocar virtual {p1}, ver Landroid / / MotionEvent; - getPointerCount> () que
movimiento número v1
. Línea 1014
. V1 local, cuenta: yo
const / 4 v5, 0x0
. Línea 1015
. Locales v5, pointerId: Yo
const v6, 0xff00
and-int/2addr v6, v0
shr-int/lit8 v5, v6, 0x8
. Línea 1017
si v0-nez,: cond_1
. Línea 1019
invocar virtual {p1} v8, vista Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1} v8, vista Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v8, v9, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> LogTouch (IIII) V
invocar estática {v8, v9, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1022
: Cond_1
const / 4 v6, 0x5
si ne-v4, v6,: cond_2
. Línea 1024
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v5, v9, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> LogTouch (IIII) V
invocar estática {v5, v9, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1027
: Cond_2
si ne-v0, v10,: cond_3
. Línea 1029
const / 4 v2, 0x0
. Locales v2, i: I
: Goto_1
si ge-v2, v1: cond_3
. Línea 1031
invocar virtual {p1, v2}, ver Landroid / / MotionEvent; - getPointerId> (yo)
movimiento número v3
. Línea 1032
. Locales v3, id: Yo
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v3, v10, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> LogTouch (IIII) V
invocar estática {v3, v10, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1029
add-int/lit8 v2, v2, 0x1
Ir a: goto_1
. Línea 1038
. Fin locales v2 # i: I
. Fin locales v3 # id: Yo
: Cond_3
si ne-v0, v9,: cond_4
. Línea 1040
const / 4 v2, 0x0
. Reinicie locales v2 # i: I
: Goto_2
si ge-v2, v1: cond_5
. Línea 1042
invocar virtual {p1, v2}, ver Landroid / / MotionEvent; - getPointerId> (yo)
movimiento número v3
. Línea 1043
. Reinicie locales v3 # id: yo
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v3}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v3, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> LogTouch (IIII) V
invocar estática {v3, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
. Línea 1040
add-int/lit8 v2, v2, 0x1
Ir a: goto_2
. Línea 1046
. Fin locales v2 # i: I
. Fin locales v3 # id: Yo
: Cond_4
const / 4 v6, 0x6
si ne-v4, v6,: cond_5
. Línea 1048
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> getX (I) F
movimiento número v6
flotador-a-int v6, v6
invocar virtual {p1, v5}, ver Landroid / / MotionEvent; -> Gety (I) F
movimiento número v7
flotador-a-int v7, v7
invocar estática {v5, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> LogTouch (IIII) V
invocar estática {v5, v8, v6, v7}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
: Cond_5
mover v6, v9
. Línea 1050
Ir a: goto_0
. Método de finalización


Después de eso, los paquetes de archivo APK-que están instalados en el teléfono y ejecutar el juego. Comienza un nuevo juego, apagar el juego, ejecute "aLogCat", seleccione el menú "Borrar" y cerrar pulsando el botón "atrás". Ampliar el juego, meter el salto icono, por lo que el dedo, el menor tiempo tocando la pantalla, pero el salto ha funcionado. Una vez más, apague el juego y ejecutar "aLogCat". En "aLogCat" haga clic en "Pausa". Todo lo que ahora se puede proceder al análisis.
"Logcat" pueden ser analizados en el teléfono, pero es más conveniente para poder guardar y analizar en su computadora (haciendo clic en "Guardar" "Logcat" guardados en "aLogCat" en la tarjeta de memoria).

Android

mauro_gonzalez

Desde el final del archivo de la palabra clave "TouchEvent" en busca de que necesitamos los registros. Y eso es lo que encontramos.
Código:
...
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
D / TouchEvent (2506): 0 / 1 / 753 / 390
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
D / TouchEvent (2506): 0 / 2 / 753 / 393
D / TouchEvent (2506): 0 / 2 / 753 / 393
D / TouchEvent (2506): 0 / 2 / 753 / 393
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
D / TouchEvent (2506): 0 / 2 / 751 / 395
D / TouchEvent (2506): 0 / 2 / 751 / 395
D / TouchEvent (2506): 0 / 2 / 751 / 395
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
D / TouchEvent (2506): 0 / 2 / 751 / 395
D / TouchEvent (2506): 0 / 2 / 749 / 396
D / TouchEvent (2506): 0 / 0 / 749 / 396
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
??? E / ASESINO PERDIDO TEXTURA (2506): textura actual: -1
...

Es fácil adivinar que el tercero y el parámetro de 4 ª es la coordenada de tocar la pantalla. 2 ª opción es probable que "el tipo de evento": 1 - la pantalla táctil, 2 - mover el dedo por la pantalla, 0 - tiempo de guardar el dedo en la pantalla. Bueno, la opción 1 ª es simplemente igual a 0. Ahora está claro que para lograr el salto sobre el botón, tenemos que en el momento de presionar el botón de llamada a la función "nativeOnTouch" con los parámetros 0 / 1 / 753 / 390 (emulado al tocar la pantalla), y durante la liberación con el 0 / 0 / 753 / 390 ( emulado por cortar el dedo de la pantalla).
Pero esto no es suficiente, que de alguna manera debe determinar en qué botón se pulsa, para saber que emulan el grifo en la pantalla o no. Para ello debemos obtener el código de la llave, una vez más vamos a "Logcat". Todo lo relacionado con "LogTouch" eliminar y en lugar de añadir la característica de "LogKey". Esta función abarca el botón y escribe su código en el "Logcat".

Código :
. Método estático privado LogKey (I) V
. Locales 2
. Prólogo
const cadena v1 "KeyCode"
nueva instancia v0, Ljava / lang / StringBuilder;
invocar-direct} {v0, Ljava / lang / StringBuilder; - <init>> () V
invocar virtual {v0, p0}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v0
invocar virtual} {v0, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v0
invocar estática {v1, v0}, Landroid / util / registro; -> d (Ljava / lang / String; Ljava / lang / String me
retorno vacío
. Método de finalización

Puede ser agregado en el mismo lugar donde fue "LogTouch". Después de eso, agrega la llamada "LogKey" en el "controlador", "onKeyDown" antes de llamar "nativeOnKeyDown" con la transferencia de la misma opción que en "nativeOnKeyDown".

Inicia el juego, cuando aparezca el menú, haga clic en el botón sobre el que queremos para colgar la acción (I presionado el botón del menú), ir al partido. Es importante presionar el botón una sola vez, y sólo lo que queremos para colgar la acción, de lo contrario a continuación, en "Logcat" sería confuso. En los registros en busca de la cadena para la palabra clave "KeyCode", esta línea será el código de nuestro botón.
En mi caso:
Código:
D / KeyCode (4155): 82

Por lo tanto el código del botón "Menú" - 82. Ahora tenemos toda la información necesaria y podemos seguir adelante. Quite todo lo que ha añadido el código para determinar los parámetros de los botones de función y "nativeOnTouch".
Ahora echemos un vistazo de cerca a los controladores de eventos "onKeyDown" y "onKeyUp".

Código :
. Método onKeyDown público (ILandroid / ver / KeyEvent Z
. Locales 6
. Parámetros "keyCode"
. Parámetros "evento"
. Prólogo
const / 4 v4, 0x1
const cadena v5, "__DBG__"
. Línea 923
const cadena v2, "__DBG__"
nueva instancia v2, Ljava / lang / StringBuilder;
invocar-directa {v2}, Ljava / lang / StringBuilder; - <init>> () V
const cadena v3, "Java onKeyDown ::===========================: keyCode:"
invocar virtual {v2, v3}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2, p1}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2}, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v2
invocar estática {v5, v2}, FCM gameloft / / android / Gand / GloftASCR / GLDebug; -> Información (Ljava / lang / String; Ljava / lang / String V
. Línea 925
sget v2, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> s_engineState: yo
si ne-v2, v4,: cond_2
. Línea 927
const / 4 v2, 0x4
si ne-p1, v2,: cond_0
. Línea 929
iget-objeto v2, p0, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - mVideoView>: Landroid / flash / VideoView;
invocar virtual {v2}, Landroid / flash / VideoView; - getCurrentPosition> () que
movimiento número v0
. Línea 933
. V0 local, act: Yo
const cadena v2, "__DBG__"
const cadena v2, "Java:: PLAY INTRO PRENSA VUELTA -> PAUSA Y VOLVER A CASA"
invocar estática {v5, v2}, FCM gameloft / / android / Gand / GloftASCR / GLDebug; -> Información (Ljava / lang / String; Ljava / lang / String V
. Línea 934
invocar virtual {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; -> PauseIntroVideo () V
. Línea 935
nueva instancia v2, Landroid / content / Intención;
const cadena v3, "android.intent.action.MAIN"
invocar-directa {v2, v3}, Landroid / content / Intención; - <init>> (Ljava / lang / String V
const cadena v3, "android.intent.category.HOME"
invocar virtual {v2, v3}, el contenido Landroid / / Intención; - addCategory> (Ljava / lang / String Landroid / content / Intención;
movimientos en los resultados objeto v1
. Línea 936
. Locales v1, intentHOME: Landroid / content / Intención;
invocar virtual {p0, v1}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - startActivity> (Landroid / content / Intención V
. Línea 939
. Fin locales v0 actual #: Yo
. Fin locales v1 # intentHOME: Landroid / content / Intención;
: Cond_0
const/16 v2, 0x52
si ne-p1, v2,: cond_1
mover v2, v4
. Línea 964
: Goto_0
volver v2
. Línea 944
: Cond_1
invocar-super {p0, p1, p2}, aplicación Landroid / / de la actividad; - onKeyDown> (ILandroid / ver / KeyEvent Z
movimiento número v2
Ir a: goto_0
. Línea 955
: Cond_2
invocar estática {p1}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyDown> (I) V
. Línea 956
const/16 v2, 0x18
-eq si p1, v2,: cond_3
const/16 v2, 0x19
-eq si p1, v2,: cond_3
const/16 v2, 0x1b
si ne-p1, v2,: cond_4
. Línea 958
: Cond_3
const / 4 v2, 0x0
Ir a: goto_0
: Cond_4
mover v2, v4
. Línea 964
Ir a: goto_0
. Método de finalización
. Método onKeyUp público (ILandroid / ver / KeyEvent Z
. Locales 1
. Parámetros "keyCode"
. Parámetros "evento"
. Prólogo
. Línea 968
invocar estática {p1}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyUp> (I) V
. Línea 969
const/16 v0, 0x18
-eq si p1, v0,: cond_0
const/16 v0, 0x19
-eq si p1, v0,: cond_0
const/16 v0, 0x1b
si ne-p1, v0,: cond_1
. Línea 970
: Cond_0
const / 4 v0, 0x0
. Línea 971
: Goto_0
volver v0
: Cond_1
const / 4 v0, 0x1

Ir a: goto_0
. Método de finalización


Estos "canales" por medio de funciones "nativeOnKeyDown" y nativeOnKeyUp "transmite" al tratamiento de datos de juego de presionado y pulsa los botones, respectivamente.
Tenemos que añadir la función alternativa ("capa de función)

Código:
. Método estático privado OnKeyDownMod (I) V
. Locales 0
. Parámetro "c"
invocar estática {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyDown> (I) V
retorno vacío
. Método de finalización
. Método estático privado OnKeyUpMod (I) V
. Locales 0
. Parámetro "c"
invocar estática {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyUp> (I) V
retorno vacío
. Método de finalización

En los controladores ", onKeyDown", "onKeyUp" reemplazar la función llama "nativeOnKeyDown", "nativeOnKeyUp" nuestras funciones alternativas.

Código :
. Método onKeyDown público (ILandroid / ver / KeyEvent Z
. Locales 6
. Parámetros "keyCode"
. Parámetros "evento"
. Prólogo
const / 4 v4, 0x1
const cadena v5, "__DBG__"
. Línea 923
const cadena v2, "__DBG__"
nueva instancia v2, Ljava / lang / StringBuilder;
invocar-directa {v2}, Ljava / lang / StringBuilder; - <init>> () V
const cadena v3, "Java onKeyDown ::===========================: keyCode:"
invocar virtual {v2, v3}, Ljava / lang / StringBuilder; -> append (Ljava / lang / String Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2, p1}, Ljava / lang / StringBuilder; -> append (I) Ljava / lang / StringBuilder;
movimientos en los resultados objeto v2
invocar virtual {v2}, Ljava / lang / StringBuilder; - toString> () Ljava / lang / String;
movimientos en los resultados objeto v2
invocar estática {v5, v2}, FCM gameloft / / android / Gand / GloftASCR / GLDebug; -> Información (Ljava / lang / String; Ljava / lang / String V
. Línea 925
sget v2, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> s_engineState: yo
si ne-v2, v4,: cond_2
. Línea 927
const / 4 v2, 0x4
si ne-p1, v2,: cond_0
. Línea 929
iget-objeto v2, p0, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - mVideoView>: Landroid / flash / VideoView;
invocar virtual {v2}, Landroid / flash / VideoView; - getCurrentPosition> () que
movimiento número v0

. Línea 933
. V0 local, act: Yo
const cadena v2, "__DBG__"
const cadena v2, "Java:: PLAY INTRO PRENSA VUELTA -> PAUSA Y VOLVER A CASA"
invocar estática {v5, v2}, FCM gameloft / / android / Gand / GloftASCR / GLDebug; -> Información (Ljava / lang / String; Ljava / lang / String V
. Línea 934
invocar virtual {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; -> PauseIntroVideo () V
. Línea 935
nueva instancia v2, Landroid / content / Intención;
const cadena v3, "android.intent.action.MAIN"
invocar-directa {v2, v3}, Landroid / content / Intención; - <init>> (Ljava / lang / String V
const cadena v3, "android.intent.category.HOME"
invocar virtual {v2, v3}, el contenido Landroid / / Intención; - addCategory> (Ljava / lang / String Landroid / content / Intención;
movimientos en los resultados objeto v1
. Línea 936
. Locales v1, intentHOME: Landroid / content / Intención;
invocar virtual {p0, v1}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - startActivity> (Landroid / content / Intención V
. Línea 939
. Fin locales v0 actual #: Yo
. Fin locales v1 # intentHOME: Landroid / content / Intención;
: Cond_0
const/16 v2, 0x52
si ne-p1, v2,: cond_1
mover v2, v4
. Línea 964
: Goto_0
volver v2
. Línea 944
: Cond_1
invocar-super {p0, p1, p2}, aplicación Landroid / / de la actividad; - onKeyDown> (ILandroid / ver / KeyEvent Z
movimiento número v2
Ir a: goto_0
. Línea 955
: Cond_2
invocar estática {p1}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> OnKeyDownMod (I) V
. Línea 956
const/16 v2, 0x18
-eq si p1, v2,: cond_3
const/16 v2, 0x19
-eq si p1, v2,: cond_3
const/16 v2, 0x1b
si ne-p1, v2,: cond_4
. Línea 958
: Cond_3
const / 4 v2, 0x0
Ir a: goto_0
: Cond_4
mover v2, v4
. Línea 964
Ir a: goto_0
. Método de finalización
. Método onKeyUp público (ILandroid / ver / KeyEvent Z
. Locales 1
. Parámetros "keyCode"
. Parámetros "evento"

. Prólogo
. Línea 968
invocar estática {p1}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; -> OnKeyUpMod (I) V
. Línea 969
const/16 v0, 0x18
-eq si p1, v0,: cond_0
const/16 v0, 0x19
-eq si p1, v0,: cond_0
const/16 v0, 0x1b
si ne-p1, v0,: cond_1
. Línea 970
: Cond_0
const / 4 v0, 0x0
. Línea 971
: Goto_0
volver v0
: Cond_1
const / 4 v0, 0x1
Ir a: goto_0
. Método de finalización



Dado que las funciones alternativas sin hacer nada, pero pide que el original "nativeOnKeyDown", "nativeOnKeyUp", el juego no cambió. Pero yo recomiendo el juego sigue de verificación para asegurarse de que nakosyachili nada.
Si todo está en orden, en las funciones alternativas añade el código necesario para emular la tapa de la pantalla.
En mi caso sería así:


Código :
. Método estático privado OnKeyDownMod (I) V
. Locales 5
. Parámetro "c"
. Prólogo
const/16 v4, 0x52
si ne-p0, v4,: cond_0
const / 4 v0, 0x0
const / 4 v1, 0x1
const/16 v2, 0x2F1
const/16 v3, 0x186
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
: Cond_0
invocar estática {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyDown> (I) V
retorno vacío
. Método de finalización
. Método estático privado OnKeyUpMod (I) V
. Locales 5
. Parámetro "c"
. Prólogo
const/16 v4, 0x52
si ne-p0, v4,: cond_0
const / 4 v0, 0x0
const / 4 v1, 0x0
const/16 v2, 0x2F1

const/16 v3, 0x186
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
: Cond_0
invocar estática {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyUp> (I) V
retorno vacío
. Método de finalización



Vamos a ver cómo estas funciones. Desde el principio, para comprobar qué botón se hizo clic, si el "menú", a continuación, toque en la pantalla emulando, si no, entonces simplemente transfiere la gestión de la función original. Si de repente alguien que no entendía de dónde vino el 0x52, 0x2F1 cifras, 0x186, ¿cuáles son nuestras opciones: 82 - código del botón, 753, 390 son las coordenadas de tapas, pero en hexadecimal.

Enhorabuena, lo hicimos Si usted nunca comete un error, entonces todo debería funcionar.

Nota

Usted nunca podrá hacer echa un vistazo a lo que el botón presionado, entonces el salto será a partir de cualquiera de los botones
Ejemplo

Código:
. Método estático privado OnKeyDownMod (I) V
. Locales 4
. Parámetro "c"
. Prólogo
const / 4 v0, 0x0
const / 4 v1, 0x1
const/16 v2, 0x2F1
const/16 v3, 0x186
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
. Método de finalización
. Método estático privado OnKeyUpMod (I) V
. Locales 4
. Parámetro "c"
. Prólogo
const / 4 v0, 0x0
const / 4 v1, 0x0
const/16 v2, 0x2F1
const/16 v3, 0x186
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
. Método de finalización


Usted todavía puede colgar el 2 de dos botones diferentes acciones diferentes.
Por ejemplo, un salto en el "menú" y el ataque al botón "atrás".

Código:
. Método estático privado OnKeyDownMod (I) V
. Locales 6
. Parámetro "c"
. Prólogo
const/16 v4, 0x52
const/16 v5, 0x4
si ne-p0, v4,: cond_0
const / 4 v0, 0x0
const / 4 v1, 0x1
const/16 v2, 0x2F1
const/16 v3, 0x186
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
: Cond_0
si ne-p0, v5,: cond_1
const / 4 v0, 0x0
const / 4 v1, 0x1
const/16 v2, 0x20E
const/16 v3, 0x18D
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
: Cond_1
invocar estática {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyDown> (I) V
retorno vacío
. Método de finalización
. Método estático privado OnKeyUpMod (I) V
. Locales 6
. Parámetro "c"
. Prólogo
const/16 v4, 0x52
const/16 v5, 0x4
si ne-p0, v4,: cond_0
const / 4 v0, 0x0
const / 4 v1, 0x0
const/16 v2, 0x2F1
const/16 v3, 0x186
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
: Cond_0
si ne-p0, v5,: cond_1
const / 4 v0, 0x0
const / 4 v1, 0x0
const/16 v2, 0x20E
const/16 v3, 0x18D
invocar estática {v0, v1, v2, v3}, FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed; - nativeOnTouch> (IIII) V
retorno vacío
: Cond_1
invocar estática {p0}, FCM gameloft / / android / Gand / GloftASCR / AssassinsCreed; - nativeOnKeyUp> (I) V
retorno vacío
. Método de finalización




En algunos juegos, de una función más bien "nativeOnTouch" utiliza un 3 "nativeTouchPressed", "nativeTouchMoved", "nativeTouchReleased", en este caso, "OnKeyDownMod" debe llamar "nativeTouchPressed", y "OnKeyUpMod" - "nativeTouchReleased". También tenga en cuenta que usted tiene un "espacio de nombres" "FCM / gameloft / android / Gand / GloftASCR / AssassinsCreed" será diferente.
*****************
Útiles

¿Qué sucede si el juego utiliza la caché de mal o no se inicia?

A veces esta situación, cuando el teléfono no es con apoyo oficial del juego, pero las razones para este juego no se iniciará - no. Y comienza, pero las texturas se muestran incorrectamente o no aparecen. El problema es que el juego no sabe el teléfono y cualquier teléfono desconocido piensa PowerVR. Compruebe si este es, simplemente, sólo archivo de sólo necesita "Build.prop", cambie el fabricante y el modelo de su teléfono, tales como "HTC Desire" y si el juego se ejecuta correctamente, entonces usted tiene una situación similar. Para resolver este problema, tenemos que hacer un teléfono desconocido se consideró "Boca de Dragón".
A continuación se escribe, en mayor medida, pertenece a la Gameloft Juegos.
Sin comprimir archivo AIC tenemos que encontrar 2 archivos "gi_settings.xml" y "datos.txt", por lo general se encuentran en la "res primas".
Haga clic en la "gi_settings.xml" en un editor de texto, debería ver como algo de contenido.

Código :
<Versión? Xml = "1.0" encoding = "utf-8" standalone = "yes"?>
<settings>
<carriers>
name="default"> <carrier
<wifi_only> 1 </ wifi_only>
</ Transportista>
name="sprint"> <carrier
<wifi_only> 0 </ wifi_only>
</ Transportista>
</ Los transportistas>
<devices>
<device>
name="default"> <manufacturer
<pvrt_textures> 1 </ pvrt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="Samsung"> <manufacturer
<pvrt_textures> 1 </ pvrt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="SAMSUNG"> <manufacturer
<pvrt_textures> 1 </ pvrt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="samsung"> <manufacturer
<pvrt_textures> 1 </ pvrt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="motorola"> <manufacturer
<pvrt_textures> 1 </ pvrt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="samsung"> <manufacturer
name="modelxxx"> <modelo
<atc_textures> 1 </ atc_textures> <-! muestra para anular el valor del fabricante de un dispositivo específico ->
</ Modelo>
</ Fabricante>
</ Dispositivo>
<device>
name="htc"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="HTC"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="Htc"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="Sharp"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="SHARP"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="sharp"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
Ericsson"> <manufacturer name="Sony
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="acer"> <manufacturer
<dxt_textures> 1 </ dxt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="sony"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="LGE"> <manufacturer
<dxt_textures> 1 </ dxt_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="lge"> <manufacturer
name="LG-SU660"> <modelo
<dxt_textures> 1 </ dxt_textures>
</ Modelo>
</ Fabricante>
</ Dispositivo>
</ Dispositivos>
</ Configuración>


Este archivo está dada para cada modelo de teléfono, una memoria caché (formato de compresión de textura) para su uso. Etiqueta "<pvrt_textures> 1 </ pvrt_textures>" indica un formato de textura de "PoverVR", la etiqueta "<atc_textures> 1 </ atc_textures>" en el formato de textura de "Boca de Dragón", y "<dxt_textures> 1 </ dxt_textures>" en el formato de textura de "Tegra".
Como era de esperar, el dispositivo desconocido "PoverVR".
Código :
name="default"> <manufacturer
<pvrt_textures> 1 </ pvrt_textures>
</ Fabricante>
Y LG es un dispositivo "Tegra"
Código
name="LGE"> <manufacturer
<dxt_textures> 1 </ dxt_textures>
</ Fabricante>

Ahora está claro para el juego para empezar a considerar el dispositivo "Boca de Dragón", para sustituir todas las etiquetas "<pvrt_textures> 1 </ pvrt_textures>" y "<dxt_textures> 1 </ dxt_textures>" en "<atc_textures> 1 </ atc_textures > "hacerlo a través del menú" Edición / Cambiar el editor de texto.
Como resultado, usted debe tener

Código :
<Versión? Xml = "1.0" encoding = "utf-8" standalone = "yes"?>
<settings>
<carriers>
name="default"> <carrier
<wifi_only> 1 </ wifi_only>
</ Transportista>
name="sprint"> <carrier
<wifi_only> 0 </ wifi_only>
</ Transportista>
</ Los transportistas>
<devices>
<device>
name="default"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="Samsung"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="SAMSUNG"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="samsung"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>

<device>
name="motorola"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="samsung"> <manufacturer
name="modelxxx"> <modelo
<atc_textures> 1 </ atc_textures> <-! muestra para anular el valor del fabricante de un dispositivo específico ->
</ Modelo>
</ Fabricante>
</ Dispositivo>
<device>
name="htc"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="HTC"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="Htc"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="Sharp"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="SHARP"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="sharp"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
Ericsson"> <manufacturer name="Sony
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="acer"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="sony"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>

<device>
name="LGE"> <manufacturer
<atc_textures> 1 </ atc_textures>
</ Fabricante>
</ Dispositivo>
<device>
name="lge"> <manufacturer
name="LG-SU660"> <modelo
<atc_textures> 1 </ atc_textures>
</ Modelo>
</ Fabricante>
</ Dispositivo>
</ Dispositivos>
</ Configuración>


En principio esto es suficiente, pero todavía se puede, por si acaso, datos.txt "correcto y".
Código
PVRT: http://dl.gameloft.com/hdplus/android/DH2/i9000/ML/1.0.4/DH2_FINAL_PVRTC_104.zip
ATC: http://dl.gameloft.com/hdplus/android/DH2/HTC_EVO/ML/1.0.4/DH2_FINAL_ATC_104.zip
DXT: http://dl.gameloft.com/hdplus/android/DH2/LG_STAR/ML/1.0.4/DH2_FINAL_DXT_104.zip

Se especifica que la caché de usar y dónde está, para cada tipo de acelerador. Dirección de la 2 ª línea, se copia en la 1 ª y 3 ª.
Código
PVRT: http://dl.gameloft.com/hdplus/android/DH2/HTC_EVO/ML/1.0.4/DH2_FINAL_ATC_104.zip
ATC: http://dl.gameloft.com/hdplus/android/DH2/HTC_EVO/ML/1.0.4/DH2_FINAL_ATC_104.zip
DXT: http://dl.gameloft.com/hdplus/android/DH2/HTC_EVO/ML/1.0.4/DH2_FINAL_ATC_104.zip

Así, destacamos el juego, por lo que no depende del tipo de acelerador de para "snapdragon".
Después de eso, el juego debe funcionar correctamente. Por cierto, siempre desconcertante por qué la expansión 10 veces la memoria caché en el marco del "Boca de Dragón", con los títulos "de fondos para el deseo", "El deseo de fondos para z", "El deseo de fondos para HD" si son los mismos? Por otra parte, en los juegos por lo general hay sólo tres tipos de cachés, para los aceleradores de vídeo diferentes. Esto se asegurará de que usted puede buscar un archivo "datos.txt".

Si el juego no se inicia
A veces más para que el juego no se inicia, pero las razones objetivas para ello. Por otra parte, si el modelo correcto del dispositivo en "juego comienza build.prop". Esto significa que en alguna parte del código del juego es el control de la modelo y fabricante del teléfono, lo que resultó en el juego simplemente se cierra. Es evidente que para resolver este problema es necesario para hacer el juego que ella se los dispositivos adecuados. Por ejemplo, en "HTC Desire", si es, por supuesto, respaldada por el juego. Con la ayuda de búsqueda a través de todos los "*. smali" archivo y encontrar a los que cumplan el código "Landroid / os / Construcción; -> FABRICANTE: Ljava / lang / String" o "Landroid / os / Construcción; - MODELO>: Ljava / lang / String ". Así nos encontramos con la definición del código de modelo y fabricante del teléfono.
Código :
objeto sget-v0, Landroid / os / Construcción; -> FABRICANTE: Ljava / lang / String;
objeto sget-v1, Landroid / os / Construcción; -> MODELO: Ljava / lang / String;

Tenemos que ser sustituido por
Código :
const cadena v0, "HTC"
const cadena v1, "HTC Desire"

(Variables v0, v1-enumeran a título de ejemplo, en su caso, pueden ser diferentes)
Y así con todos los archivos encontrados.
Además de la modelo y fabricante del teléfono de la misma manera en el juego también se puede comprobar la versión del firmware, o un androide, y si interfiere con el lanzamiento del juego, estas inspecciones que se proceda de manera similar.

Análisis del paquete de software

Analizar archivos de código de bytes-java "*. smali", la ocupación más complicado y un poco de dulce. Pero hay una forma en que puede descompilar APK-archivo y obtener el código fuente de Java. Si bien estas fuentes y no son adecuados para la compilación, pero un estudio del programa de hacer más fácil a veces. Para ello necesitamos dos programas dex2jar y JD gui- , deben ser extraídos a las carpetas arbitrarias. A continuación, utilizando el archivador con Guinea APK-archivo para extraer y copiar la carpeta con el "dex2jar" archivo "classes.dex". Desde el símbolo del sistema, ejecute el comando "classes.dex dex2jar.bat", como resultado de los últimos en la carpeta "dex2jar" obtener el archivo "classes.dex.dex2jar.jar". Ahora ejecute el programa "jd-gui" en su apertura, obtenidos anteriormente, el archivo "classes.dex.dex2jar.jar".
El resultado es un código legible por Java.

modificar juegos android

Si como al final de leer y comprender lo antes descripto os felicito son técnicos nucleares…
Espero les haya sido útil, aunque sea para saber como funciona el hexadecimal de android y ver la infinidad de posibilidades que tiene.
Se que es difícil todo esto pero funciona yo e hecho con otra gente variaciones para juegos que estamos asiendo nosotros y esto nos sirvió bastante.
Sin más me despido hasta pronto, hasta el próximo post.

modificar teclasjuegos android

2 comentarios - Tuto modificar juegos android parte II

josecabre
mauro! que tal bro? prometi leer tus posts y me re olvide, en las vacaciones probablemente lo haga y me reciva de ingerio en programacion jaja, contame has hecho modificaciones a algun juego que quieras compartir? o contarme aunque sea por mp? porque me interesa mucho esto, en especial si se podria lograr un efecto como el del chain fire pero sin el chain fire
arianss
che no entendi un joraca, pero si la tenes clara, no me podrias modificar el splinter cell conviction en 320x480 para ponerlo en mi optimus one x favor, si lo podes hacer mandame un mp , muchas gracias de antemano