Bonjour à tous !

Après plusieurs heures de recherche dans les confins d'Internet...
Après moultes tentatives qui ont échouées...
À ce jour, il est impossible de trouver un tutoriel complet et fonctionnel (j'ai testé, en vain). Vous trouverez ci-après, mon tutoriel fonctionnel (testé plusieurs fois).
Je me base sur la dernière version de Qt à ce jour, soit la 5.7.0-1. Je n'ai pas testé avec la 5.6.0-1, mais il ne devrait pas avoir de problème.

Tout d'abord, pour ceux qui ne l'ont pas, télécharger "Notepad++". Il facilite la vie d'un informaticien dans beaucoup de domaine.

LE TUTORIEL
1) Télécharger et installer CMake, version 3.5.2 pour Windows (MSI).

2) Télécharger Android NDK. Décompresser le contenu dans "d:\Android\Android-ndk", de sorte que "ndk-build.cmd" soit dans "d:\Android\Android-ndk\ndk-build.cmd".
Nota : vous pouvez le décompresser où vous le souhaitez, cependant, n'oubliez pas de modifier les données correspondantes dans ce tutoriel.

3) Télécharger et installer MinGW. Cochez le plus de d'éléments possibles.
Nom : MinGW.jpg
Affichages : 939
Taille : 130,9 Ko

4) Installer les Sources de Qt à l'aide de l'outil de maintenance de Qt (C:\Qt\MaintenanceTool.exe) :
a. Sélectionner "Add or remove components" puis "Next".
b. Dans l'arborescence, cocher "Sources" dans "Qt" - "Qt 5.7".
c. Cliquer sur "Next".
d. Une fois l'installation terminée, quitter l'outil de maintenance.
Nom : Qt-maintenance.jpg
Affichages : 831
Taille : 51,3 Ko

5) Lancer MSYS (C:\MinGW\msys\1.0\msys.bat).
Nom : MSYS.jpg
Affichages : 798
Taille : 19,8 Ko

