Android Studio新手求助:项目编译成功后启动即崩溃
应用启动崩溃问题分析与修复方案
核心错误点
- 错误导入系统R类:代码开头导入了
import android.R,这会强制代码使用系统内置的资源类,而非项目自定义生成的R类。你的布局activity_main和控件testView属于项目私有资源,用系统R类根本找不到这些资源,直接触发Resources.NotFoundException导致崩溃。 - 潜在风险点:
res/raw文件夹下是否存在名为test的视频文件、视频格式是否被Android VideoView兼容(MP4/H.264是兼容性最优的格式)。
修复步骤
修正R类导入
删除代码中的import android.R,确保使用项目自动生成的com.example.video_player.R(Android Studio通常会自动补全,若未自动导入可手动添加)。验证资源文件
- 确认
res/raw文件夹存在,且内部有test视频文件(文件名只能用小写字母、数字和下划线,禁止大写、空格或特殊字符)。 - 确保视频格式为Android支持类型,优先选择MP4(H.264编码)。
- 确认
添加错误监听(可选,提升调试效率)
给VideoView增加错误监听,方便快速定位后续可能出现的播放问题:videoView.setOnErrorListener { _, what, extra -> println("视频播放错误: what=$what, extra=$extra") true }
修复后完整代码
MainActivity.kt
package com.example.video_player import android.net.Uri import android.os.Bundle import android.widget.MediaController import android.widget.VideoView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val videoView = findViewById<VideoView>(R.id.testView) val mediaController = MediaController(this) mediaController.setAnchorView(videoView) val uri: Uri = Uri.parse( "android.resource://$packageName/raw/test" ) videoView.setMediaController(mediaController) videoView.setVideoURI(uri) videoView.setOnErrorListener { _, what, extra -> println("视频播放错误: what=$what, extra=$extra") true } videoView.requestFocus() videoView.start() } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <VideoView android:id="@+id/testView" android:layout_width="0dp" android:layout_height="308dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
(注:将VideoView的width改为0dp,配合约束让控件填满左右父布局空间,比wrap_content更符合界面布局逻辑)
调试技巧
若修复后仍崩溃,打开Android Studio的Logcat面板,过滤Error级别日志,异常栈信息会直接指明崩溃根源(比如资源缺失、视频格式不兼容等)。
内容的提问来源于stack exchange,提问作者Em P
相关产品推荐
相关产品推荐

