1

私のAndroidプロジェクトは、EclipseとADTを使用して2、3年続いています。プロジェクトがコンパイルされ、静的にlibxml2のリンク後、3つのプリコンパイル静的ライブラリ(カール、SSL、および暗号化)を利用して、Android.mkから関連する行は以下の通りです。私は今のAndroidへの切り替えてるAndroid StudioとGradleでlibxml2をNDKに構築する実験的

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 

Studio 2ではGradle Experimentalを使用していましたが、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

を説明していますあなたは** **ハロー-libsのでGoogleからのサンプルを見たことがありますか? https://github.com/googlesamples/android-ndk/tree/master/hello-libs。彼らはこの設定をうまく説明しています。 –

+0

ありがとう@IgorGanapolsky - そのプロジェクトは確かに私が見た他のものよりも多くの例を提供します。 –

答えて

1

私は思っています。

  1. 手動でlibxml2をプレビルドし、他の事前ビルドされたライブラリと一緒に配置します。

  2. 依存(およびXML2ライブラリの別のプロジェクトを)作ることがhere

+0

なぜxml2は別のプロジェクトになる必要がありますか?私はすべてのOPが望んでいると思うのは、彼のメインプロジェクトに含まれる静的なライブラリです。 –

+0

私は間違いなくそれのために別のプロジェクトを望んでいませんが、私はそれを働かせるために事前構築されたルートを下った。私はGoogleのアンドロイド-ndkサンプル(@IgorGanapolskyで言及されている)を見て、私が望んでいたきれいなソリューションを手に入れることができるかどうかを見ていきます。乾杯。 –

+0

イゴール、私は2つの方法を提案しました。 Darrenはこれらの**ライブラリ**をどこかで入手する必要があります。そして 'hello-libs'はそれらの1つを提供します。しかし、時にはネイティブライブラリ*をオンザフライで再構築する必要があります。だから私は個人的にあなたのメッセージのポイントを得ることができませんでした。 – user1056837

関連する問題