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. Comprendre l'utilisation de ColorMatrix et ColorMatrixColorFilter pour modifier la teinte d'un Drawable
  7. Bibliothèque AppCompat 23.2.1 ne fonctionne pas avec espresso v2.2.2
  8. Mediaplayer répond au deuxième clic pour faire une pause
  9. Impossible de configurer SDK: Erreur: Module 'application': plate-forme 'Google Inc.: API Google: 21' introuvable
  10. Android Java JNI et C Char array Ne peut pas reconnaître la valeur
  11. Comment cacher un dossier dans sdcard dans Android
  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.

  • TabLayout avec viewpager pas de défilement en douceur
  • Récupérer un ListView w / AsyncTask
  • L'équivalent de Java de
  • Android + Robolectric - RuntimeException / InstantiationException dans queryBuilder.query () dans ContentProvider
  • Les délais de livraison de msg GCM sont WILDLY erratic
  • La meilleure façon de mettre à jour les données avec un adaptateur RecyclerView
  • 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.