Bueno, he estado buceando en las turbias aguas de la programación de Android de bajo nivel (C/C++ nativo usando la cadena de herramientas CodeSourcery). Probé el ejecutable en un emulador y funcionó. Me gustaría probarlo en un dispositivo real. Así que conecté mi nexo y envié los archivos al sistema de archivos. Luego traté de ejecutar el binario, y obtuve un error de permiso. Realmente no importa cómo lo monte, o dónde lo envío, no soy root y no me deja ejecutarlo. ¿Hay alguna manera de ejecutar un programa como este en un teléfono no rooteado?¿Es posible ejecutar un binario de brazo nativo en un teléfono Android no rooteado?
Respuesta
Después de usar la cadena de herramientas incluida en el NDK de Android para compilar sus binarios, es posible empaquetarlos con una aplicación típica de Android y tenerlos generados como subprocesos.
Deberá incluir todos los archivos necesarios en la carpeta de activos de su aplicación. Con el fin de ejecutar ellos, usted tiene que tener el programa copiarlos desde la carpeta de activos a un lugar ejecutable como: /data/data/com.yourdomain.yourapp/nativeFolder
Usted puede hacer esto de esta manera:
private static void copyFile(String assetPath, String localPath, Context context) {
try {
InputStream in = context.getAssets().open(assetPath);
FileOutputStream out = new FileOutputStream(localPath);
int read;
byte[] buffer = new byte[4096];
while ((read = in.read(buffer)) > 0) {
out.write(buffer, 0, read);
}
out.close();
in.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Tenga en cuenta que assetPath no es absoluto, pero con respecto a los activos /.
IE: "activos/nativeFolder" es simplemente "nativeFolder"
A continuación, ejecutar la aplicación y leer su producción se podría hacer algo como esto:
Process nativeApp = Runtime.getRuntime().exec("/data/data/com.yourdomain.yourapp/nativeFolder/application");
BufferedReader reader = new BufferedReader(new InputStreamReader(nativeApp.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
// Waits for the command to finish.
nativeApp.waitFor();
String nativeOutput = output.toString();
¡Gracias! Esto funcionó a la perfección! – AnimatedRNG
Feliz de ayudar. Me encantaría que google haga que el lado no JNI del NDK sea un poco más fácil de usar. – sarwar
¡Gracias por esto, hizo mi vida mucho más fácil! –
- 1. Quiero compilar un binario nativo de Android Puedo ejecutarlo en la terminal en el teléfono
- 2. ¿es posible instalar java fx en un teléfono Android?
- 3. no se puede ejecutar node.js en el teléfono Android?
- 4. ¿Es posible ejecutar código nativo de C++ en Windows Azure?
- 5. Ejecutar una aplicación de Python en un teléfono Android real
- 6. No se puede abrir el directorio de datos en el teléfono Android rooteado
- 7. ¿Es posible ejecutar sql nativo con entity framework?
- 8. ¿Cómo determinar si un dispositivo Android está rooteado programáticamente?
- 9. Agregar un binario precompilado en la fuente de Android
- 10. ¿Es posible manejar un SEGFAULT orginating en código nativo?
- 11. ¿Es posible programar en binario?
- 12. ¿Es posible ejecutar ZeroMQ en un Arduino
- 13. INJECT_EVENTS permiso en un dispositivo rooteado
- 14. ¿Controlador del sistema de archivos del espacio de usuario de Android en un dispositivo no rooteado?
- 15. ¿Es posible escribir un sistema operativo para un teléfono móvil?
- 16. ¿Es posible anular un método nativo en una clase Java en Android/dalvik?
- 17. ¿Es posible editar y recompilar un Binario de iOS?
- 18. Android: ¿cómo hacer telnet en un teléfono?
- 19. ¿Es posible rastrear una cadena dentro de un binario IPA?
- 20. ¿Cómo se usa File Explorer en un dispositivo rooteado?
- 21. Instalación de un binario precompilado en Android: "no encontrado"
- 22. ¿Es posible atenuar (no solo deshabilitar) un MenuItem en Android?
- 23. Calcular Pi en un teléfono Android
- 24. Linux: ejecutar un archivo binario en un script
- 25. ¿Por qué falta un "si" con un brazo en Racket?
- 26. ¿Es posible detectar si un teléfono Android tiene una rueda de desplazamiento?
- 27. ¿Es posible escribir un receptor de emisión Android que detecta cuándo se activa el teléfono?
- 28. ¿Es posible ejecutar stylecop en un solo archivo en VS2010?
- 29. ¿Es posible ejecutar aplicaciones .APK/Android en dispositivos iPad/iPhone?
- 30. ¿Cómo cambiar la identificación del grupo de un archivo en un dispositivo Android rooteado?
Es casi seguro que necesitará raíz. ¿Cómo lo conseguiste por teléfono si tu teléfono no está rooteado? – Falmarri
¿Dónde pusiste el binario? No se puede poner en la tarjeta SD porque está montada con la opción "noexec" (a menos que esté enraizada). –
Exactamente, es por eso que no funcionó en la tarjeta SD. Pude ponerlo en/data (pero no se ejecutaría o incluso me dejaría modificarlo). En cuanto a cómo poner el ejecutable en el sistema de archivos: "empujar adb". – AnimatedRNG