gpt4 book ai didi

gradle - 如何将 Gradle 链接到原生 Android 库并解决 'could not find method externalNativeBuild()' ?

转载 作者:行者123 更新时间:2023-12-03 04:30:10 24 4
gpt4 key购买 nike

尝试在 Android Studio ( https://github.com/DrKLO/Telegram ) 中构建 Telegram 源代码时遇到问题。

我已经安装了 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。
有任何想法吗?

最佳答案

几个猜测:

  • 确保您使用的是 ndk-r12 或 ndk-r13(检查您的 local.properties 文件)。更改 ndk 版本后, rm -fr TMessagesProj/.externalNativeBuild [当前 android studio 需要这个]
  • gradle 和 native 代码之间的唯一联系是您已经存在的顶级 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 文件构建,因此您的系统应该非常接近。

    关于gradle - 如何将 Gradle 链接到原生 Android 库并解决 'could not find method externalNativeBuild()' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40025273/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com