Android构建系统。我的wa ..本地图书馆在哪里?

时间:2013-07-10 17:04:27

标签: android-ndk java-native-interface android-build

我试图通过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.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

就是这样。 'make'结束后,我找不到我的图书馆。它应该在/ system / lib中,但它不在那里。那么我的 water 库在哪里?为什么编译时我没有遇到任何错误?

1 个答案:

答案 0 :(得分:0)

解决。

Android.mk文件中名为LOCAL_MODULE的部分出错。模块应使用lib * preffix:

命名
lib<module name>