我试图通过 android 构建系统包含一个共享库。它命名为“ libmd5b ”。我已经在 NDK 中检查了这个库,它运行良好。但是当我构建 android 时,我没有在 /system/lib 和其他地方找到我的库。有我的行动一步一步:
1)将源放入 ($AndroidSourceFolder)/external/libmd5b/jni
安卓.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)
应用程序.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
而已。在“制作”结束后,我找不到我的图书馆。它应该在 /system/lib 中,但它不存在。那么我的水库在哪里?为什么我在编译时没有任何错误?