mlesir
31/01/14, 19:10:12
Al final de este post podeis ver dos posibles soluciones para los problemas con Sqlite
Lo siguiente es una transcripción bastante fiel de una conversación con Julio, el desarrollador de WhatsTasker, en su Comunidad que tiene en Google Plus, para este plugin. La he trascrito aquí porque creo que puede ser muy pero que muy ilustrativa, creo que merece la pena.
Al final de este post están las distintas descargas de las versiones de Sqlite. Con esto podrás instalar Sqlite en tu móvil y solucionar los problemas que algunos tenían para usarlo. Lo califico de interrogatorio porque me ha parecido más adecuado, jeje, como vereís le sometí a un acoso en todo regla. Muchisimas gracias por tu paciencia y tu comprensión.
Hilo en este subforo dedicado a WhatsTasker: http://www.htcmania.com/showthread.php?t=733767
Enlace al Play Store: https://play.google.com/store/apps/d...tstasker&hl=es
Foro en Google Plus: https://plus.google.com/s/whatstasker?hl=es
YO: Hola Julio.
Como no se me ocurre una persona que pueda saber más de esto que tu te lo pregunto : resulta que ayer me dijo una persona que utiliza mi apk que había probado a quitar la tarea para quitar acentos del mensaje, y yo también he comprobado que funciona. Tienes idea de por qué ahora sqlite admite acentos? Puede ser que al instalar tu app haya cambiado algo? La importancia de esto es que si puedo prescindir de esto se gana mucho en rapidez pero claro ya no se si funcionara para todos.
JULIO: Con sqlite se podrían quitar los acentos directamente, pero no se hace porque depende directamente de como esté compilado el ejecutable, y no se ajustaría a todos los idiomas porque la compilación se haría para un idioma concreto (la razón concreta es compleja de explicar). Es por eso por lo que sqlite no implementa nada de eso y por lo que "falla" al buscar con acentos, porque los dispositivos tienen que funcionar en cualquier país.
Con respecto a mi app, yo lo hago distinto, si usas la mía hay una opción explícita para ignorar acentos dentro del plugin. Yo lo de ignorar acentos lo hago en Java porque ahí no tengo problemas ni esas limitaciones. Básicamente me traigo todos los nombres y hago la búsqueda en Java. Así que si usas mi app y marcas la opción puedes omitir la tarea que tengas antes de quitar acentos y cosas de esas.
YO: En todo caso a mi antes cuando insertaba un mensaje con acentos en whatsapp me daba error y ahora no?! Esto era así? Ha cambiado?
Lo de buscar lo tengo que comprobar si ahora funciona con acentos, pero por lo que tu dices no debería funcionar.
JULIO: Lo de insertar va por otro lado, aunque no se si te refieres a insertar con mi app o Tasker, ya que la mía siempre ha aceptado cualquier carácter. Si los problemas que tenías era con Tasker me puedo imaginar por dónde van los tiros, aunque no sé cómo lo hará Pent en su app. Si es lo que yo pienso es porque Tasker usaría (al igual que yo) una librería para acceder a las funciones root fácilmente. Es una librería hecha por Chainfire, el desarrollador de SuperSU, y tenía un fallo que hacía que fallara cualquier comando con caracteres especiales. La cuestión es que yo le mandé a Chainfire hace más de un mes un parche para arreglar ese fallo, por eso mi app siempre ha funcionado al insertar, y si Tasker usa la librería y la ha actualizado pues funcionará también (bueno, cualquier app que la use para acceder a root mejor dicho). Pero como digo, ahí no te puedo decir seguro jeje
Y efectivamente, buscar nombres desde Tasker debería seguir sin funcionar, claro está, suponiendo que no sea una ROM con una compilación propia de sqlite que lo tenga habilitado (no creo que se dé el caso, y menos porque tu comando tienes que cambiarlo también, por si solo no va)
YO: Como lo de instalar sqlite a mas de uno le crea muchos problemas a mi se me ha ocurrido que quizás la manera mas fácil es instalar tu plugin. Entonces:
1 Si desinstalo tu plugin el sql se queda no?
2 Si ya tengo otro sql y quiero poner el tuyo (dado q a muchos el que tienen parece que no les va bien para ciertas cosas) no queda otra q desinstalar el "antiguo” sql no?" La verdad es que quizás podrías dar esa opción en tu plugin de cambiarlo. Y respecto a esto: ¿ Cuando se instala tu plugin este se limita a ver si hay ya sqlite o comprueba que sea una versión compatible y con las opciones adecuadas para que Whatstasker pueda funcionar?
JULIO: Pues la respuesta es no a todo jaja. Te explico: mi plugin no copia el archivo de sqlite de manera "global", yo lo único que hago es copiarlo dentro de mi carpeta de aplicación para usarlo, por lo que si desinstalas mi app el ejecutable lo pierdes. De hecho si cuando tienes mi app instalada intentas ejecutar el comando "sqlite3" directamente tampoco te funcionará si antes no lo tenías, tendrías que ejecutarlo llamando la ruta completa del ejecutable (/data/data/net.zhdev.whatstasker/files/sqlite3). Eso ocurre porque en el sistema no hay enlace simbólico (como un acceso directo) que diga que solo poniendo sqlite3 se debería ir a /data/data...
Cuando se instala el sqlite de manera permanente (como con la app "SQLite installer for root") o cualquier otro binario ejecutable lo que se hace es copiar el archivo directamente a la partición de sistema y si no es en las carpetas habituales se le crea un enlace simbólico ahí y ya está, ya la tienes disponible para todo el que la quiera. Las razones por las que yo no hago eso, y por las que ninguna app debería sin el conocimiento del usuario, es que nunca puedes estar seguro de si ya hay algo previamente al instalar, si vas a quitar algo que crees innecesario pero que sirve, o si vas a sustituir algo que otra app puede que necesite. Además, luego quieres desinstalar la app y se te queda toda la basura repartida por el sistema (me sé de varias) y puede que luego cree problemas cuando otras apps que instales intenten hacer lo mismo. Si se va a usar una funcionalidad propia lo correcto es dejarla en la carpeta propia de la app y usar los ejecutables desde ahí, así ni molestas a nadie ni te molestan a ti jeje. Obviamente en el caso de SQLite installer es al revés, quieres instalarlo en el sistema para que cualquiera que no lo tenga lo utilice.
Con respecto a lo de las comprobaciones que yo hago, son más bien pocas:
1. Compruebo si sqlite3 está ya en el sistema
2. Si no está copio en mi carpeta el ejecutable genérico y compruebo si la versión es la correcta (esto último porque hay varios dispositivos con unas librerías propias con versiones distintas).
3. Si la versión no concuerda borro ese ejecutable y copio uno personalizado que he compilado yo (este se lo traga todo porque no depende de librerías externas, pero a cambio ocupa mucho más).
4. Por temas de permisos de sistema y demás (no por sqlite) tengo que comprobar si los comandos los tengo que ejecutar de una forma determinada.
Con eso ya tengo el entorno listo para ejecutar lo que necesito, no hay nada específico para mi app. Realmente me extrañaría que usaras opciones que hagan que ciertas cosas no sean compatibles según la versión de sqlite, porque en Android varían de las 3.6.x a la 3.7.x, no hay tanta diferencia. Yo sí podría decirte comandos que sé que no funcionarán en versiones antiguas por ejemplo, pero sé que no los vas a estar utilizando. Para un comando normal tipo "sqlite3 'LaBD' 'SELECT * FROM ...;'" lo podrás hacer funcionar en cualquier versión. Otro tema es que la versión de sqlite3 no sea la correcta para el sistema, en cuyo caso no te funciona ningún comando
YO: O sea puedo usar tu sqlite fuera de WhatsTasker?
Por ejemplo pongo esto en el shell: data/data/..../Julio 's sqlite sqlite insert bla bla bla... Así si el sqlite que tengo no funciona siempre puedo recurrir al tuyo no?
O qué pasa si me copio tu sqlite y lo pego en bin?
Es que puede ser que haya quien prefiera hacer esto pq ahora que en el subforo estamos empezando con sqlite no veas tu la cantidad de problemas que puede dar. A mi personalmente me fue muy fácil descargar el archivo de Xda y ponerlo.
Claro que quizás tu sqlite esta optimizado para WhatsTasker y no es aconsejable usarlo para fuera.
Hay algún enlace oficial para descargarse el sqlite más actualizado?
Y por otro lado y por lo que dices tendría que descargarse una versión digamos especial para ciertos dispositivos por lo de las librerías q comentas? .
JULIO: Mi ejecutable lo podrás usar siempre que tú no tengas uno ya instalado, porque si ya tienes uno el mío no se copiará en esa carpeta (eso puede que cambie para la próxima version de WhatsTasker, así tengo todo más controlado). Mientras mi app esté instalada podrías hacer algo así:
/data/data/net.zhdev.whatstasker/files/sqlite3 '/data/data/com.whatsapp/databases/msgstore.db' 'select * from messages order by _id desc limit 1;'
Si sustituyes tu sqlite por el mío (siempre guardando el antiguo por si acaso) te pueden pasar 3 cosas:
- Que falle y diga que te faltan librerías
- Que falle y te diga que las versiones son distintas
- Que funcione bien
Sabiendo que versión estás copiando y que versión de android tienes la opción de fallo es la menos frecuente.
La forma más sencilla de instalar sqlite es usar por ejemplo la app que te puse arriba (SQLite installer for root), que te copia el archivo necesario en su sitio y ya está. El problema es que en los comentarios muchos dicen que les falla, pero vamos, es cuestión de probar.
A partir de aquí voy a empezar un tocho de explicación, si no tienes ganas de leer ve directamente al último párrafo que te doy una solución ;)
Lo de los dispositivos "especiales" te comento como va. Android siempre lleva sqlite incorporado, pero no en forma de ejecutable para línea de comandos, sino en forma de librerías. Cualquier app puede hacer uso de esas librerías desde código, programando. Para poder usar sqlite desde un terminal o línea de comando hace falta un ejecutable, que es el archivo llamado sqlite3que usas siempre, y ese ejecutable en su código lo único que hace es llamar a las librerías del sistema (por eso ocupa muy poco). Ese ejecutable es el que normalmente no va incluido en versiones de teléfonos en producción (de venta al público). En Android esas librerías de sqlite se han actualizado 3 veces (o 4, tendría que mirarlo, no recuerdo ahora), así que cuando le metes el ejecutable al teléfono tiene que estar usando las mismas librerías para las que se compiló (misma versión en librerías que en ejecutable). Entonces es fácil, sabiendo la versión de Android, saber el ejecutable que le corresponde. Pero (aquí el problema) hay determinados teléfonos que el fabricante por la razón que sea ha decidido cambiarle las librerías (por lo general le pone unas más actualizadas), así que ya no sabes que ejecutable le tienes que meter. bueno, lo puedes saber, pero no es lo mismo tener 4 ejecutables conocidos que 100 distintos para todo el resto de posibilidades jeje.
Mi app lleva incluidos ahora mismo 3 versiones del ejecutable, 2 de ellas son las genéricas que usan las librerías del sistema, y si esas fallan tengo una tercera que no depende de librerías del sistema, lo lleva ya todo incluido (y claro, ocupa más), pero "siempre" funciona (las comillas del siempre no las voy a explicar ahora xD). Por cierto, ninguna de esas versiones lleva nada concreto ni especial para mi app.
Versiones oficiales para descargar, ya listas, no hay. Las librerías de SQLite son de código abierto y hay archivos compilados para algunas plataformas en su web, pero no para Android. Para Android hay 2 opciones de donde sacarlas:
- Las versiones genéricas las puedes sacar de los emuladores de Android, que siempre lo llevan. Esta opción te sirve de poco si no tienes instaladas las herramientas de desarrollador con los emuladores.
- Cualquier otra versión siempre puedes bajarte el código y compilarlo tú. Eso es lo que hice yo para mi versión "completa" (que por cierto, es la última versión), la que lleva las librerías incluidas. Obviamente esa opción tampoco suele ser muy cómodo si no tienes todo lo necesario instalado en el pc ni tienes ni idea siquiera de lo que es compilar, terminal, comandos y cosas varias jeje
YO: La leche me he leído todo con gran interés y la único a lo que puedo responder es al último párrafo: Vale!
JULIO: Bueno, aquí tienes los distintos ejecutables de SQLite que usa cada versión de Android. Voy a obviar los que corresponden a versiones de Android demasiado antiguas (si alguien te lo pide avisa, pero vamos, que se vaya cambiando de móvil que ya le toca jeje). Van por tramos, o sea que son todas las versiones mayores a la indicada hasta llegar al siguiente.
Android 2.2+ lleva las librerías de SQLite 3.6.22:
http://www.zhdev.net/sqlite/bin/3.6.22/sqlite3
Android 3.0+ lleva SQLite 3.7.4:
http://www.zhdev.net/sqlite/bin/3.7.4/sqlite3
Android 4.1+ lleva SQLite 3.7.11:
http://www.zhdev.net/sqlite/bin/3.7.11/sqlite3
Como ya te comenté hay determinados dispositivos que llevan unas librerías distintas (más actualizadas) a las que lleva su versión de Android por defecto, más que nada porque al fabricante le habrá interesado para poder implementar alguna funcionalidad. Si el ejecutable de arriba falla (saldrá un error diciendo algo así como "Version mismatch") siempre se podrá utilizar ésta; es una compilación propia que he hecho yo de SQLite 3.8.2 y que incluye las librerías de SQLite dentro del ejecutable para no tener que depender de las del sistema. Así que funcionará siempre independientemente de lo que haya en el dispositivo, pero obviamente eso hace que ocupe más (unos 800KB frente a los 50KB que ocupan las otras).
http://www.zhdev.net/sqlite/bin/3.8.2_lib/sqlite3
La forma de instalarlo es copiar el ejecutable dentro de la carpeta /system/xbin y una vez que esté ahí hay que darle permiso de ejecución. Todo eso con algún explorador como ES Explorer por ejemplo se hace muy fácilmente. Si alguien no sabe o no le sale y quiere probar con comandos también te los puedo pasar. Hay que tener en cuenta que la partición de sistema no suele estar montada en modo escritura, solo en modo lectura, así que hay que cambiarlo antes de intentar copiar el archivo o no dejará.
Espero que le sirva a los del foro ;)
--------------------- O ----------------------
Por último decir a Julio: :gracias: y recibe por supuesto la copa que premia (virtualmente claro) a los que aportan a este foro y consiguen que se suban dichas aportaciones al recopilatorio :campeon:
Métodos para descagarnos Sqlite en nuestro móvil:
1-Básicamente consiste en coger el de la app Titanium Backup: http://forum.xda-developers.com/android/general/how-to-install-sqlite3sql-database-t3283409
2- Con la app "Sqlite for Root": https://play.google.com/store/apps/details?id=com.kanolato.sqlite&hl=es
Lo siguiente es una transcripción bastante fiel de una conversación con Julio, el desarrollador de WhatsTasker, en su Comunidad que tiene en Google Plus, para este plugin. La he trascrito aquí porque creo que puede ser muy pero que muy ilustrativa, creo que merece la pena.
Al final de este post están las distintas descargas de las versiones de Sqlite. Con esto podrás instalar Sqlite en tu móvil y solucionar los problemas que algunos tenían para usarlo. Lo califico de interrogatorio porque me ha parecido más adecuado, jeje, como vereís le sometí a un acoso en todo regla. Muchisimas gracias por tu paciencia y tu comprensión.
Hilo en este subforo dedicado a WhatsTasker: http://www.htcmania.com/showthread.php?t=733767
Enlace al Play Store: https://play.google.com/store/apps/d...tstasker&hl=es
Foro en Google Plus: https://plus.google.com/s/whatstasker?hl=es
YO: Hola Julio.
Como no se me ocurre una persona que pueda saber más de esto que tu te lo pregunto : resulta que ayer me dijo una persona que utiliza mi apk que había probado a quitar la tarea para quitar acentos del mensaje, y yo también he comprobado que funciona. Tienes idea de por qué ahora sqlite admite acentos? Puede ser que al instalar tu app haya cambiado algo? La importancia de esto es que si puedo prescindir de esto se gana mucho en rapidez pero claro ya no se si funcionara para todos.
JULIO: Con sqlite se podrían quitar los acentos directamente, pero no se hace porque depende directamente de como esté compilado el ejecutable, y no se ajustaría a todos los idiomas porque la compilación se haría para un idioma concreto (la razón concreta es compleja de explicar). Es por eso por lo que sqlite no implementa nada de eso y por lo que "falla" al buscar con acentos, porque los dispositivos tienen que funcionar en cualquier país.
Con respecto a mi app, yo lo hago distinto, si usas la mía hay una opción explícita para ignorar acentos dentro del plugin. Yo lo de ignorar acentos lo hago en Java porque ahí no tengo problemas ni esas limitaciones. Básicamente me traigo todos los nombres y hago la búsqueda en Java. Así que si usas mi app y marcas la opción puedes omitir la tarea que tengas antes de quitar acentos y cosas de esas.
YO: En todo caso a mi antes cuando insertaba un mensaje con acentos en whatsapp me daba error y ahora no?! Esto era así? Ha cambiado?
Lo de buscar lo tengo que comprobar si ahora funciona con acentos, pero por lo que tu dices no debería funcionar.
JULIO: Lo de insertar va por otro lado, aunque no se si te refieres a insertar con mi app o Tasker, ya que la mía siempre ha aceptado cualquier carácter. Si los problemas que tenías era con Tasker me puedo imaginar por dónde van los tiros, aunque no sé cómo lo hará Pent en su app. Si es lo que yo pienso es porque Tasker usaría (al igual que yo) una librería para acceder a las funciones root fácilmente. Es una librería hecha por Chainfire, el desarrollador de SuperSU, y tenía un fallo que hacía que fallara cualquier comando con caracteres especiales. La cuestión es que yo le mandé a Chainfire hace más de un mes un parche para arreglar ese fallo, por eso mi app siempre ha funcionado al insertar, y si Tasker usa la librería y la ha actualizado pues funcionará también (bueno, cualquier app que la use para acceder a root mejor dicho). Pero como digo, ahí no te puedo decir seguro jeje
Y efectivamente, buscar nombres desde Tasker debería seguir sin funcionar, claro está, suponiendo que no sea una ROM con una compilación propia de sqlite que lo tenga habilitado (no creo que se dé el caso, y menos porque tu comando tienes que cambiarlo también, por si solo no va)
YO: Como lo de instalar sqlite a mas de uno le crea muchos problemas a mi se me ha ocurrido que quizás la manera mas fácil es instalar tu plugin. Entonces:
1 Si desinstalo tu plugin el sql se queda no?
2 Si ya tengo otro sql y quiero poner el tuyo (dado q a muchos el que tienen parece que no les va bien para ciertas cosas) no queda otra q desinstalar el "antiguo” sql no?" La verdad es que quizás podrías dar esa opción en tu plugin de cambiarlo. Y respecto a esto: ¿ Cuando se instala tu plugin este se limita a ver si hay ya sqlite o comprueba que sea una versión compatible y con las opciones adecuadas para que Whatstasker pueda funcionar?
JULIO: Pues la respuesta es no a todo jaja. Te explico: mi plugin no copia el archivo de sqlite de manera "global", yo lo único que hago es copiarlo dentro de mi carpeta de aplicación para usarlo, por lo que si desinstalas mi app el ejecutable lo pierdes. De hecho si cuando tienes mi app instalada intentas ejecutar el comando "sqlite3" directamente tampoco te funcionará si antes no lo tenías, tendrías que ejecutarlo llamando la ruta completa del ejecutable (/data/data/net.zhdev.whatstasker/files/sqlite3). Eso ocurre porque en el sistema no hay enlace simbólico (como un acceso directo) que diga que solo poniendo sqlite3 se debería ir a /data/data...
Cuando se instala el sqlite de manera permanente (como con la app "SQLite installer for root") o cualquier otro binario ejecutable lo que se hace es copiar el archivo directamente a la partición de sistema y si no es en las carpetas habituales se le crea un enlace simbólico ahí y ya está, ya la tienes disponible para todo el que la quiera. Las razones por las que yo no hago eso, y por las que ninguna app debería sin el conocimiento del usuario, es que nunca puedes estar seguro de si ya hay algo previamente al instalar, si vas a quitar algo que crees innecesario pero que sirve, o si vas a sustituir algo que otra app puede que necesite. Además, luego quieres desinstalar la app y se te queda toda la basura repartida por el sistema (me sé de varias) y puede que luego cree problemas cuando otras apps que instales intenten hacer lo mismo. Si se va a usar una funcionalidad propia lo correcto es dejarla en la carpeta propia de la app y usar los ejecutables desde ahí, así ni molestas a nadie ni te molestan a ti jeje. Obviamente en el caso de SQLite installer es al revés, quieres instalarlo en el sistema para que cualquiera que no lo tenga lo utilice.
Con respecto a lo de las comprobaciones que yo hago, son más bien pocas:
1. Compruebo si sqlite3 está ya en el sistema
2. Si no está copio en mi carpeta el ejecutable genérico y compruebo si la versión es la correcta (esto último porque hay varios dispositivos con unas librerías propias con versiones distintas).
3. Si la versión no concuerda borro ese ejecutable y copio uno personalizado que he compilado yo (este se lo traga todo porque no depende de librerías externas, pero a cambio ocupa mucho más).
4. Por temas de permisos de sistema y demás (no por sqlite) tengo que comprobar si los comandos los tengo que ejecutar de una forma determinada.
Con eso ya tengo el entorno listo para ejecutar lo que necesito, no hay nada específico para mi app. Realmente me extrañaría que usaras opciones que hagan que ciertas cosas no sean compatibles según la versión de sqlite, porque en Android varían de las 3.6.x a la 3.7.x, no hay tanta diferencia. Yo sí podría decirte comandos que sé que no funcionarán en versiones antiguas por ejemplo, pero sé que no los vas a estar utilizando. Para un comando normal tipo "sqlite3 'LaBD' 'SELECT * FROM ...;'" lo podrás hacer funcionar en cualquier versión. Otro tema es que la versión de sqlite3 no sea la correcta para el sistema, en cuyo caso no te funciona ningún comando
YO: O sea puedo usar tu sqlite fuera de WhatsTasker?
Por ejemplo pongo esto en el shell: data/data/..../Julio 's sqlite sqlite insert bla bla bla... Así si el sqlite que tengo no funciona siempre puedo recurrir al tuyo no?
O qué pasa si me copio tu sqlite y lo pego en bin?
Es que puede ser que haya quien prefiera hacer esto pq ahora que en el subforo estamos empezando con sqlite no veas tu la cantidad de problemas que puede dar. A mi personalmente me fue muy fácil descargar el archivo de Xda y ponerlo.
Claro que quizás tu sqlite esta optimizado para WhatsTasker y no es aconsejable usarlo para fuera.
Hay algún enlace oficial para descargarse el sqlite más actualizado?
Y por otro lado y por lo que dices tendría que descargarse una versión digamos especial para ciertos dispositivos por lo de las librerías q comentas? .
JULIO: Mi ejecutable lo podrás usar siempre que tú no tengas uno ya instalado, porque si ya tienes uno el mío no se copiará en esa carpeta (eso puede que cambie para la próxima version de WhatsTasker, así tengo todo más controlado). Mientras mi app esté instalada podrías hacer algo así:
/data/data/net.zhdev.whatstasker/files/sqlite3 '/data/data/com.whatsapp/databases/msgstore.db' 'select * from messages order by _id desc limit 1;'
Si sustituyes tu sqlite por el mío (siempre guardando el antiguo por si acaso) te pueden pasar 3 cosas:
- Que falle y diga que te faltan librerías
- Que falle y te diga que las versiones son distintas
- Que funcione bien
Sabiendo que versión estás copiando y que versión de android tienes la opción de fallo es la menos frecuente.
La forma más sencilla de instalar sqlite es usar por ejemplo la app que te puse arriba (SQLite installer for root), que te copia el archivo necesario en su sitio y ya está. El problema es que en los comentarios muchos dicen que les falla, pero vamos, es cuestión de probar.
A partir de aquí voy a empezar un tocho de explicación, si no tienes ganas de leer ve directamente al último párrafo que te doy una solución ;)
Lo de los dispositivos "especiales" te comento como va. Android siempre lleva sqlite incorporado, pero no en forma de ejecutable para línea de comandos, sino en forma de librerías. Cualquier app puede hacer uso de esas librerías desde código, programando. Para poder usar sqlite desde un terminal o línea de comando hace falta un ejecutable, que es el archivo llamado sqlite3que usas siempre, y ese ejecutable en su código lo único que hace es llamar a las librerías del sistema (por eso ocupa muy poco). Ese ejecutable es el que normalmente no va incluido en versiones de teléfonos en producción (de venta al público). En Android esas librerías de sqlite se han actualizado 3 veces (o 4, tendría que mirarlo, no recuerdo ahora), así que cuando le metes el ejecutable al teléfono tiene que estar usando las mismas librerías para las que se compiló (misma versión en librerías que en ejecutable). Entonces es fácil, sabiendo la versión de Android, saber el ejecutable que le corresponde. Pero (aquí el problema) hay determinados teléfonos que el fabricante por la razón que sea ha decidido cambiarle las librerías (por lo general le pone unas más actualizadas), así que ya no sabes que ejecutable le tienes que meter. bueno, lo puedes saber, pero no es lo mismo tener 4 ejecutables conocidos que 100 distintos para todo el resto de posibilidades jeje.
Mi app lleva incluidos ahora mismo 3 versiones del ejecutable, 2 de ellas son las genéricas que usan las librerías del sistema, y si esas fallan tengo una tercera que no depende de librerías del sistema, lo lleva ya todo incluido (y claro, ocupa más), pero "siempre" funciona (las comillas del siempre no las voy a explicar ahora xD). Por cierto, ninguna de esas versiones lleva nada concreto ni especial para mi app.
Versiones oficiales para descargar, ya listas, no hay. Las librerías de SQLite son de código abierto y hay archivos compilados para algunas plataformas en su web, pero no para Android. Para Android hay 2 opciones de donde sacarlas:
- Las versiones genéricas las puedes sacar de los emuladores de Android, que siempre lo llevan. Esta opción te sirve de poco si no tienes instaladas las herramientas de desarrollador con los emuladores.
- Cualquier otra versión siempre puedes bajarte el código y compilarlo tú. Eso es lo que hice yo para mi versión "completa" (que por cierto, es la última versión), la que lleva las librerías incluidas. Obviamente esa opción tampoco suele ser muy cómodo si no tienes todo lo necesario instalado en el pc ni tienes ni idea siquiera de lo que es compilar, terminal, comandos y cosas varias jeje
YO: La leche me he leído todo con gran interés y la único a lo que puedo responder es al último párrafo: Vale!
JULIO: Bueno, aquí tienes los distintos ejecutables de SQLite que usa cada versión de Android. Voy a obviar los que corresponden a versiones de Android demasiado antiguas (si alguien te lo pide avisa, pero vamos, que se vaya cambiando de móvil que ya le toca jeje). Van por tramos, o sea que son todas las versiones mayores a la indicada hasta llegar al siguiente.
Android 2.2+ lleva las librerías de SQLite 3.6.22:
http://www.zhdev.net/sqlite/bin/3.6.22/sqlite3
Android 3.0+ lleva SQLite 3.7.4:
http://www.zhdev.net/sqlite/bin/3.7.4/sqlite3
Android 4.1+ lleva SQLite 3.7.11:
http://www.zhdev.net/sqlite/bin/3.7.11/sqlite3
Como ya te comenté hay determinados dispositivos que llevan unas librerías distintas (más actualizadas) a las que lleva su versión de Android por defecto, más que nada porque al fabricante le habrá interesado para poder implementar alguna funcionalidad. Si el ejecutable de arriba falla (saldrá un error diciendo algo así como "Version mismatch") siempre se podrá utilizar ésta; es una compilación propia que he hecho yo de SQLite 3.8.2 y que incluye las librerías de SQLite dentro del ejecutable para no tener que depender de las del sistema. Así que funcionará siempre independientemente de lo que haya en el dispositivo, pero obviamente eso hace que ocupe más (unos 800KB frente a los 50KB que ocupan las otras).
http://www.zhdev.net/sqlite/bin/3.8.2_lib/sqlite3
La forma de instalarlo es copiar el ejecutable dentro de la carpeta /system/xbin y una vez que esté ahí hay que darle permiso de ejecución. Todo eso con algún explorador como ES Explorer por ejemplo se hace muy fácilmente. Si alguien no sabe o no le sale y quiere probar con comandos también te los puedo pasar. Hay que tener en cuenta que la partición de sistema no suele estar montada en modo escritura, solo en modo lectura, así que hay que cambiarlo antes de intentar copiar el archivo o no dejará.
Espero que le sirva a los del foro ;)
--------------------- O ----------------------
Por último decir a Julio: :gracias: y recibe por supuesto la copa que premia (virtualmente claro) a los que aportan a este foro y consiguen que se suban dichas aportaciones al recopilatorio :campeon:
Métodos para descagarnos Sqlite en nuestro móvil:
1-Básicamente consiste en coger el de la app Titanium Backup: http://forum.xda-developers.com/android/general/how-to-install-sqlite3sql-database-t3283409
2- Con la app "Sqlite for Root": https://play.google.com/store/apps/details?id=com.kanolato.sqlite&hl=es