当你在创建了一个高版本的项目后,比如 compileSdkVersion 28,AndroidStudio 会自动在 build.gradle 中引用 appcompat-v7 包,此时如果手动 降低 compileSdkVersion 版本,会报错,比如降低到 compileSdkVersion 19 。提示与compile sdk version不一致,然后自己试着修改到一致的版本时,报错会消失,但是会出一行新的提示:Using the appcompat library when minSdkVersion >= 14 and compileSdkVersion < 21 is not necessary, 这个意思是当min target version>=14且compile sdk version<=19时,这个包是不需要的,于是删除appcompat-v7的引用,重新sync,这时会报出一些奇怪的样式引用错误跳转查看详情,发现是一些styles引用了appcompat的内容在manifest文件中有一句引用android:theme="@style/AppTheme"也就是theme
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
这个theme是在values的styles文件中继承父theme,而这个父theme就是引用的appcompat包中的theme,于是我们把这个theme修改成系统自带的theme,例如android:Theme.Light。然后删掉之前生成的customize的内容(要删掉否则报错),最好修改一下style的name属性,与以前不同就可以了
<resources>
<!-- Base application theme. -->
<style name="BaseTheme" parent="android:Theme.Light">
<!-- Customize your theme here. -->
</style>
</resources>
然后在manifest文件中修改引用android:theme="@style/BaseTheme"同时要修改activity继承,将默认继承的AppCompatActivity修改为activitypublic class MainActivity extends AppCompatActivity改成public class MainActivity extends Activity,再把自动生成背景图片和后缀的资源文件夹删除(比如 mipmap-anydpi-v26),这样再clean一下,就可以编译通过了。
最后说明一下:可以用较高版本的build tools去适配较低版本的compile sdk的,比如 compileSdkVersion 19
buildToolsVersion “24.0.0”
这都是没有问题的。