6) Copier-coller ceci dans la console pour récupérer et installer Wget :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
/c/mingw/bin/mingw-get install msys-wget-bin
7) Création du répertoire de travail, puis y aller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
mkdir /d/Projects/AndroidMySQL
cd /d/Projects/AndroidMySQL
8) Récupération et extraction de MariaDB :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
wget https://downloads.mariadb.org/interstitial/connector-c-3.0.0/mariadb-connector-c-3.0.0-alpha-src.tar.gz --no-check-certificate
tar -xzvf mariadb-connector-c-3.0.0-alpha-src.tar.gz
9) Récupération et extraction de LibIconv :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz --no-check-certificate
tar -xvzf libiconv-1.14.tar.gz
10) Récupération et extraction de OpenSSL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
wget -c http://www.openssl.org/source/openssl-1.0.1h.tar.gz --no-check-certificate
tar -xvzf openssl-1.0.1h.tar.gz
11) Mise en place des variables globales :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export PATH="$PATH:/c/mingw/bin:/c/Program Files (x86)/CMake/bin"
export ANDROID_NDK_ROOT=/d/Android/Android-ndk
export SR="$ANDROID_NDK_ROOT"/platforms/android-19/arch-arm/usr
export BR="$ANDROID_NDK_ROOT"/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-
export CPP="$BR"cpp
export AR="$BR"ar
export STRIP="$BR"strip
export RANLIB="$BR"ranlib
export LINKER="$BR"ld
export OBJDUMP="$BR"objdump
export CC="$BR"gcc
export CFLAGS="--sysroot=$SR"
export CPPFLAGS="$CFLAGS"
export C_INCLUDE_PATH=$SR/include
export ANDROID_DEV=$SR/usr
export MAKEDEPPROG="$CC -M"
12) Préparation de Iconv :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
cd libiconv-1.14
./configure --host=arm --prefix=$SR/usr --with-sysroot=$SR
make
make install
13) Préparation d'OpenSSL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
cd ../openssl-1.0.1h
CC="$CC -march=armv7-a -mfloat-abi=softfp"
./Configure android-armv7 --prefix=$SR/usr no-asm
make
make install
make install_sw
14) Modifier "D:\Projects\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\unittest\libmariadb\thread.c" :
Remplacer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
pthread_mutex_t LOCK_test;
Par:
Et remplacer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
pthread_t threads[THREAD_NUM];
Par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
void * threads[THREAD_NUM];
15) Modifier "D:\Projects\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\libmariadb\CMakeLists.txt" :
Remplacer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
Par :
16) Modifier "D:\Projects\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\libmariadb\mf_pack.c" :
Remplacer :
Par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#if defined(HAVE_GETPWNAM) && defined(HAVE_GETPWENT)
17) Modifier "D:\Projects\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\include\my_global.h" :
Ajouter après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
#ifndef _global_h
#define _global_h
Ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
#ifndef ushort
#define ushort uint16
#endif
18) Préparation et assemblage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
cd ../mariadb-connector-c-3.0.0-alpha-src
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_AR="$BR"ar.exe -DCMAKE_C_COMPILER="$BR"gcc.exe -DCMAKE_C_FLAGS=--sysroot=$SR -DCMAKE_LINKER="$BR"ld.exe -DCMAKE_RANLIB="$BR"ranlib.exe -DCMAKE_STRIP="$BR"strip.exe -DCMAKE_SYSTEM_NAME=Linux -DICONV_INCLUDE_DIR="$SR/usr/include" -DICONV_LIBRARIES="$SR/usr/lib/libiconv.a" -DOPENSSL_ROOT_DIR="$SR/usr/lib" -DOPENSSL_ROOT_DIR="../openssl-1.0.1h" ../
19) Faire un 1er :
20) La compilation va s'arrêter avec une erreur à 54%, faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
cp libmariadb/libmariadbclient.a libmariadb/libmysqlclient.a
cp libmariadb/libmariadbclient.a libmariadb/libmysqlclient_r.a
make
21) La compilation va de nouveau s'arrêter à 56%, faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
cp libmariadb/libmariadb.so libmariadb/libmysqlclient.so
cp libmariadb/libmariadb.so libmariadb/libmysqlclient_r.so
make
22) Définir et copier vers le Android NDK :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
make install
mkdir "$SR/usr/lib/mariadb"
mkdir "$SR/usr/include/mariadb/"
cp libmariadb/*.{a,so} "$SR/usr/lib/mariadb/"
cp ../include/* "$SR/usr/include/mariadb/"
23) Copier les fichiers suivants dans "D:\Android\Android-ndk\platforms\android-19\arch-arm\usr\usr\lib\mariadb" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
"D:\Projects\AndroidMySQL\openssl-1.0.1h\libssl.a"
"D:\Projects\AndroidMySQL\openssl-1.0.1h\libcrypto.a"
"D:\Projects\AndroidMySQL\libiconv-1.14\lib\.libs\libiconv.a"
24) Copier "libmariadb.so.so" présent dans "D:\Projects\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\build\libmariadb" dans le répertoire "android\libs\armeabi-v7a" de votre projet Qt.

25) Ajouter à votre ".pro" de votre projet Qt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
android {
    LIBS += -L$$PWD/android/libs/armeabi-v7a
    ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
}
26) Compilation du plugin MySQL Android pour Qt :
a. Ouvrir "c:\Qt\5.7\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro" dans QtCreator.
b. Dans "Projets", ajouter le kit "Android for armeabi-v7a".
c. Décocher "Shadow Build".
d. Mettre le projet en "Release".
e. Dans "Étapes de compilation" - "qmake", cliquer sur "Détails".
f. Dans "Arguments supplémentaires", mettre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"INCLUDEPATH+=d:/Android/Android-ndk/platforms/android-19/arch-arm/usr/usr/include/mariadb" "LIBS+=-Ld:/Android/Android-ndk/platforms/android-19/arch-arm/usr/usr/lib/mariadb -lmariadbclient -lssl -lcrypto -liconv" -o Makefile
g. Faire "Nettoyer", "Exécuter qmake" puis "Compilation".
Nom : QtMySQL.jpg
Affichages : 955
Taille : 92,8 Ko

27) Installation du plugin MySQL Android pour Qt :
Copier le fichier "libqsqlmysql.so" créé dans "C:\Qt\5.7\Src\qtbase\plugins\sqldrivers" vers "C:\Qt\5.7\android_armv7\plugins\sqldrivers".

28) Pour utiliser le MySQL en QML :
a. Télécharger "QmlSql" de JosephMillsAtWork.
b. Ouvrir "QmlSql.pro" dans QtCreator.
c. Dans "Projets", ajouter le kit "Android for armeabi-v7a".
d. Décocher "Shadow Build".
e. Mettre le projet en "Release".
f. Faire "Nettoyer", "Exécuter qmake" puis "Compilation".
g. Copier "libQmlSql.so" et "qmldir" présents dans "(Répertoire contenant le projet QmlSQL)\android-build\libs\armeabi-v7a" vers "C:\Qt\5.7\android_armv7\qml\QmlSql".

29) BRAVO ! Vous avez réussi !
Nom : win.jpg
Affichages : 975
Taille : 6,7 Ko

Vous l'aurez compris, je me permets de mettre ce tutoriel en ligne car il n'est pas facile de compiler un plugin Android depuis Windows (contrairement à ce que certaines personnes indiquent). En effet, je ne suis pas un professionnel : j'ai dû analyser, comprendre, rechercher pour que le processus fonctionne jusqu'à la fin. Les autres tutoriels déjà présents sur le Web ne fonctionnent pas correctement, il y a toujours un problème. Ma recherche d'une solution fonctionnelle m'a prit plusieurs jours...

Bon courage et merci pour cette lecture.

Bien cordialement.