Ir al contenido


Foto

Escribiendo y compilando en C, en el mismo dispositivo Android


  • Por favor identifícate para responder
7 respuestas en este tema

#1 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 01 agosto 2011 - 01:14

La versión gratuita del paquete c4droid, lastimosamente no me funcionó. Pero la idea de escribir y compilar en cualquier lugar en mi mismo celular me pareció adictivamente deliciosa asi que corregí la idea original adaptándola a mi dispositivo;

Características de plataforma:
-Android 2.1-update1
-ROOTed device

Software requerido (adjunto):
-BusyBox v1.19 (aeabi)
+TinyCC 0.9.25 (aeabi)
*cabeceras de NDK CUPCAKE (v3)
*Cabeceras de GCC 4.4.0 + uClibc

Instalación de BusyBox;


delphi
  1. # ROOT
  2. su
  3. cd /
  4. # re-montamos /system con permisos de escritura
  5. mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system
  6. # descomprimimos busybox (usado por mi script "tcc") y tcc en /system/xbin
  7. # (también descomprimirá las cabeceras necesarias para compilar en la memoria SD)
  8. tar -xf /sdcard/data.tar
  9. cd /system/xbin
  10. # permisos de ejecución
  11. chmod 0555 busybox
  12. # creamos los links a los applets de busybox
  13. for i in `busybox --list`; do ln busybox /system/xbin/$i; done



Instalación (TinyCC);


delphi
  1. chmod 0555 /system/xbin/tcc
  2. cd /sdcard/c



Ejemplo1; escribimos el código (ANSI ~aeabi), compilamos, ejecutamos:

Imagen Enviada

Imagen Enviada

Los pasos de instalación pueden variar segun las necesidades y herramientas utilizadas.
En los pantallazos se ve el prompt como DOS porque he definido PS1="`pwd`>"



"Hello DelphiAccess"
El principal fin de ésta herramienta es didáctico pues creo que no es práctico desarrollar en un monitor de QVGA y un teclado de 1.5". Pero si tuviera 8 años de edad agradecería un celular de regalo, con un compilador de bolsillo!!  (y claro, ahora que soy adicto, una dosis más de código resulta exquisito).


Ejemplo2 (Detecta un nuevo archivo de imagen o sonido, obtenido por la misma cámara del dispositivo y hace una copia de respaldo de la misma);

[c]#include <stdio.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/time.h>
void main ()
{
struct stat info;
char filename[256];
if (setgid(0) || setuid(0)) return;
chdir("/sdcard/DCIM/100MSDCF");
struct DIR* dir = opendir(".");
while (!sleep(1))
{
  rewinddir(dir);
  struct dirent* ent;
  while (ent = readdir(dir))
  if (ent->d_type == DT_REG)
  {
    stat(strcpy(filename, ent->d_name), &info);
    int len = strlen(filename);
    size_t size = (size_t)info.st_size;
    int age = time(NULL) - info.st_ctime;
    sprintf(&filename[len], ".%X", info.st_ctime);
    if ((age < 3) || (age > 30) || !size || (filename[len - 4] != '.') || !stat(filename, &info))
    continue;
    FILE* file = fopen(ent->d_name, "r");
    if (file)
    {
    char* buffer = malloc(size);
    fread(buffer, sizeof(char), size, file);
    printf("%s\n", filename);
    fclose(file);
    file = fopen(filename, "w");
    fwrite(buffer, sizeof(char), size, file);
    free(buffer);
    fclose(file);
    if (file = fopen("/sys/devices/platform/msm_pmic_vibrator/enable", "w"))
    {
      fputs("25\n", file);
      fclose(file);
    }
    }
  }
}
closedir(dir);
}[/c]

Salud

Archivos adjuntos


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 01 agosto 2011 - 01:26

Hola

Yo estoy a unas semanas de cambiar de celular y estoy en la disyuntiva de cual pedir, iPhone, BlackBerry o uno con Android, estoy pensando seriamente en Android :)

Salud OS
  • 0

#3 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 01 agosto 2011 - 01:55

Hola

Yo estoy a unas semanas de cambiar de celular y estoy en la disyuntiva de cual pedir, iPhone, BlackBerry o uno con Android, estoy pensando seriamente en Android

Salud OS


