我將Android NDK項目從Ant/ndk-build遷移到Gradle/CMake。之前,我從2012年夏季開始使用Android SDK和NDK,現在我已更新到最新版本。我使用命令行進行構建,而不是從Android Studio構建。何時與appcompat和約束佈局支持庫鏈接,何時不鏈接
作爲遷移的基礎,我看了一下HelloJNI NDK示例。它build.gradle
包含這兩個依賴:
dependencies {
compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.1'
}
我做對Android支持庫的一些研究,我想我並不需要它爲我的項目,因爲我的Android靶向9和我的應用程序不需要任何更新的功能,所以我不認爲我需要鏈接支持庫。
然而,HelloJNI例子在這裏混淆了我,因爲它包含了V7程序兼容性庫,但同時它的build.gradle
說,該項目至少需要V23:
defaultConfig {
applicationId 'com.example.hellojni'
minSdkVersion 23
targetSdkVersion 25
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang'
}
}
}
所以是不是多餘的這個案例在項目本身需要v23時與appcompat v7鏈接?這對我沒有意義,但也許我在這裏沒有正確理解所有事情,所以這就是我想問的原因。
我不確定的第二件事是鏈接與約束佈局。 HelloJNI也這樣做,但我不知道爲什麼。在我的研究中,它看起來像約束佈局允許應用程序做一些先進的佈局技巧,但當然HelloJNI不這樣做......那麼爲什麼它仍然與約束佈局鏈接?
總而言之,就我所知,我不需要鏈接到appcompat v7,因爲我的應用程序的目標是v9,並且不使用任何更新的功能,而且我也不需要鏈接到約束佈局,因爲我的應用程序不需要約束佈局庫提供的功能。唯一讓我感到困惑的是爲什麼HelloJNI示例鏈接兩個庫,當我認爲這樣的原始示例不應該是必需的。那麼這可能只是一個約定而不是必要的問題?
感謝任何能說明這一點的人。
謝謝!但是:「你的應用的targetSdkVersion是25,而不是9」。再次閱讀我原來的文章。該片段來自HelloJNI,而不是來自我的項目。在我的項目中,minSdkVersion和targetSdkVersion都是9. – Andreas
@Andreas:好的,對不起。您可能會發現使用如此低的值進行現代應用程序開發很困難。值得注意的是,您應該考慮避免使用任何'com.android.support'庫,因爲它們需要以這些工件的26.x.y版本開始的'minSdkVersion'爲14。您可以使用'com.android.support'庫,只是計劃堅持使用'25.x.y'版本,但在2017年中期之後,您不太可能對這些庫進行任何錯誤修復。 – CommonsWare