Compilation de la bibliothèque C pour Android

Comme preuve de concept, j'essaie de compiler et d'utiliser le pouvoir de cette bibliothèque pour une application Android. J'utilise le studio Android. Ce que j'ai fait jusqu'à présent était:

  1. NDK installé et SDK (je voudrais cibler la version Android 4.0.3 et plus si possible)
  2. Créé un projet Android dans Android Studio
  3. Créé le dossier JNI dans
  4. Stocké tous les contenus de la bibliothèque dans mon dossier JNI
  5. J'ai relié mon build.gradle au fichier Android.MK qui était présent dans les sources

  6. Quel constructeur doit-on appeler pour voir?
  7. Différentes mises en page de lignes dans ListView
  8. Jelly bean n'appelle pasPrepareOptionsMenu () lors de l'ouverture du menu pour la première fois
  9. Pourquoi la vue est-elle glissée avec ViewDragHelper réinitialisé à sa position d'origine sur la mise en page ()?
  10. Studio Android nombre maximum de lignes logcat
  11. Sélecteur de périphérique Android - l'appareil ne s'affiche pas
  12. externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } 
  13. Définissez ProductFlavors afin d'éviter d'essayer de créer une construction pour les architectures qui ne sont pas prises en charge par la bibliothèque (je pourrais peut-être déjà tort ici)

     productFlavors { dev { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } develx86 { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } production { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } productionx86 { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } } 
  14. À ce stade, j'ai remarqué que certains fichiers tels que cpu-mineur.c sont manquants, certains les mettant en évidence comme étant manquants, en particulier

     #include <curl/curl.h> #include <openssl/sha.h>` 

Je suis donc allé sur les sites Web officiels de ces deux bibliothèques et j'ai téléchargé les sources, j'ai créé deux dossiers correspondants et je place tous les fichiers là-bas. Dans OpenSSL il y avait un fichier h.in – une configuration telle que je comprends. J'ai pu obtenir une configuration à partir d' ici (peut-être aussi un endroit où j'ai fait une erreur)

  1. J'ai ajouté Application.mk à la racine du dossier JNI avec le contenu suivant APP_ABI:= armeabi armeabi-v7a x86 pour exclure certaines des architectures que je ne supporte pas.

À ce stade, j'ai quelques problèmes – l'un d'entre eux est que je ne peux pas réellement créer mes trucs JNI avec NDK-build – sched.h n'est pas résolu (même si sched.h version de l'API à 20). Cela entraîne des erreurs comme:

 JNI/cpu-miner.c:473:2: error: use of undeclared identifier 'cpu_set_t' cpu_set_t set; jni/cpu-miner.c:474:12: error: use of undeclared identifier 'set' CPU_ZERO(&set); 

Donc, les questions sont les suivantes:

  1. Comment puis-je forcer la compilation à résoudre sched.h ?
  2. Est-ce que mon approche était correcte avec le téléchargement et l'ajout des sources de bibliothèques manquantes ou s'il y avait une autre option? Je suppose qu'il y en a une parce qu'elles n'étaient pas incluses dans le code source de la bibliothèque? Si oui – quelqu'un pourrait-il fournir des instructions sur la façon de le faire avec NDK (ou peu importe ce que j'utilise pour cela?)
  3. Dès que je réparerai la compilation de la bibliothèque, il suffirait de générer l'interface java dans mes fichiers c et de commencer à les utiliser ou des étapes supplémentaires à prendre en considération?

    N'hésitez pas à demander des détails supplémentaires si vous en avez besoin, merci d'avance.
    Disclaimer: Je suis le développeur a.NET, alors soyez plus précis sur les choses d'Android / C s'il y a lieu.
    Disclaimer 2: Ce programme est conçu à des fins éducatives comme preuve de concept.

  • Comment puis-je INTERCEPTER un SMS entrant avec un texte spécifique
  • Android: streaming de la caméra en tant que mjpeg
  • Comment cacher le clavier doux sur Android après avoir cliqué à l'extérieur de EditText?
  • Décodage de chaîne utf-8
  • Comment annuler Toast créé dans une autre méthode sur Android?
  • Déterminer l'angle de vue de l'appareil photo du smartphone
  • 2 Solutions collect form web for “Compilation de la bibliothèque C pour Android”

    Il semble que cpu_set_t ne soit pas entré dans les en-têtes NDK jusqu'à android-21.

    NDK r14 (inédit, mais devrait être disponible la semaine prochaine) a complètement redéfini les en-têtes afin que vous ayez accès aux définitions et aux constantes de la structure (que les API dont vous aurez besoin seront disponibles avant que android-21 ne soit différent question). Pour les utiliser, prenez le b14 r14 et suivez les instructions pour les en-têtes unifiés .

    Essayez d'ajouter ceci avant que vous incluez <sched.h>

     #define _GNU_SOURCE 

    Dans le cas où cela ne fonctionnerait pas, ajoutez simplement la structure ci-dessous dans votre fichier cpu-miner.c :

     #define CPU_SETSIZE 1024 #define __NCPUBITS (8 * sizeof (unsigned long)) typedef struct { unsigned long __bits[CPU_SETSIZE / __NCPUBITS]; } cpu_set_t; 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.