我试图通过android构建系统包含一个共享库。它命名为“ libmd5b ”。我已经在NDK中检查了这个库并且它运行良好。但是当我构建了android时,我发现我的库不在/ system / lib中,也没有在其他地方。我的行动一步一步:
1)将资源放入($ AndroidSourceFolder)/ external / 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)/ build / target / product / 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中,但它不在那里。那么我的 water 库在哪里?为什么编译时我没有遇到任何错误?
答案 0 :(得分:0)
解决。
Android.mk文件中名为LOCAL_MODULE的部分出错。模块应使用lib * preffix:
命名lib<module name>