Android 如何仅在编译时使用.so库?

Android 如何仅在编译时使用.so库?,android,android-ndk,Android,Android Ndk,我有一个第三方。所以我只需要在编译时在我的应用程序中使用它。图书馆的提供者说:- 注意:不要将library.so作为代理APK的一部分。仅用于编译目的 我在我的构建中有这个。gradle:- task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') { def ndkDir = project.android.ndkDirectory.absolutePath project.l

我有一个第三方
。所以我只需要在编译时在我的应用程序中使用它。图书馆的提供者说:-

注意:不要将library.so作为代理APK的一部分。仅用于编译目的

我在我的
构建中有这个。gradle
:-

    task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
       def ndkDir = project.android.ndkDirectory.absolutePath
       project.logger.debug('my debug message')
       if (ndkDir == null) {
             ndkDir = "/usr/local/bin"
        }
       commandLine "$ndkDir/ndk-build",
            '-C', file('src/main').absolutePath, // Change src/main/jni the relative path to your jni source
            '-j', Runtime.runtime.availableProcessors(),
            'all',
            'NDK_DEBUG=1'
      }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }
Android.mk
文件如下所示:-

    LOCAL_PATH:= $(call my-dir)
    LOCAL_C_INCLUDES:= $(LOCAL_PATH)
    include $(CLEAR_VARS)
    LOCAL_C_INCLUDES:= $(LOCAL_PATH)
    LOCAL_MODULE:= mymodulename
    LOCAL_STL := c++_static
    LOCAL_CPPFLAGS := -std=c++11
    LOCAL_LDLIBS := -ldl -llog
    LOCAL_LDLIBS += -fuse-ld=bfd
    LOCAL_LDLIBS += -lz
    LOCAL_LDLIBS += -ljnigraphics
    LOCAL_LDLIBS += -landroid
    LOCAL_LDLIBS +:= -Lmylibrary.so <-------THIS IS THE THIRD PARTY LIB
    LOCAL_LDFLAGS:= -Wl,--unresolved-symbols=ignore-all
    LOCAL_SRC_FILES:= mylocalfile_using_thecode_from_so_file.cpp
    include $(BUILD_SHARED_LIBRARY)
LOCAL\u路径:=$(调用我的目录)
本地_C_包括:=$(本地_路径)
包括$(清除变量)
本地_C_包括:=$(本地_路径)
本地模块:=mymodulename
本地\u STL:=c++\u静态
本地标志:=-std=c++11
本地低密度脂蛋白:=-ldl-llog
本地\u LDLIBS+=-保险丝ld=bfd
局部_LDLIBS+=-lz
局部_LDLIBS+=-ljnigraphics
本地_LDLIBS+=-landroid
LOCAL_LDLIBS+:=-lmylbrary.so
如何添加此库仅用于编译

在进行apk打包时,您可能试图排除该共享库。将下面的代码片段放入你的
应用程序/build.gradle
可以实现这一点:

android { 
    ...
    packagingOptions {
        exclude 'lib/x86/thefinalbuiltlibrary.so'
        exclude 'lib/x86_64/thefinalbuiltlibrary.so'
        exclude 'lib/armeabi-v7a/thefinalbuiltlibrary.so'
        exclude 'lib/arm64-v8a/thefinalbuiltlibrary.so'
    }
    ...
}

请参阅:

嗯。。。我想你需要多说一点关于发生了什么。你为什么需要图书馆?如果你不提供会怎么样?您正在忽略未定义的符号。。。是什么改变了这一切,使之成为必要?@G.BlakeMeike为上述问题添加了一个更新。这仍然没有多大意义<代码>\u ZNK7android8String164sizeEv
是android::String16`,它不是NDK API。如果您的应用程序未提供该功能,则表明您从系统中错误地加载了该功能,而这只适用于pre-N设备。如果它是由你的应用程序提供的,那么你根据哪个库生成并不重要,所以你应该只根据你发布的库生成。
LOCAL\LDFLAGS:=-Wl,--unresolved symbols=ignore all
此标志将生成错误转换为运行时错误。我建议把它去掉。