2016-10-13 3 views
1

Я встречаюсь с проблемой при попытке создать исходный код Telegram в Android Studio (https://github.com/DrKLO/Telegram).Link gradle to native library

У меня установлен 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++ библиотека все же. Но, я не знал, как я использую ручную ссылку Gradle для существования Android.mk. Любые идеи? Пожалуйста, помогите мне. Очень ценю!

ответ

0

Несколько догадок:

  • Убедитесь, что вы используете НДК-r12 или НДК-R13 (проверьте файл local.properties). После изменения версии ndk, rm -fr TMessagesProj/.externalNativeBuild [это необходимо для текущей студии android]
  • Единственное соединение между градиентом и нативным кодом - это ваш верхний уровень Android.mk, который уже существует, просто измените свой путь на 'jni/Android.mk' [это должен быть относительный путь к вашему файлу $ project/build.gradle.
  • Возможно, строка jniLibs.srcDirs в вашем build.gradle не требуется: общая библиотека будет автоматически упакована в APK, если у вас нет других целей. Встроенные нативные библиотеки не сохраняются там

У меня был установлен cmake, не уверен, что это важно. https://developer.android.com/studio/projects/add-native-code.html. Ваш проект может построить с моим поддельным файлом json, поэтому ваша система должна быть довольно близка.

+0

Очень полезно! Большое вам спасибо, я попробую это. :) –