2016-04-08 21 views
0

NDKの依存関係が非常に乱雑なアンドロイドプロジェクトを継承し、gradleを正しくリンクして、すべての.soと.aファイルをapk 。NDKモジュールは最終APKに含まれていません

プロジェクトは、いくつかのアクティビティを設定し、C + +からビルドされた大規模なNDKライブラリを呼び出すJavaコードで構成されています。

私はそれを最新のgradle実験プラグインでビルドすることができましたが、何らかの理由で私のモジュールがapkに含まれていませんでしたが、私の3rdパーティの.soファイルは、モジュールをビルドディレクトリに置いた.soファイルに置き換えます。

私のbuild.gradleは以下のようになります。なぜGradleのビルド/ libsに/ xMと/共有/ armeabiにそれを置き、私のモジュール(libXM.so)を構築ん:だから、私の質問を総括する

apply plugin: 'com.android.model.application' 
model { 
    android { 
     compileSdkVersion = 23 
     buildToolsVersion = "22.0.1" 
     defaultConfig.with { 
      applicationId = "<removed>" 
      minSdkVersion.apiLevel = 7 
      targetSdkVersion.apiLevel = 23 
      versionCode = 1 
      versionName = "1.0" 
     } 
     ndk { 
      moduleName = "XM" 
      CFlags.add("-I${file("src/main/jni")}".toString()) 
      cppFlags.addAll(["-I${file("../../3rd_part/android/osg")}".toString()]) 
      cppFlags.addAll(["-I${file("../../3rd_part/android/opus")}".toString()]) 
      ldFlags.add("-L${file("src/main/jniLibs/armeabi-v7a")}".toString()) 
      ldLibs.addAll(["osgdb_jpeg", "osgdb_freetype", "jpeg","argsub_es", "jnigraphics", "android", "log"]) 
      stl = "gnustl_shared" 
      abiFilters.add("armeabi-v7a") 
     } 

     sources { 
      main { 
       jni { 
        source { 
         srcDir "../../core" 
         srcDir "src/main/jni" 
        } 
       } 

      } 
     } 
     lintOptions.abortOnError = false 
    } 

    android.buildTypes { 
     release { 
      minifyEnabled = false 
      proguardFiles.add(file('proguard-rules.txt')) 
     } 
    } 

} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:support-v4:23.0.0' 
    compile 'com.android.support:appcompat-v7:23.0.0' 
    compile 'com.android.support:design:23.0.0' 
    compile 'com.wunderlist:sliding-layer:1.1.1' 

} 

-v7a/debug、ただし、最終apkファイルには含めないでください。

+0

ここで私の答えを確認してください:http://stackoverflow.com/a/33164947/3626214多分それはあなたに役立ちます – Aspicas

+0

libXM.soが含まれていないことをどのように知っているか説明できますか?ログにエラーがありますか?プロジェクトは実行され、その依存関係を見つけることができませんか? –

+0

APKファイルはちょうどzipなので、winrarを使ってファイルを展開してチェックしたところ、xmライブラリを読み込もうとするとアプリケーションが失敗します。 – monoceres

答えて

1

私はいくつかのことを取得していない:あなたはGradleので共有ライブラリを構築したい場合、あなたはあなたがアプリケーションを構築し、構築済みのライブラリを使用したい場合はapply plugin: 'com.android.model.library'なくアプリケーション

を使用する必要があり、

sources { 
     main { 
      jni { 
       source { 
        srcDir "../../core" 
        srcDir "src/main/jni" 
       } 
       dependencies{ 
        library "XM" linkage "shared" 
       } 

そして、もちろん、以前LDFLAGSを設定するには:あなたはこのような何かを記述する必要があります。

+0

私はgradleビルドシステムに慣れていないので、混乱しているかもしれません。私のプロジェクト全体は、アクティビティを含むアプリケーションであり、全体的にスタンドアロンのアプリケーションです。機能の大部分はC++(このC++はあらかじめビルドされたライブラリに依存しています)ですが、アプリケーションと一緒にコンパイルして使用したいものです。たぶん私は別のプロジェクトでC++を保つべきでしょうか? – monoceres

+0

はい、そうすべきです。 '' com.android.model.library''で別のプロジェクトを作成し、java-applicationからこのライブラリを最終apkに入れることができます。ここでヒント、gradleとgradle実験プラグインの使用方法を見つけることができます:http://stackoverflow.com/questions/36472561/android-ndk-unable-to-debug-native-code-with-two-gradle-plugins – user1056837

+0

java-project build.gradleでは 'dependencies {compile project( ':xm_lib')... 'を追加できます。最初にネイティブライブラリをビルドしてからアプリケーションに組み込みます – user1056837

関連する問題