使用Android Studio和Gradle Experimental在NDK中构建libxml2



我的Android项目已经使用Eclipse和ADT进行了几年。该项目使用了3个预编译的静态库(curl、ssl和crypto),然后在中编译并静态链接libxml2

LOCAL_MODULE    := my_shim
LOCAL_SRC_FILES := $(LOCAL_FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_CFLAGS := -DCURL_DISABLE_TYPECHECK
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lz
LOCAL_SHARED_LIBRARIES :=
LOCAL_STATIC_LIBRARIES += xml2 curl ssl crypto
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../c_module
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../libxml2/include
include $(BUILD_SHARED_LIBRARY)
include $(APP_LOCAL_PATH)/../../libxml2/Android.mk

我现在正在使用Gradle Experimental切换到Android Studio 2,但我在正确配置Gradle时遇到了问题。我想我已经设法整理了log和z的依赖关系,以及静态编译的curl、ssl和crypto库,但我不知道如何告诉它构建并静态链接libxml2模块。

有线索吗?这就是我目前所拥有的:

model {
    android {
        ...
    }
    android.ndk {
        moduleName "my_shim"
        platformVersion 19
        abiFilters.addAll(["armeabi", "x86"])
        CFlags.add("-DCURL_DISABLE_TYPECHECK")
        ldLibs.addAll(["log", "z"])
        stl "stlport_static"
    }
    android.sources {
        main {
            jni {
                dependencies {
                    library "crypto" linkage "static"
                    library "curl" linkage "static"
                    library "ssl" linkage "static"
                    library "xml2" linkage "static"
                }
            }
        }
    }
    repositories {
        libs(PrebuiltLibraries) {
            crypto {
                binaries.withType(StaticLibraryBinary) {
                    def cryptoLibPath = "src/main/jni/includes/${targetPlatform.getName()}/libcrypto.a"
                    staticLibraryFile = file("${cryptoLibPath}")
                }
            }
        }
        libs(PrebuiltLibraries) {
            curl {
                binaries.withType(StaticLibraryBinary) {
                    def curlLibPath = "src/main/jni/includes/${targetPlatform.getName()}/libcurl.a"
                    staticLibraryFile = file("${curlLibPath}")
                }
            }
        }
        libs(PrebuiltLibraries) {
            ssl {
                binaries.withType(StaticLibraryBinary) {
                    def sslLibPath = "src/main/jni/includes/${targetPlatform.getName()}/libssl.a"
                    staticLibraryFile = file("${sslLibPath}")
                }
            }
        }
    }
}

我认为有两种方法。

  1. 手动预构建libxml2,并将其与其他预构建库放在一起。

  2. 制作一个依赖项(和xml2库的单独项目)这里描述了

最新更新