Articles of 共享库

Android NDK:使用libtool库

使用autotools创建以下库: Makefile.am: lib_LTLIBRARIES = libandi.la libandi_la_SOURCES = $(SMILE_SOURCES) libandi_la_CPPFLAGS = $(SMILE_CPPFLAGS) libandi_la_LIBADD = $(SMILE_LIBS) libandi_la_LDFLAGS = -no-undefined /////////////////////////////////////////////////////////////////////////// /////////This will be gone since I want to use libandi in android project /////////////////////////////////////////////////////////////////////////// bin_PROGRAMS = AndiExtract AndiExtract_SOURCES = src/AndiExtract.cpp AndiExtract_CPPFLAGS = $(Andi_CPPFLAGS) AndiExtract_LDADD = $(Andi_LIBS) -libandi –>I need this linker in android ////////////////////////// /////////////////////////////////////////////////////////////////////////// 我可以用android ndk编译它,所以这不是问题。 […]

如何在本机活动中使用共享库

我有一个带有原生活动的Android项目。 此本机活动使用名为“main”(libmain.so文件)的共享库进行启动。 (使用ndk / samples / native-activity的代码) 这个程序工作正常。 “main”模块Android.mk文件: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main LOCAL_SRC_FILES := main.cpp LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM LOCAL_STATIC_LIBRARIES := android_native_app_glue game include $(BUILD_SHARED_LIBRARY) $(call import-module,android/native_app_glue) 现在我想添加“main”库使用的另一个共享库(例如游戏引擎)。 我已经构建了一个“游戏”模块(libgame.so)。 但当我将“主要”与“游戏”联系起来时,就像这样: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main LOCAL_SRC_FILES := main.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../game LOCAL_LDLIBS := […]

自编译的dalvik不会加载共享库

