In der Vergangenheit habe ich Eclipse für NDK-Projekte verwendet, die Datei Android.mk war perfekt zum Kompilieren des NDK mit API-Level 9 geeignet, während die App (SDK) kompiliert werden konnte API-Level 22. Es scheint jedoch, dass dies nicht möglich ist, wenn das experimentelle Gradle-Build-System (2.5) mit Android Studio 1.3 RC1 verwendet wird.Gradle: Ändern des NDK-Buildziels unabhängig vom SDK-Buildziel
Was kann ich tun, um NUR NDK auf API Level 9 zu kompilieren?
Meine typische Android.mk Datei sieht wie folgt aus:
APP_PLATFORM := android-9
APP_STL := stlport_static
APP_ABI := all
# Enable c++11 extentions in source code
APP_CPPFLAGS += -std=c++11
#Enable optimalization in release mode
APP_OPTIM := release
Meine neue gradle Datei sieht wie folgt aus:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 22
buildToolsVersion = "23.0.0 rc3"
defaultConfig.with {
applicationId = "com.example"
minSdkVersion.apiLevel = 9
targetSdkVersion.apiLevel = 22
versionCode = 1
versionName = "1.0"
}
}
android.ndk {
moduleName = "NativeLibrary"
cppFlags += "-I${file("src/main/jni/some_folder")}".toString()
cppFlags += "-std=c++11"
//What should be added here to compile the NDK on API 9???
CFlags += "-DNDEBUG"
CFlags += "-fvisibility=hidden"
cppFlags += "-fvisibility=hidden"
ldLibs += ["log"]
stl = "stlport_static"
}
android.buildTypes {
release {
isMinifyEnabled = true
proguardFiles += file('D:/path/proguard-rules.pro')
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:22.2.0'
}
ich die Gradle Quelle untersucht und es scheint, dass das NDK Ziel bauen ist hart codiert wie die compileSdkVersion. Gibt es eine Methode, um dieses Verhalten zu vermeiden oder zu ändern?
NdkCompile.groovy (Erstellung der Datei machen)
// target
IAndroidTarget target = getPlugin().loadedSdkParser.target
if (!target.isPlatform()) {
target = target.parent
}
commands.add("APP_PLATFORM=" + target.hashString())
Sdk.groovy (Ziel geholt Form ist die compileSdkVersion)
public SdkParser loadParser() {
checkNotNull(extension, "Extension has not been set")
// call getParser to ensure it's created.
SdkParser theParser = getParser()
if (!isSdkParserInitialized) {
String target = extension.getCompileSdkVersion()
if (target == null) {
throw new IllegalArgumentException("android.compileSdkVersion is missing!")
}
FullRevision buildToolsRevision = extension.buildToolsRevision
if (buildToolsRevision == null) {
throw new IllegalArgumentException("android.buildToolsVersion is missing!")
}
theParser.initParser(target, buildToolsRevision, logger)
isSdkParserInitialized = true
}
return theParser
}
Tatsächlich haben sie endlich dieses Update gemacht! –