Caramba, ¿ esto es Android ? creo que ya tomé la decisión

Salud OS



Ya conoces la respuesta big bro... iOS y RIM son propietarios, Symbian es propietario y está en pañales (en comparación a...). Pero Android es abierto, casi una computadora en el bolsillo (no hablo de Palm/Pocket, sino de teléfono móvil~celular).

Tan solo para dar un ejemplo y aprovechando el hilo comparto el script que utilizo sobre Windows para hacer un checkout de el núcleo completo del Android;



delphi
  1. @echo off
  2. call:git device/google/accessory/demokit.git
  3. call:git device/google/accessory/arduino.git
  4. call:git device/samsung/crespo4g.git
  5. call:git device/samsung/crespo.git
  6. call:git device/sample.git
  7. call:git device/common.git
  8. call:git device/htc/dream-sapphire.git
  9. call:git device/htc/sapphire.git
  10. call:git device/htc/passion-common.git
  11. call:git device/htc/dream.git
  12. call:git device/htc/common.git
  13. call:git device/htc/passion.git
  14. call:git toolchain/mpc.git
  15. call:git toolchain/mpfr.git
  16. call:git toolchain/gold.git
  17. call:git toolchain/gmp.git
  18. call:git toolchain/gdb.git
  19. call:git toolchain/gcc.git
  20. call:git toolchain/build.git
  21. call:git toolchain/binutils.git
  22. call:git toolchain/benchmark.git
  23. call:git toolchain/manifest.git
  24. call:git tools/prolog-cafe.git
  25. call:git tools/gimd.git
  26. call:git tools/gwtexpui.git
  27. call:git tools/gerrit-contactstore.git
  28. call:git tools/gerrit-keyapplet.git
  29. call:git tools/executablewar.git
  30. call:git tools/test/project0.git
  31. call:git tools/test/manifest.git
  32. call:git tools/repo.git
  33. call:git tools/protobuf.git
  34. call:git tools/manifest.git
  35. call:git tools/gwtorm.git
  36. call:git tools/gwtjsonrpc.git
  37. call:git tools/gerrit.git
  38. call:git tools/android-issuetrackerredirect.git
  39. call:git platform/docs/source.android.com.git
  40. call:git platform/tools/tradefederation.git
  41. call:git platform/libcore.git
  42. call:git platform/ndk.git
  43. call:git platform/cts.git
  44. call:git platform/sdk.git
  45. call:git platform/vendor/renesas/ms7724.git
  46. call:git platform/vendor/pv-open.git
  47. call:git platform/vendor/aosp.git
  48. call:git platform/vendor/st-ericsson/u300.git
  49. call:git platform/vendor/sample.git
  50. call:git platform/vendor/csr/unifi-60xx.git
  51. call:git platform/vendor/csr/unifi-105x.git
  52. call:git platform/vendor/qcom/android-open.git
  53. call:git platform/vendor/qcom/proprietary-open.git
  54. call:git platform/vendor/qcom/surf.git
  55. call:git platform/vendor/htc/sapphire-open.git
  56. call:git platform/vendor/htc/prebuilt-open.git
  57. call:git platform/vendor/htc/common-open.git
  58. call:git platform/vendor/htc/dream-open.git
  59. call:git platform/vendor/asus/eee_701.git
  60. call:git platform/system/media.git
  61. call:git platform/system/netd.git
  62. call:git platform/system/vold.git
  63. call:git platform/system/wlan/broadcom.git
  64. call:git platform/system/wlan/ti.git
  65. call:git platform/system/extras.git
  66. call:git platform/system/core.git
  67. call:git platform/system/bluetooth.git
  68. call:git platform/recovery.git
  69. call:git platform/prebuilt.git
  70. call:git platform/packages/experimental.git
  71. call:git platform/packages/wallpapers/MusicVisualization.git
  72. call:git platform/packages/wallpapers/MagicSmoke.git
  73. call:git platform/packages/wallpapers/LivePicker.git
  74. call:git platform/packages/wallpapers/Basic.git
  75. call:git platform/packages/services/LockAndWipe.git
  76. call:git platform/packages/services/EasService.git
  77. call:git platform/packages/inputmethods/OpenWnn.git
  78. call:git platform/packages/inputmethods/PinyinIME.git
  79. call:git platform/packages/inputmethods/LatinIME.git
  80. call:git platform/packages/providers/ManagementProvider.git
  81. call:git platform/packages/providers/WebSearchProvider.git
  82. call:git platform/packages/providers/ApplicationsProvider.git
  83. call:git platform/packages/providers/UserDictionaryProvider.git
  84. call:git platform/packages/providers/TelephonyProvider.git
  85. call:git platform/packages/providers/MediaProvider.git
  86. call:git platform/packages/providers/ImProvider.git
  87. call:git platform/packages/providers/GoogleSubscribedFeedsProvider.git
  88. call:git platform/packages/providers/GoogleContactsProvider.git
  89. call:git platform/packages/providers/DrmProvider.git
  90. call:git platform/packages/providers/DownloadProvider.git
  91. call:git platform/packages/providers/ContactsProvider.git
  92. call:git platform/packages/providers/CalendarProvider.git
  93. call:git platform/packages/apps/SmartCardService.git
  94. call:git platform/packages/apps/Tag.git
  95. call:git platform/packages/apps/Nfc.git
  96. call:git platform/packages/apps/SpeechRecorder.git
  97. call:git platform/packages/apps/QuickSearchBox.git
  98. call:git platform/packages/apps/Protips.git
  99. call:git platform/packages/apps/AccountsAndSyncSettings.git
  100. call:git platform/packages/apps/Launcher2.git
  101. call:git platform/packages/apps/Gallery3D.git
  102. call:git platform/packages/apps/Gallery.git
  103. call:git platform/packages/apps/DeskClock.git
  104. call:git platform/packages/apps/CertInstaller.git
  105. call:git platform/packages/apps/Bluetooth.git
  106. call:git platform/packages/apps/Provision.git
  107. call:git platform/packages/apps/GlobalSearch.git
  108. call:git platform/packages/apps/OTAProvisioningClient.git
  109. call:git platform/packages/apps/VoiceDialer.git
  110. call:git platform/packages/apps/Updater.git
  111. call:git platform/packages/apps/Sync.git
  112. call:git platform/packages/apps/Stk.git
  113. call:git platform/packages/apps/SoundRecorder.git
  114. call:git platform/packages/apps/Settings.git
  115. call:git platform/packages/apps/Phone.git
  116. call:git platform/packages/apps/PackageInstaller.git
  117. call:git platform/packages/apps/Music.git
  118. call:git platform/packages/apps/Mms.git
  119. call:git platform/packages/apps/Launcher.git
  120. call:git platform/packages/apps/IM.git
  121. call:git platform/packages/apps/HTMLViewer.git
  122. call:git platform/packages/apps/GoogleSearch.git
  123. call:git platform/packages/apps/Email.git
  124. call:git platform/packages/apps/Contacts.git
  125. call:git platform/packages/apps/Camera.git
  126. call:git platform/packages/apps/Calendar.git
  127. call:git platform/packages/apps/Calculator.git
  128. call:git platform/packages/apps/Browser.git
  129. call:git platform/packages/apps/AlarmClock.git
  130. call:git platform/manifest.git
  131. call:git platform/hardware/qcom/media.git
  132. call:git platform/hardware/qcom/gps.git
  133. call:git platform/hardware/ti/wlan.git
  134. call:git platform/hardware/ti/omap3.git
  135. call:git platform/hardware/broadcom/wlan.git
  136. call:git platform/hardware/htc/dream.git
  137. call:git platform/hardware/libhardware_legacy.git
  138. call:git platform/hardware/ril.git
  139. call:git platform/hardware/msm7k.git
  140. call:git platform/hardware/libhardware.git
  141. call:git platform/hardware/alsa_sound.git
  142. call:git platform/frameworks/ex.git
  143. call:git platform/frameworks/policies/base.git
  144. call:git platform/frameworks/opt/carddav.git
  145. call:git platform/frameworks/opt/emoji.git
  146. call:git platform/frameworks/opt/com.google.android.googlelogin.git
  147. call:git platform/frameworks/opt/com.google.android.git
  148. call:git platform/frameworks/base.git
  149. call:git platform/external/libusb-compat.git
  150. call:git platform/external/libusb.git
  151. call:git platform/external/libmtp.git
  152. call:git platform/external/valgrind.git
  153. call:git platform/external/webp.git
  154. call:git platform/external/apache-qp.git
  155. call:git platform/external/qemu-pc-bios.git
  156. call:git platform/external/libxslt.git
  157. call:git platform/external/hyphenation.git
  158. call:git platform/external/harfbuzz.git
  159. call:git platform/external/oauth.git
  160. call:git platform/external/nist-sip.git
  161. call:git platform/external/libvpx.git
  162. call:git platform/external/libnfc-nxp.git
  163. call:git platform/external/libgsm.git
  164. call:git platform/external/chromium.git
  165. call:git platform/external/bouncycastle.git
  166. call:git platform/external/jsilver.git
  167. call:git platform/external/wpa_supplicant_6.git
  168. call:git platform/external/v8.git
  169. call:git platform/external/tremolo.git
  170. call:git platform/external/stlport.git
  171. call:git platform/external/quake.git
  172. call:git platform/external/jsr305.git
  173. call:git platform/external/iproute2.git
  174. call:git platform/external/guava.git
  175. call:git platform/external/easymock.git
  176. call:git platform/external/dnsmasq.git
  177. call:git platform/external/proguard.git
  178. call:git platform/external/openvpn.git
  179. call:git platform/external/xmlwriter.git
  180. call:git platform/external/bluetooth/hcidump.git
  181. call:git platform/external/bluetooth/hcidumb.git
  182. call:git platform/external/bluetooth/glib.git
  183. call:git platform/external/bluetooth/bluez.git
  184. call:git platform/external/kernel-headers.git
  185. call:git platform/external/mtd-utils.git
  186. call:git platform/external/svox.git
  187. call:git platform/external/speex.git
  188. call:git platform/external/ipsec-tools.git
  189. call:git platform/external/blktrace.git
  190. call:git platform/external/junit.git
  191. call:git platform/external/mtpd.git
  192. call:git platform/external/lcc.git
  193. call:git platform/external/hcidump.git
  194. call:git platform/external/gtest.git
  195. call:git platform/external/eglib.git
  196. call:git platform/external/astl.git
  197. call:git platform/external/alsa-utils.git
  198. call:git platform/external/dosfstools.git
  199. call:git platform/external/zlib.git
  200. call:git platform/external/yaffs2.git
  201. call:git platform/external/xdelta3.git
  202. call:git platform/external/wpa_supplicant.git
  203. call:git platform/external/webkit.git
  204. call:git platform/external/tremor.git
  205. call:git platform/external/tinyxml.git
  206. call:git platform/external/tesseract.git
  207. call:git platform/external/tcpdump.git
  208. call:git platform/external/tagsoup.git
  209. call:git platform/external/strace.git
  210. call:git platform/external/srec.git
  211. call:git platform/external/sqlite.git
  212. call:git platform/external/sonivox.git
  213. call:git platform/external/skia.git
  214. call:git platform/external/safe-iop.git
  215. call:git platform/external/qemu.git
  216. call:git platform/external/protobuf.git
  217. call:git platform/external/ppp.git
  218. call:git platform/external/ping.git
  219. call:git platform/external/oprofile.git
  220. call:git platform/external/openssl.git
  221. call:git platform/external/opencore.git
  222. call:git platform/external/neven.git
  223. call:git platform/external/netperf.git
  224. call:git platform/external/netcat.git
  225. call:git platform/external/libxml2.git
  226. call:git platform/external/libpng.git
  227. call:git platform/external/libpcap.git
  228. call:git platform/external/libffi.git
  229. call:git platform/external/jpeg.git
  230. call:git platform/external/jhead.git
  231. call:git platform/external/jdiff.git
  232. call:git platform/external/iptables.git
  233. call:git platform/external/icu4c.git
  234. call:git platform/external/grub.git
  235. call:git platform/external/googleclient.git
  236. call:git platform/external/giflib.git
  237. call:git platform/external/genext2fs.git
  238. call:git platform/external/gdata.git
  239. call:git platform/external/fsck_msdos.git
  240. call:git platform/external/freetype.git
  241. call:git platform/external/fdlibm.git
  242. call:git platform/external/expat.git
  243. call:git platform/external/esd.git
  244. call:git platform/external/emma.git
  245. call:git platform/external/embunit.git
  246. call:git platform/external/elfutils.git
  247. call:git platform/external/elfcopy.git
  248. call:git platform/external/e2fsprogs.git
  249. call:git platform/external/dropbear.git
  250. call:git platform/external/dhcpcd.git
  251. call:git platform/external/dbus.git
  252. call:git platform/external/clearsilver.git
  253. call:git platform/external/bzip2.git
  254. call:git platform/external/bsdiff.git
  255. call:git platform/external/bluez.git
  256. call:git platform/external/bison.git
  257. call:git platform/external/apache-http.git
  258. call:git platform/external/alsa-lib.git
  259. call:git platform/external/aes.git
  260. call:git platform/development.git
  261. call:git platform/dalvik.git
  262. call:git platform/build.git
  263. call:git platform/bootloader/legacy.git
  264. call:git platform/bootable/recovery.git
  265. call:git platform/bootable/diskinstaller.git
  266. call:git platform/bootable/bootloader/legacy.git
  267. call:git platform/bionic.git
  268. call:git kernel/qemu.git
  269. call:git kernel/samsung.git
  270. call:git kernel/tegra.git
  271. call:git kernel/linux-2.6.git
  272. call:git kernel/lk.git
  273. call:git kernel/omap.git
  274. call:git kernel/experimental.git
  275. call:git kernel/msm.git
  276. call:git kernel/common.git
  277.  
  278. title kernel.7z
  279. set /p op=Compress now? (y=yes)
  280. if "%op%"=="y" (del ..\android.7z && "%ProgramFiles%\7-Zip\7z" a -r -mx=9 -y -xr!?git\* ..\kernel *)
  281. exit/b
  282.  
  283. :git
  284. title %1
  285. if exist %1 (cmd /c"cd %1 & git pull") else (md "%1" && cmd /cgit clone "git://android.git.kernel.org/%1" "%1")



