最近因项目需要必须要将gradle升级到7.4.2,升级过程一波三折,问题太多,因此将详细过程记录下来,为以后升级做参考。

我的android studio目前的版本是Arctic Fox | 2020.3.1

当前的项目级gradle文件内容:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
//jcenter() //构建脚本中所依赖的库都在jcenter仓库下载
google()
mavenCentral() // 必须添加
}
dependencies {
//指定了gradle插件的版本
classpath 'com.android.tools.build:gradle:3.0.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
mavenCentral() // 必须添加
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

模块级gradle文件内容:

apply plugin: 'com.android.application'

android {
compileSdkVersion 30
buildToolsVersion '26.0.2'

defaultConfig {
applicationId "com.hongyisoft.arithmetictraining"
minSdkVersion 21
targetSdkVersion 30
versionCode 2
versionName "1.0.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])
compileOnly files('libs/magic-android-34.38.1.200.jar')

testImplementation 'junit:junit:4.12'

implementation 'com.android.support:design:26.0.0-alpha1'
implementation "com.android.support:support-annotations:28.0.0"
implementation 'com.google.zxing:core:3.3.0'

}

以下是逐步升级 Gradle 和适配 Android Studio Arctic Fox 的详细指南:


一、环境准备

  1. 升级 Android Studio‌:Arctic Fox (2020.3.1) 对 Gradle 7.x 支持有限,建议至少升级到 ‌Android Studio Flamingo (2022.2.1)‌ 或更高版本。
  2. 进入程序和功能卸载旧版本(卸载时不知为何uninstall.exe文件丢失,在设置的应用和功能卸载会提示找不到uninstall.exe文件,但在程序和功能页面可以卸载,貌似就删除了系统注册表的信息,软件依然存在,然后进入安装目录将Android Studio文件夹删除)。

      3. 下载新版本,直接点击安装,按照提示一直下一步即可(安装很顺利)

升级软件包:android-studio-2022.3.1.20-windows.exe
链接: https://pan.baidu.com/s/1xWPurLgaor-IRMV3k_yBLg?pwd=bdbd 提取码: bdbd


二、项目级 build.gradle 修改

buildscript {
    repositories {
        google()
        mavenCentral()  // 删除 jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2' // 升级插件版本
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()  // 删除 jcenter()
    }
}


三、模块级 build.gradle 修改

plugins {
    id 'com.android.application' // 替换 apply plugin 方式
}

android {
    compileSdkVersion 33  // 升级到最新
    // buildToolsVersion 已废弃,删除此行

    defaultConfig {
        // ... 其他配置不变
        targetSdkVersion 33  // 建议升级
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 更新文件名
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11  // Gradle 7.x 需要 JDK 11
        targetCompatibility JavaVersion.VERSION_11
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    
    // 迁移到 AndroidX
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0' // 替换 design 库
    implementation 'androidx.annotation:annotation:1.7.0' // 替换 support-annotations
    
    // 更新其他依赖
    implementation 'com.google.zxing:core:3.5.2' // 升级 ZXing
    testImplementation 'junit:junit:4.13.2'
    
    compileOnly files('libs/magic-android-34.38.1.200.jar') // 检查该库是否兼容
}

四、全局配置

  1. 修改 gradle-wrapper.properties

    distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
    

  2. 添加 gradle.properties

    android.useAndroidX=true
    android.enableJetifier=true  # 自动转换旧依赖到 AndroidX
    
JDK 配置(实际未做修改)
  • 在 Android Studio 中设置 ‌JDK 17‌:
    File → Project Structure → SDK Location → JDK 17.

 ‌配置项目的 Gradle JDK
  • 步骤‌:
    1. 打开项目后,进入设置界面:
      File → Settings → Build, Execution, Deployment → Build Tools → Gradle(Windows/Linux)

       
    2. 在 ‌Gradle JDK‌ 下拉菜单中,选择 corretto-17 或已安装的 JDK 17 路径:

3. ‌验证 JDK 版本
  • 方法 1‌:在 Android Studio 的终端中运行以下命令:

    ./gradlew -version

  • 检查输出中的 JVM 版本是否为 ‌17+‌(与预期好像不一致,后面项目可以正常运行先不管了):

    JVM: 17.0.7 (Eclipse Adoptium 17.0.7+8)

4. ‌修改模块的 Java 兼容性
  • 在模块级 build.gradle 中,确保 compileOptions 使用 Java 11:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
}

升级完毕,开始编译

 ‌升级后android.support.v7.app.AppCompatActivity报错了

问题原因

  • AGP 8.0+ 默认强制使用 ‌AndroidX‌,不再支持 android.support 包。
  • 你的代码或依赖项中仍有对 android.support.v7.app.AppCompatActivity 的引用。
强制启用 AndroidX 并迁移代码
  • 在 gradle.properties 中添加以下配置(如果已存在则跳过):

    android.useAndroidX=true android.enableJetifier=true

  • Jetifier 会自动将第三方库中的 Support 库转换为 AndroidX‌(但对本地代码无效)。
2. ‌迁移代码中的 Support 类到 AndroidX
  • 手动替换代码中所有 android.support.v7.app.AppCompatActivity 为 androidx.appcompat.app.AppCompatActivity

更新模块级依赖项
  • 替换所有 com.android.support 依赖为对应的 AndroidX 库:
dependencies {
    // 删除旧的 Support 库依赖
    // implementation 'com.android.support:design:26.0.0-alpha1'

    // 使用 AndroidX 替代库
    implementation 'androidx.appcompat:appcompat:1.6.1'          // 替代 v7
    implementation 'com.google.android.material:material:1.9.0'  // 替代 design
    implementation 'androidx.annotation:annotation:1.7.0'        // 替代 support-annotations
}

import android.support.annotation.NonNull报错

问题原因

错误 import android.support.annotation.NonNull 表明你的代码中仍在使用 ‌Support 库的注解类‌,而升级到 AGP 8.0+ 后已强制使用 AndroidX。以下是完整的修复步骤:


解决方案

1. ‌手动替换 Support 注解为 AndroidX
  • 将所有代码中的 android.support.annotation.NonNull 替换为 androidx.annotation.NonNull
  • 其他常见注解的替换:
// 修改前
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;

// 修改后
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
2. ‌更新模块级依赖项
  • 确保 build.gradle 中删除了所有 com.android.support 依赖,替换为 AndroidX:
dependencies {
    // 删除旧的 Support 依赖
    // implementation 'com.android.support:design:26.0.0-alpha1'
    // implementation 'com.android.support:support-annotations:28.0.0'

    // 使用 AndroidX 注解库
    implementation 'androidx.annotation:annotation:1.7.0'
}
XML 布局文件中残留 Support 类
  • 检查布局文件(如 activity_main.xml),确保没有类似 android.support.v7.widget.Toolbar 的引用。
  • 替换为 AndroidX 类:
<!-- 修改前 -->
<android.support.v7.widget.Toolbar ... />

<!-- 修改后 -->
<androidx.appcompat.widget.Toolbar ... />

import android.support.v4.app.ActivityCompat; import android.support.v4.app.NavUtils; import android.support.v4.content.ContextCompat报错

问题原因

升级到 AndroidX 后,代码中残留的 android.support.v4 包下的类未替换为对应的 AndroidX 类,导致编译错误。这是因为 ‌Support 库的 v4 包已被拆分到不同的 AndroidX 模块中‌(如 androidx.coreandroidx.fragment 等)。以下是修复步骤:


解决方案

1. ‌手动替换 android.support.v4 类为 AndroidX
  • 将代码中所有 android.support.v4 的引用替换为对应的 AndroidX 类:
// 修改前
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NavUtils;
import android.support.v4.content.ContextCompat;

// 修改后
import androidx.core.app.ActivityCompat;
import androidx.core.app.NavUtils;
import androidx.core.content.ContextCompat;
2. ‌更新 build.gradle 依赖
  • 确保模块级 build.gradle 中删除了所有 com.android.support:support-v4 依赖,替换为 AndroidX 的 core 和 fragment 库:
dependencies {
    // 删除旧的 Support v4 依赖
    // implementation 'com.android.support:support-v4:28.0.0'

    // 使用 AndroidX 替代库
    implementation 'androidx.core:core:1.12.0'           // 包含 ContextCompat、ActivityCompat
    implementation 'androidx.fragment:fragment:1.6.2'    // 包含 Fragment 相关类
}
5. ‌检查 XML 布局文件
  • 某些 XML 布局可能直接引用了 Support 库的类(如自定义 View),需替换为 AndroidX:
<!-- 修改前 -->
<view class="android.support.v4.widget.SwipeRefreshLayout" ... />

<!-- 修改后 -->
<view class="androidx.swiperefreshlayout.widget.SwipeRefreshLayout" ... />

import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager;报错

问题原因

  • Support 库的 design 组件‌(如 TabLayout)迁移到 AndroidX 后属于 ‌Material Design 组件库‌。
  • Support 库的 viewpager‌ 迁移到 AndroidX 后属于 androidx.viewpager 模块。
  • 代码中仍然依赖旧版 Support 库的类,导致编译失败。

解决方案

1. ‌手动替换代码中的引用
  • 将代码中的旧包名替换为 AndroidX 包名:
// 修改前
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;

// 修改后
import com.google.android.material.tabs.TabLayout;  // Material Design 组件
import androidx.viewpager.widget.ViewPager;         // AndroidX ViewPager
2. ‌更新 build.gradle 依赖
  • 删除所有旧版 Support 库依赖,替换为 AndroidX 替代库:
dependencies {
    // 删除旧版 Support 依赖
    // implementation 'com.android.support:design:28.0.0'
    // implementation 'com.android.support:support-v4:28.0.0'

    // 使用 AndroidX 替代库
    implementation 'com.google.android.material:material:1.9.0'  // 包含 TabLayout
    implementation 'androidx.viewpager:viewpager:1.0.0'          // ViewPager(需手动添加)
}
3. ‌检查 XML 布局文件
  • 确保 XML 布局文件中的控件路径也更新为 AndroidX:
<!-- 修改前 -->
<android.support.design.widget.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<android.support.v4.view.ViewPager
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- 修改后 -->
<com.google.android.material.tabs.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<androidx.viewpager.widget.ViewPager
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

import android.support.annotation.ColorInt;import android.support.v7.app.AlertDialog;import android.support.annotation.RequiresApi;报错

问题原因

升级到 AndroidX 后,代码中残留的 android.support.v7 和 android.support.annotation 包下的类未替换为对应的 AndroidX 类。这是因为:

  • v7 组件(如 AlertDialog)迁移到 AndroidX 的 appcompat 模块。
  • annotation 类(如 ColorIntRequiresApi)迁移到 AndroidX 的 annotation 模块。

解决方案

1. ‌手动替换代码中的引用
  • 将代码中的旧包名替换为 AndroidX 包名:
// 修改前
import android.support.v7.app.AlertDialog;
import android.support.annotation.ColorInt;
import android.support.annotation.RequiresApi;

// 修改后
import androidx.appcompat.app.AlertDialog;  // v7 AlertDialog
import androidx.annotation.ColorInt;         // 注解类
import androidx.annotation.RequiresApi;      // 注解类
2. ‌更新 build.gradle 依赖
  • 确保模块级 build.gradle 中包含以下 AndroidX 依赖:
dependencies {
    // 删除旧版 Support 依赖
    // implementation 'com.android.support:appcompat-v7:28.0.0'
    // implementation 'com.android.support:support-annotations:28.0.0'

    // 添加 AndroidX 替代库
    implementation 'androidx.appcompat:appcompat:1.6.1'   // 包含 AlertDialog
    implementation 'androidx.annotation:annotation:1.7.0' // 包含 @ColorInt、@RequiresApi
}
3. ‌检查 XML 布局文件
  • 若 XML 文件中直接引用了 android.support.v7 组件(如自定义 View),替换为 AndroidX:
<!-- 修改前 -->
<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize" />

<!-- 修改后 -->
<androidx.appcompat.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize" />

重新编译又报错了:Dependency 'androidx.core:core-ktx:1.12.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs.

问题分析

错误提示指出 androidx.core:core-ktx:1.12.0 要求项目的 ‌编译版本(Compile SDK)‌ 必须为 ‌API 34(Android 14)或更高‌。这是因为该库的新版本可能使用了 Android 14 新增的 API 或特性。


‌网上查询后推荐两个解决方案(个人选择的方案2)

1. ‌升级项目的 compileSdkVersion 和 targetSdkVersion
  • 修改模块级 build.gradle,将编译版本和目标版本设置为 ‌34‌:
    android {
        compileSdk 34  // 关键点:升级到 34
    
        defaultConfig {
            minSdk 21
            targetSdk 34  // 升级到 34
        }
    }
    
      同步更新 Android Gradle 插件版本
  • 确保项目级 build.gradle 中使用的 Gradle 插件版本支持 API 34:
    // 项目级 build.gradle
    dependencies {
        classpath 'com.android.tools.build:gradle:8.2.0'  // 最新稳定版
    }
    
2. ‌如果无法升级到 API 34,降级 core-ktx 版本
  • 选择一个兼容低版本 API 的 core-ktx,例如:
    dependencies {
        implementation 'androidx.core:core-ktx:1.9.0'  // 支持最低 API 21
    }
    
  • 查看 core-ktx 版本兼容性 选择合适版本。

import android.test.ApplicationTestCase;报错

问题分析

android.test.ApplicationTestCase 是 ‌旧版 Android 测试框架‌ 中的类,已在 ‌API 24(Android 7.0)‌ 中被弃用,并在后续版本中彻底移除。当你升级到较新的 Android SDK 后,这些旧测试类会因缺失而报错。


解决方案

1. ‌迁移到 AndroidX 测试框架

旧的 android.test 包已被 AndroidX Test 替代。按以下步骤迁移:

步骤 1:更新 build.gradle 依赖

在模块级 build.gradle 中添加 AndroidX Test 库:

dependencies {
    // 添加以下依赖
    testImplementation 'junit:junit:4.13.2'  // JUnit 4
    androidTestImplementation 'androidx.test:core:1.5.0'         // AndroidX Test 核心库
    androidTestImplementation 'androidx.test:runner:1.5.2'       // 测试运行器
    androidTestImplementation 'androidx.test:rules:1.5.0'        // 测试规则
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'    // JUnit 扩展
}
步骤 2:修改测试类代码

替换旧的 ApplicationTestCase 为新的测试框架:

// 修改前(旧版)
import android.test.ApplicationTestCase;

public class ApplicationTest extends ApplicationTestCase<MyApplication> {
    public ApplicationTest() {
        super(MyApplication.class);
    }

    public void testAppLaunch() {
        createApplication();  // 旧方法初始化应用
        assertNotNull(getApplication());
    }
}

// 修改后(AndroidX)
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertNotNull;

@RunWith(AndroidJUnit4.class)  // 使用 AndroidJUnit4 运行器
public class ApplicationTest {
    @Test
    public void testAppLaunch() {
        // 直接获取 Application 实例
        MyApplication app = (MyApplication) ApplicationProvider.getApplicationContext();
        assertNotNull(app);
    }
}

import android.support.v7.widget.RecyclerView;报错

问题分析

android.support.v7.widget.RecyclerView 属于 ‌旧版 Support 库‌,已被 Google 废弃并迁移到 ‌AndroidX‌(新架构的扩展库)。当项目升级到新版 Android Gradle 插件或 SDK 时,旧 Support 库的类会因缺失而报错。


解决方案

1. ‌替换导入路径

将代码中所有 android.support.v7.widget.RecyclerView 替换为 AndroidX 路径:

// 修改前
import android.support.v7.widget.RecyclerView;

// 修改后
import androidx.recyclerview.widget.RecyclerView;
2. ‌更新 build.gradle 依赖

确保模块级的 build.gradle 中使用 AndroidX 版本的 RecyclerView:

dependencies {
    // 替换旧版依赖
    implementation 'androidx.recyclerview:recyclerview:1.3.2'  // 当前最新稳定版

    // 删除旧版依赖(如果存在)
    // implementation 'com.android.support:recyclerview-v7:XXX'
}
3. 手动检查 XML 布局文件

布局文件中可能仍残留旧库的全类名路径,例如:

<!-- 修改前 -->
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- 修改后 -->
<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

因我的项目引入了OpenCV,因此升级后报错:FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':sdk'. > Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl.。

问题根源

此错误通常由以下原因导致:

  1. Android Gradle 插件版本与 Gradle 版本不兼容‌。
  2. 旧版 OpenCV SDK 的构建脚本未适配新版 AGP(如 AGP 8.x+)‌。
  3. 构建配置中使用了已弃用的语法或重复的 ABI 过滤设置‌。

解决方案

修复 OpenCV 模块的构建脚本

更新 :sdk 模块的 build.gradle,适配新版 AGP:‌

  1. 添加命名空间‌ (namespace 'org.opencv')
    新版 AGP 强制要求库模块声明命名空间,否则无法实例化变体构建器(即 LibraryVariantBuilderImpl 错误)。

  2. 更新属性命名

    • compileSdkVersion 34 ➔ compileSdk 34
    • targetSdkVersion 34 ➔ targetSdk 34
  3. 统一 ABI 过滤配置
    移除 externalNativeBuild.cmake 中的重复 abiFilters,仅在 ndk 块中设置一次,避免冲突。

  4. 兼容 Java 11
    确保 compileOptions 使用 Java 11(新版 AGP 默认要求 Java 17,但需根据项目实际调整)。

apply plugin: 'com.android.library'

def openCVersionName = "4.8.0"
def openCVersionCode = ((4 * 100 + 8) * 100 + 0) * 10 + 0
android {
    namespace 'org.opencv' // 添加命名空间(关键修复!)
    compileSdk 34 // 使用新版属性名代替 compileSdkVersion

    defaultConfig {
        minSdk 26
        targetSdk 34 // 使用新版属性名代替 targetSdkVersion

        versionCode openCVersionCode
        versionName openCVersionName

        // 统一配置 ABI 过滤器(修复重复设置)
        ndk {
            abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
        }

        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -fexceptions -frtti"
                arguments "-DANDROID_STL=c++_shared"
                // 移除此处的 abiFilters,已在 ndk 块统一配置
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    buildTypes {
        debug {
            packagingOptions {
                doNotStrip '**/*.so'
            }
        }
        release {
            packagingOptions {
                doNotStrip '**/*.so'
            }
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['native/libs']
            java.srcDirs = ['java/src']
            aidl.srcDirs = ['java/src']
            res.srcDirs = ['java/res']
        }
    }
}

重新编译的报错:Execution failed for task ':arithmetictraining:checkDebugDuplicateClasses'. > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable > Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)

问题根源

此错误是由于项目中同时引入了多个版本的 Kotlin 标准库扩展模块(如 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8),与新版本的 kotlin-stdlib 主库发生类冲突。关键在于:

  1. Kotlin 版本升级后的兼容性问题‌:
    从 Kotlin 1.5 开始,kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 的功能已合并到 kotlin-stdlib 中,直接依赖这些扩展库会导致重复类。
  2. 依赖版本不统一‌:
    项目中可能存在直接或间接引入旧版本扩展库的依赖(如 1.6.21),与新版本 1.8.20 的主库冲突。

解决方案

1. ‌统一 Kotlin 版本

在项目根目录的 build.gradle 中,强制所有模块使用一致的 Kotlin 版本:

// 项目级 build.gradle
buildscript {
    ext.kotlin_version = '1.8.20' // 使用最新稳定版(与 AGP 8.2 兼容)
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    configurations.all {
        resolutionStrategy {
            // 强制统一所有 Kotlin 相关依赖的版本
            force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
            force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
            force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
        }
    }
}
移除冗余的扩展库依赖

检查模块级 build.gradle,删除手动添加的旧版本扩展库:        

dependencies {
    // 错误示例(直接引入旧版)
    // implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21'
    // implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21'

    // 正确做法:仅依赖 kotlin-stdlib(自动包含 JDK 扩展)
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

编译成功但应用启动时闪退,android studio输出logcat如下: E FATAL EXCEPTION: main Process: com.hongyisoft.arithmetictraining, PID: 2242 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=null} to activity {com.hongyisoft.arithmetictraining/com.hongyisoft.arithmetictraining.DeclaredActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference at android.app.ActivityThread.deliverResults(ActivityThread.java:6541)...

根据 Logcat 日志,应用在启动时闪退的原因是 ‌NullPointerException‌,具体位置在 DeclaredActivity.java 的 onActivityResult 方法的第 253 行。

根本原因:

AndroidManifest.xml文件:

android:name="android.support.v4.content.FileProvider"

替换为:

android:name="androidx.core.content.FileProvider" 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