是否需要导入support-v4和appcompat-v7才能使用它们?

时间:2016-08-18 22:12:03

标签: android android-gradle android-support-library android-appcompat android-gradle-2.0

我正在使用AppCompatActivity以及更多像碎片等的东西......这些是我活动的一些导入:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;

我从谷歌样本中复制了这些依赖项:

dependencies {
    compile 'com.google.android.gms:play-services-ads:9.4.0'
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
}

现在我试图删除它们,我注意到我可以删除它们:

compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:appcompat-v7:23.4.0'

删除它们,我的项目完美运作......为什么?

我正在编译:

compileSdkVersion 23
buildToolsVersion "23.0.3"
minSdkVersion 14
targetSdkVersion 22

1 个答案:

答案 0 :(得分:9)

支持设计库本身依赖于appcompat-v7和support-v4库。因此,您删除的显式依赖项将作为传递依赖项自动引入。正在运行./gradlew app:dependencies确认了这一点:

_releaseCompile - ## Internal use, do not manually configure ##
+--- com.android.support:design:23.4.0
|    +--- com.android.support:recyclerview-v7:23.4.0
|    |    +--- com.android.support:support-annotations:23.4.0 -> 24.0.0
|    |    \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*)
|    +--- com.android.support:appcompat-v7:23.4.0 -> 24.0.0
|    |    +--- com.android.support:support-v4:24.0.0 (*)
|    |    +--- com.android.support:support-vector-drawable:24.0.0
|    |    |    \--- com.android.support:support-v4:24.0.0 (*)
|    |    \--- com.android.support:animated-vector-drawable:24.0.0
|    |         \--- com.android.support:support-vector-drawable:24.0.0 (*)
|    \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*)

build.gradle文件中明确声明这些依赖关系(解释链接的答案),通常仍被视为good practice

  

如果您的项目具有直接依赖关系" B"那么你应该声明" B"作为明确的依赖,即使" B"是一些其他显式依赖的传递依赖" A"。未来版本的" A"可能不再依赖于" B",并更新到其中一个版本的" A"会破坏你的构建。