Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to include prebuilt shared libraries in apk with eclipse

I have a shared library libfoo.so and need to use it in my android app.

My first try was to have in Android.mk:

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo
include $(BUILD_SHARED_LIBRARY)

in my activity, I have:

statis
{
    System.loadLibrary("foo");
}

This builds correctly, however I noticed that created apk doesnt include libfoo.so (also I see it is not copied to libs/armeabi). I guess for that reason I have UnsatisfiedLinkError when executing my app.

I saw in some other posts that I need to add $(PREBUILD_SHARED_LIBRARY), so I add the following to my Android.mk:

include $(CLEAR_VARS)
LOCAL_MODULE:= foo
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
include $(PREBUILD_SHARED_LIBRARY)

But now I am getting the build error:

foo: LOCAL_SRC_FILES points to a missing file.

I am sure that the path is correct. Note that the libfoo.so was having origionally the version number at the end, though I had to remove it (and leave only .so) since ndk-build complained.

What am I doing wrong?

like image 708
Sasha Nikolic Avatar asked Oct 28 '11 09:10

Sasha Nikolic


3 Answers

The include appears to be misspelt:

include $(PREBUILD_SHARED_LIBRARY)

should be

include $(PREBUILT_SHARED_LIBRARY)
like image 84
Jellyjoey Avatar answered Oct 18 '22 08:10

Jellyjoey


Found the solution!! LOCAL_SRC_FILES can not have absolute or relative paths, just the filename. The path must be set in LOCAL_PATH.

So in my case, instead of:

LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so

I have now:

LOCAL_PATH := $(FOO_PATH)
LOCAL_SRC_FILES := libfoo.so

And this works ok.

like image 36
Sasha Nikolic Avatar answered Oct 18 '22 07:10

Sasha Nikolic


In eclipse, i add a static library by copying the file in the path project/libs/armeabi/ and rebuild the project after cleaning it. This includes the .so in the apk.

like image 32
Deepak Avatar answered Oct 18 '22 08:10

Deepak