0

我试图通过 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.cppmd5.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 中,但它不存在。那么我的水库在哪里?为什么我在编译时没有任何错误?

4

1 回答 1

0

解决了。

Android.mk 文件中名为 LOCAL_MODULE 的部分中存在错误。模块应以 lib* 前缀命名:

lib<module name>
于 2013-07-11T12:13:09.790 回答