2013-07-10 4 views
0

Я пытаюсь включить общую библиотеку через систему сборки 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, но его нет. Итак, где моя вода библиотека? И почему у меня нет ошибок при компиляции?

+0

Пробный 'make md5b'? –

+0

Да. Появляются в out/target/product/generic/system/lib /. Но в эмуляторном изображении все еще нет. И я думал, что он должен быть скомпилирован в сборке Android. Что я недопонимаю? – Andrew

ответ

0

Решено.

В файле Android.mk произошел сбой в разделе LOCAL_MODULE. Модуль следует называть с помощью lib * preffix:

lib<module name>