从SDK级别23迁移到27会破坏我的应用

时间:2018-02-08 02:11:43

标签: android android-studio

最近升级了工作站并加载了Android Studio 3.0.1,默认为Android SDK平台27.我以为我会将应用程序从Android SDK Platform 23迁移到SDK Platform 27

Android Studio对此迁移很有帮助,建议更新所有正确的参数,如下所示;

compileSdkVersion       23      --->    27
buildToolsVersion       23.0.1  --->    27.0.3

Gradle version          2.14.1  --->    4.1
Android Plugin Version  2.2.2   --->    3.0.1

minSdkVersion           9       --->    14
targetSdkVersion        23      --->    27

还必须添加Google maven存储库并更新com.android.support库,如下所示;

compile 'com.android.support:design:23.0.1          --->    27.0.2'
compile 'com.android.support:appcompat-v7:23.0.1    --->    27.0.2'
compile 'com.android.support:cardview-v7:23.0.1     --->    27.0.2'
compile 'com.android.support:recyclerview-v7:23.0.1 --->    27.0.2'

到目前为止一切似乎都很好,构建APK并在设备上安装就好但app崩溃了

我很欣赏可能存在的问题,所以我想问一下;

  1. 尽管我的代码狡猾,但是我能遵循哪种方法,所以我不会错过任何东西..?
  2. 如所怀疑的那样,我在v23上遇到了编码错误但在v27上是不能容忍的

    在过去,我已经能够直接从MainActivity中的onCreate方法引用导航栏标题上的“用户名”而不会出现像SDK级别23这样的错误

        rUsername = findViewById(R.id.username);
    

    API级别27上的Android Studio未检测到任何错误,项目编译成APK,但应用程序崩溃时出现NullPointerException,因为rUsername永远不会被初始化

    @Bereket Gobeze,@ Farjan Elahi,@ anianhanniballake,@ RmK等人在帖子中解决了这个问题。并使用getHeaderView

    修复如下
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
            View header = navigationView.getHeaderView(0);
            rUsername = (TextView) header.findViewById(R.id.username);
        }
    

    我可以确认这现在正常运行,应用程序编译并运行正常。必须对导航标题上的用户名重新同步项目才能在Android Studio中进行选择

    希望这可能对其他人有用

0 个答案:

没有答案