El anterior, descarga 15Gb. de código fuente abierto del núcleo. Conocimentos de miles de desarrolladores los cuales facilitan el aprendizaje y con éste el manejo del dispositivo. Tan solo hay que hacer un conteo del Software desarrollado para cada S.O.

Salud
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 02 agosto 2011 - 12:10

La versión gratuita del paquete c4droid, lastimosamente no me funcionó. Pero la idea de escribir y compilar en cualquier lugar en mi mismo celular me pareció adictivamente deliciosa asi que corregí la idea original adaptándola a mi dispositivo;


¡Como te gustan estos juguetitos!.  (y)


Saludos.


  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 02 agosto 2011 - 04:12

Me dejas pasmado, Chacal, veo que te gusta "meterte hasta la cocina" con los cacharros estos!

Veo que has usado el NDK con C un poquito, ¿que tal lo ves comparado con SDK en java? Supongo que por lo visto hasta ahora en este post, tu eres de los duros de C, pero ¿que puedes hacer en C y no en Java, aparte de velocidad, claro?

  • 0

#6 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 02 agosto 2011 - 04:17

Mi querido Sergio, cada plataforma o llamemoslo nivel en el que se programa tiene las ventajas que la misma plataforma le proporciona.

El ejemplo claro de esto es el paquete SuperUser; La SDK no te proporciona las clases y metodos necesarios para ejecutar un proceso como ROOT, pero la NDK si. Entonces cuando una aplicacion requiere ciertos permisos ejecuta a SU para realizar un SETGID y SETUID una vez SU se haya comunicado con un paquete desarrollado con la SDK que le muestra al usuario un dialogo de confirmacion.
  • 0

#7 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 03 agosto 2011 - 11:44

Ya veo, pues igual que en PC si usas java o C, de todas formas evitare el C si puedo, los punteros me suelen traer de cabeza y lo veo un lenguaje muy potente pero algo "traicionero".
  • 0

#8 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 04 agosto 2011 - 11:04

Ya veo, pues igual que en PC si usas java o C, de todas formas evitare el C si puedo, los punteros me suelen traer de cabeza y lo veo un lenguaje muy potente pero algo "traicionero".


Demasiada ambiguedad en el termino "traicionero", pero creo que la SDK es suficiente en la mayoria de los casos asi que no es necesario dominar ambos para un desarrollo Android.
  • 0




IP.Board spam blocked by CleanTalk.