我正在尝试在AWS上的VM上运行一些Android代码。 我从源代码编译Android,当我尝试在dalvik vm中显式加载库(使用System.load)时,我看到以下日志: android_update_LD_LIBRARY_PATH not found; .so dependencies will not work! 生成此错误的类: public class Server { private static final int port = 8080; public static void main(String[] args) throws Exception { System.load(“libandroid_runtime.so”); WebServer webServer = new WebServer(port); XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer(); PropertyHandlerMapping phm = new PropertyHandlerMapping(); phm.addHandler(“ImgCat”, ImgCat.class); xmlRpcServer.setHandlerMapping(phm); XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig(); serverConfig.setEnabledForExtensions(true); […]

Android – 如何避免多次部署相同的.jar

我的问题如下:我需要开发几个部署为不同APK的Android应用程序。 每个应用程序都需要一组第三方jar。 我想只将这些文件部署一次。 到目前为止我发现的所有方法都要求如果我开发了5个不同的应用程序(每个应用程序在一个不同的APK中),那么10个共享的第三方jar子将被部署5次。 这对我来说当然不好,怎么可以避免呢? 感谢和问候 文森佐

如何将我的.so库复制到Android设备?

总结一行:不是我的所有libs/armeabi/*.so当我运行我的应用程序时libs/armeabi/*.so文件被复制到设备。 我会试着解释一下。 目录结构 我正在尝试将ffmpeg添加到Android上,因此NDK具有以下结构: jni ├── Android.mk ├── bambuser_ffmpeg │ ├── Android.mk │ ├── libavcodec.so │ ├── libavcore.so │ ├── libavdevice.so │ ├── libavfilter.so │ ├── libavformat.so │ ├── libavutil.so │ └── libswscale.so └── video ├── Android.mk ├── at_ac_univie_gameclient_video_VideoGLSurfaceView.c ├── at_ac_univie_gameclient_video_VideoGLSurfaceView.h └── at_ac_univie_gameclient_video_VideoGLSurfaceView_GLRenderer.h Android.mk文件 bambuser_ffmpeg的Android.mk文件说: include $(CLEAR_VARS) LOCAL_MODULE := bambuser-libavcodec LOCAL_SRC_FILES := libavcodec.so include $(PREBUILT_SHARED_LIBRARY) […]

无法链接libstlport_shared,即使它存在……?

我准备开始在这里开始撞墙了。 我已经阅读了关于这个问题我可以find的所有SO线程,阅读每个谷歌搜索结果的问题并且找不到蹲下。 我正在构建一个Android应用程序,我用C ++编写了一个2D引擎,我正在使用与NDK r6b共享版本的stlport。 生成libstlport_shared的.so文件并成功复制到我的libs文件夹。 我甚至在设备上使用adb shell进行了检查,并正确复制了.so文件。 我尝试了各种解决方案,例如修改我的.mk文件以显式声明libstlport_shared.so作为必需模块。 在编译期间,一切都很顺利,它显示在APK中,它成功复制到设备。 但我得到这个错误: 09-17 17:35:26.450: DEBUG/dalvikvm(19277): Trying to load lib /data/data/ca.ascensionsystems.mypackagename/lib/libstlport_shared.so 0x476c6f30 09-17 17:35:26.450: INFO/dalvikvm(19277): Unable to dlopen(/data/data/ca.ascensionsystems.mypackagename/lib/libstlport_shared.so): Cannot load library: link_image[1995]: failed to link libstlport_shared.so 09-17 17:35:26.450: WARN/dalvikvm(19277): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lca/ascensionsystems/mypackagename/Ascengine;. 09-17 17:35:26.450: WARN/dalvikvm(19277): threadid=8: thread exiting with uncaught exception (group=0x40025a70) 09-17 17:35:26.470: VERBOSE/WindowManager(4837): […]

如何强制Android Studio使用更新的NDK库进行构建,而无需清理和构建整个项目?

如何使用更新的NDK共享库(.so)文件强制Android Studio构建我的应用程序,而无需先清理整个项目? Android Studio必须有一些机制可以检测到共享库已更新并使用最新的库。 如果我做一个Build-> Clean Project然后做一个Run-> Run’app’它会使用新版本的库,但是它也需要做很多不必要的工作,因为没有java来源已经改变。 即使是Run-> Clean和Rerun’app’也不会使用新库。(!!!)

创建包含外部(Native或Java)包的Android库包

我开发了一个计算机视觉算法的应用程序,它使用像OpenCV这样的Native C++库来捕获相机帧并进行image processing。 我的整个实现驻留在一个通过活动调用的本机函数中。 让我们说: public native int MYMETHOD(int width, int height,int[] rgba); 我也像这样加载我的库: static { System.loadLibrary(“MYNativeLIB”); } 现在我的问题是如何将我的应用程序部署为库包。 我可以共享的东西,客户可以将其导入到他们的项目而无需安装任何其他库,如OpenCV 。 我需要构建一个.so包吗? 我读过这篇文章。 但我不知道如何链接OpenCV库。 感谢您的帮助。

Dalvik正在寻找扩展名为“.0”的.so文件 – 为什么?

我已经开始开发一个非常简单的Android应用程序,它包含三个部分: Java应用程序本身 一个预建的共享库(我们称之为libfoo ) 另一个使用预构建库的共享库(我们称之为libfoowrapper ) 文件系统看起来像这样: jni Android.mk libfoo.so foowrapper.c Android.mk文件包含以下内容: LOCAL_PATH := $(call my-dir) #============================== include $(CLEAR_VARS) LOCAL_MODULE := foo-prebuilt LOCAL_SRC_FILES := libfoo.so include $(PREBUILT_SHARED_LIBRARY) #========================= include $(CLEAR_VARS) LOCAL_MODULE := foowrapper LOCAL_SRC_FILES := foowrapper.c LOCAL_SHARED_LIBRARIES := foo-prebuilt include $(BUILD_SHARED_LIBRARY) 当我在Eclipse中构建应用程序时,事情似乎工作正常 – 没有报告错误。 但是,当我将应用程序上传到我的Samsung Discover(运行Android 4.0.4)时,我在日志中收到以下错误: 03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load […]

如何在apk中使用eclipse包含预构建的共享库

我有一个共享库libfoo.so,需要在我的Android应用程序中使用它。 我的第一次尝试是在Android.mk中: include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := test.cpp LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo include $(BUILD_SHARED_LIBRARY) 在我的活动中,我有: statis { System.loadLibrary(“foo”); } 这构建正确,但我注意到创建的apk不包括libfoo.so(我也看到它没有复制到libs / armeabi)。 我想因为这个原因我在执行我的应用程序时遇到了UnsatisfiedLinkError。 我在其他一些post中看到我需要添加$(PREBUILD_SHARED_LIBRARY),所以我将以下内容添加到我的Android.mk中: include $(CLEAR_VARS) LOCAL_MODULE:= foo LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so include $(PREBUILD_SHARED_LIBRARY) 但现在我收到了构建错误: foo: LOCAL_SRC_FILES points to a missing file. 我确信路径是正确的。 请注意,libfoo.so原本是最终的版本号,但我必须删除它(并且只留下.so),因为ndk-build抱怨。 我究竟做错了什么?