2016-10-13 4 views
1

Androidスタジオ(https://github.com/DrKLO/Telegram)でテレグラムソースコードを作成しようとすると問題が発生します。gradleをネイティブライブラリにリンクする

NDK、CMake、LLDBをインストールしました。 しかし、私はこのエラーを得た: "Gradleの同期に失敗しました:メソッドexternalNativeBuildを見つけることができませんでした()" ここ

は私のbuild.gradleです:

apply plugin: 'com.android.application' 

repositories { 
    mavenCentral() 
} 

configurations { 
    compile.exclude module: 'support-v4' 
} 

dependencies { 
    compile 'com.google.android.gms:play-services-gcm:9.6.1' 
    compile 'com.google.android.gms:play-services-maps:9.6.1' 
    compile 'com.google.android.gms:play-services-vision:9.6.1' 
    compile 'com.android.support:support-core-ui:24.2.1' 
    compile 'com.android.support:support-compat:24.2.1' 
    compile 'com.android.support:support-core-utils:24.2.1' 
    compile 'net.hockeyapp.android:HockeySDK:4.0.1' 
    compile 'com.googlecode.mp4parser:isoparser:1.0.6' 
} 

android { 
    compileSdkVersion 24 
    buildToolsVersion '24.0.2' 

    useLibrary 'org.apache.http.legacy' 
    defaultConfig.applicationId = "org.telegram.messenger" 

    sourceSets.main.jniLibs.srcDirs = ['./jni/'] 

    externalNativeBuild { 
     ndkBuild { 
      path "/jni/Android.mk" 
     } 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 

    signingConfigs { 
     debug { 
      storeFile file("config/release.keystore") 
      storePassword RELEASE_STORE_PASSWORD 
      keyAlias RELEASE_KEY_ALIAS 
      keyPassword RELEASE_KEY_PASSWORD 

     } 

     release { 
      storeFile file("config/release.keystore") 
      storePassword RELEASE_STORE_PASSWORD 
      keyAlias RELEASE_KEY_ALIAS 
      keyPassword RELEASE_KEY_PASSWORD 

     } 
    } 

    buildTypes { 
     debug { 
      debuggable true 
      jniDebuggable true 
      signingConfig signingConfigs.debug 
      applicationIdSuffix ".beta" 
     } 

     release { 
      debuggable false 
      jniDebuggable false 
      signingConfig signingConfigs.release 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 

     foss { 
      debuggable false 
      jniDebuggable false 
      signingConfig signingConfigs.release 
     } 
    } 

    defaultConfig.versionCode = 851 

    sourceSets.debug { 
     manifest.srcFile 'config/debug/AndroidManifest.xml' 
    } 

    sourceSets.release { 
     manifest.srcFile 'config/release/AndroidManifest.xml' 
    } 

    sourceSets.foss { 
     manifest.srcFile 'config/foss/AndroidManifest.xml' 
    } 

    productFlavors { 
     x86 { 
      ndk { 
       abiFilter "x86" 
      } 
      versionCode = 2 
     } 
     armv7 { 
      ndk { 
       abiFilter "armeabi-v7a" 
      } 
      versionCode = 1 
     } 
     fat { 
      versionCode = 3 
     } 
    } 

    applicationVariants.all { variant -> 
     def abiVersion = variant.productFlavors.get(0).versionCode 
     variant.mergedFlavor.versionCode = defaultConfig.versionCode * 10 + abiVersion; 
    } 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 24 
     versionName "3.13.1" 

     externalNativeBuild { ndkBuild { 
       arguments "NDK_APPLICATION_MK:=jni/Application.mk", "APP_PLATFORM:=android-14" 
       abiFilters "armeabi-v7a", "x86" 
      } 
     } 
    } 
} 

apply plugin: 'com.google.gms.google-services' 

Gradleのは、C++ライブラリの存在にリンクされていないようですまだ。 しかし、Android.mkが存在するために手動でGradleをリンクする方法がわかりませんでした。 アイデア 私を助けてください。非常に感謝します!

答えて

0

いくつかの推測:

  • あなたはNDK-R12またはNDK-R13を(あなたのlocal.propertiesファイルを確認してください)を使用していることを確認してください。 ndkのバージョンを変更した後、rm -fr TMessagesProj/.externalNativeBuild [これは現在のアンドロイドスタジオに必要です]
  • グラデルとネイティブコード間の唯一の接続は、既に存在するトップレベルのAndroid.mkです。 'jni/Android.mk' [$ project/build.gradleファイルへの相対パスである必要があります。
  • おそらく、あなたのbuild.gradleのjniLibs.srcDirs行は不要です。あなたが他の目的を持っていない限り、共有ライブラリは自動的にAPKにパックされます。ビルドされたネイティブライブラリは保存されません。

私はcmakeをインストールしましたが、それは重要ではありません。 https://developer.android.com/studio/projects/add-native-code.html。あなたのプロジェクトは私の偽のjsonファイルでビルドできるので、あなたのシステムはかなり近いはずです。

+0

非常に役に立ちます!本当にありがとう、私はこれを試してみます。 :) –

関連する問題