Я пытаюсь включить общую библиотеку через систему сборки Android. Он назвал «libmd5b». Я уже проверяю эту библиотеку в NDK, и она работает хорошо. Но когда я построил Android, я не нашел свою библиотеку не в/system/lib и ни в другом месте. Существует мои действия шаг за шагом:Система Android для Android. Где моя родная библиотека?
1) Помещенные источники в ($ AndroidSourceFolder)/внешний/libmd5b/JNI
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -fPIC
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib
LOCAL_MODULE := md5b
LOCAL_SRC_FILES := md5b.cpp md5.cpp # source files
LOCAL_MODULE_TAGS := optional
# C++ inclusions:
LOCAL_STATIC_LIBRARIES += libstlport_static
LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_STL:=stlport_static
APP_MODULES := md5b
md5b.cpp
#include <jni.h>
#include <string>
#include <iostream>
#include <fstream>
#include <android/log.h>
#include "md5.h"
using namespace std;
extern "C" {
//Original name changed because we building library system wide visible.
JNIEXPORT jstring JNICALL Md5B
(JNIEnv * env, jobject obj, jstring fpath);
};
JNIEXPORT jstring JNICALL Md5B
(JNIEnv * env, jobject obj, jstring fpath)
{
string strpath = env->GetStringUTFChars(fpath, NULL);
ifstream inFile;
inFile.open(strpath.c_str());
string line;
string strFile;
while (!inFile.eof())
{
getline(inFile, line);
strFile += line;
}
inFile.close();
string md5R = md5(strFile);
char* chmd5R = new char [md5R.length()];
strcpy (chmd5R, md5R.c_str());
return env->NewStringUTF(chmd5R);
}
И есть другие библиотечные файлы: md5.cpp и md5.h. Это файлы в чистом C++ без каких-либо jni-препаратов. Поэтому я думаю, что это не важно.
2) Следующий шаг меняется ($ AndroidSourceFolder)/строительство/цель/продукта/full.mk выглядеть следующим образом:
PRODUCT_PACKAGES := \
Camera \
libmd5b
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/board/generic/device.mk)
# Overrides
PRODUCT_NAME := full
PRODUCT_DEVICE := generic
PRODUCT_BRAND := Android
PRODUCT_MODEL := Full Android on Emulator
3) После всего этого я запуская его компилировать:
$source build/envsetup.sh
$lunch full-eng
$make
4) Создание libmd5b:
make md5b
<build information>
Install: out/target/product/generic/system/lib/md5b.so
Всё. После окончания «make» я не смог найти свою библиотеку. Он должен быть в/system/lib, но его нет. Итак, где моя
вода
библиотека? И почему у меня нет ошибок при компиляции?
Пробный 'make md5b'? –
Да. Появляются в out/target/product/generic/system/lib /. Но в эмуляторном изображении все еще нет. И я думал, что он должен быть скомпилирован в сборке Android. Что я недопонимаю? – Andrew