2017-04-17 36 views
0

我將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示例鏈接兩個庫,當我認爲這樣的原始示例不應該是必需的。那麼這可能只是一個約定而不是必要的問題?

感謝任何能說明這一點的人。

回答

2

因此,當項目本身需要v23時,在這種情況下連接到appcompat v7是不是多餘的?

隨着23 minSdkVersion,你不需要appcompat-v7,但隨後你將需要不使用它任何東西(例如,AppCompatActivityTheme.AppCompat)。

谷歌喜歡大家使用appcompat-v7,但它增加了〜膨脹的1MB到您的應用缺乏高附加值,特別是23

minSdkVersion我不知道是連接第二件事反對約束佈局。 HelloJNI也這樣做,但我不知道爲什麼。

谷歌已經將他們的許多模板和示例轉換爲使用ConstraintLayout

從我的研究中看來,約束佈局允許應用程序執行一些高級佈局技巧,但是當然HelloJNI不會那樣做......那麼爲什麼它仍然與約束佈局鏈接?

因爲他們使用ConstraintLayouta layout resource ......這本身是未使用的。如果我猜,他們複製了他們JNI代碼轉換成由在appcompat-v7添加布局資源,於constraint神器依賴,依賴模板創建一個新的項目,等等。

我不需要鏈接對程序兼容性V7,因爲我的應用程序的目標V9

您的應用程序有25 targetSdkVersion,而不是9

+0

謝謝!但是:「你的應用的targetSdkVersion是25,而不是9」。再次閱讀我原來的文章。該片段來自HelloJNI,而不是來自我的項目。在我的項目中,minSdkVersion和targetSdkVersion都是9. – Andreas

+0

@Andreas:好的,對不起。您可能會發現使用如此低的值進行現代應用程序開發很困難。值得注意的是,您應該考慮避免使用任何'com.android.support'庫,因爲它們需要以這些工件的26.x.y版本開始的'minSdkVersion'爲14。您可以使用'com.android.support'庫,只是計劃堅持使用'25.x.y'版本,但在2017年中期之後,您不太可能對這些庫進行任何錯誤修復。 – CommonsWare