Как доказательство концепции, я пытаюсь скомпилировать и использовать силу этой библиотеки для приложения для Android. Я использую студию Android. Что я сделал до сих пор:
- Установленные NDK и SDK (я хотел бы настроить целевую версию Android 4.0.3 и выше, если это возможно)
- Создал проект Android в Android Studio
- Создал папку JNI в
- Сохранено содержимое библиотеки в папке JNI
-
Связал мой build.gradle с файлом Android.MK, который присутствовал в источниках
externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } }
-
Установите ProductFlavors, чтобы не пытаться создать сборку для архитектур, которые не поддерживаются библиотекой (возможно, я уже здесь не ошибаюсь)
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' } }
-
На этом этапе я заметил, что некоторые файлы, такие как cpu-miner.c, отсутствуют, некоторые из них выделяют их как отсутствующие, в частности
#include <curl/curl.h> #include <openssl/sha.h>`
Итак, я пошел на официальные сайты этих двух библиотек и загрузил источники, создал две соответствующие папки и разместил там все файлы. В OpenSSL
был файл h.in - конфиг, как я понимаю. Я смог получить сконфигурированный из здесь (также может быть местом, где я допустил ошибку)
- Я добавил Application.mk в корневой каталог JNI со следующим содержимым
APP_ABI:= armeabi armeabi-v7a x86
, чтобы исключить некоторые из архитектур, которые я не поддерживаю.
В этот момент у меня есть некоторые проблемы - одна из них заключается в том, что я не могу фактически создать свой материал JNI с помощью NDK-build - sched.h
не будет разрешен (даже если я увеличу версию API до 20). Это приводит к ошибкам, например:
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);
Итак, вопросы:
- Как я могу заставить конструкцию разрешить
sched.h
? - Был ли мой подход корректным с загрузкой и добавлением источников отсутствующих библиотек или был какой-то другой вариант - я предполагаю, что это действительно так, потому что они не были включены в исходный код библиотеки? Если да - может ли кто-нибудь, пожалуйста, дать инструкции, как это сделать с NDK (или это не имеет значения, что я использую для этого?)
-
Как только я исправлю сборку библиотеки, этого будет достаточно, чтобы просто создать java-интерфейс для моих c файлов и начать использовать их или есть дополнительные шаги для рассмотрения?
Пожалуйста, не стесняйтесь спрашивать о каких-либо дополнительных деталях, если вам это требуется, спасибо заранее.
Отказ от ответственности: я разработчик .NET, поэтому, пожалуйста, будьте более конкретными в отношении приложений Android и C, где это применимо.
Отказ 2: эта программа делается для образовательных целей как доказательство концепции.