Android Studio 常见编译问题一览

蔚落 2021-12-11 08:43 1145阅读 0赞

文章目录

      • 01.Android Studio “Cannot resolve symbol” 解决办法
      • 02 java.lang.RuntimeException Unable to instantiate activity ComponentInfo异常解决
      • 03 播放音频程序出错
      • 04 Android Studio 出现 call requires api level 11 (current min is 2)解决方法
      • 05 Android Studio创建jniLibs文件夹添加jar包
      • 06 INSTALL_FAILED_NO_MATCHING_ABIS 解决方案
      • 07 Android Studio打包时候报错 app lintVitalRelease
      • 08 启动AVD时,Waiting for target device to come online
      • 09 android.support.v7.app.actionbaractivity 报错
      • 10 android 配置报错 Program type already present android.support.v4.app
      • 11 移动项目后,Gradle sync failed: java.lang.NullPointerException

本文是作者在使用Android Studio遇到的一些问题,现在总结出大致的解决方案,希望能对读者有所帮助。若作者在Android的使用上遇到了新的问题,本文仍将继续更新。


01.Android Studio “Cannot resolve symbol” 解决办法

解决方法一
在方法之前加上如下代码以导入相关包

  1. import android.content.Intent;
  2. import android.net.Uri;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.Toast;

解决方法二
重启Android Studio


02 java.lang.RuntimeException Unable to instantiate activity ComponentInfo异常解决

不能实例化activity有如下三种情况:

  1. 没有在Manifest.xml 清单中注册该activity,或者在创建完activity后,修改了包名或者activity的类名,而配置清单中没有修改,造成不能实例化。
  2. 自己新建了一个包,而注册时候依然用的默认包,例如,默认包是com.ghg.Dao包,你新建了一个com.ghg.DaoImpl包,并在此包中写了个FirstActivity,在manifest.xml中注 册时你写的是,此时相当于你在的类注册到了默认包中,系统在默认包中是找不到的,因为你的FirstActivity在com.ghg.DaoImpl包 下,所以你注册时应写成包名加类名,如:<activity android:name=“com.ghg.DaoImpl.FirstActivity”;这样系统才能在指定的包中找到对应的类。
  3. 还用一种就是你的FirstActivity定义成了抽象类,这种情况好像一般人不会犯。

如果上述三种情况都考虑到了,还会抛出此异常,那么就查看一下activity类里是否同时存在这个类的构造函数和oncreate(),如果是,那么删除构造函数试试,并把初始化放到oncreate()中试试。


03 播放音频程序出错

问题详情
练习《第一行代码》中的程序,播放音频小节(8.4.1),在手机上运行后音频无法播放。手机在根目录放了音频文件“music.mp3”,在SD卡根目录上也放了该文件,在手机根目录创建“sdcard”文件夹下也放了该文件。
运行后,一点击播放按钮会出现下方错误

  1. 05-02 15:20:35.197 31272-31272/com.example.android.mediaplayer E/MediaPlayer: start called in state 1
  2. 05-02 15:20:35.197 31272-31272/com.example.android.mediaplayer E/MediaPlayer: error (-38, 0)
  3. 05-02 15:20:35.199 31272-31272/com.example.android.mediaplayer E/MediaPlayer: Error (-38,0)

再点播放按钮,每次只打印一行错误,如下

  1. 05-02 15:20:37.738 31272-31272/com.example.android.mediaplayer E/MediaPlayer: start called in state 0

解决方法一
添加SD卡访问权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

解决方法二
问题很可能是因为对应的路径没有“music.mp3”文件。
建议在initMediaPlayer()方法中try语句的中的File file = new File(Environment.getExternalStorageDirectory(),“music.mp3”);的后面加上上一条Log语句: Log.i(“音乐文件路径”, file.getPath());,看输出的路径是什么。

解决方法三
Error (-38,0)和Error (-19,0)一般是硬件设备不支持所致,在播放音乐时可以采用异步缓存,看你在写代码时直接加载到缓存,可以尝试新建一个模拟器,ram分配700m多一点。


04 Android Studio 出现 call requires api level 11 (current min is 2)解决方法

在这里插入图片描述
打开图片中被选中的配置文件“build.gradle”
然后将

  1. defaultConfig {
  2. applicationId name.bagi.levente.pedometer
  3. minSdkVersion 2
  4. targetSdkVersion 2
  5. }

改为

  1. defaultConfig {
  2. applicationId name.bagi.levente.pedometer
  3. minSdkVersion 11
  4. targetSdkVersion 2
  5. }

点击右上角Sync No


05 Android Studio创建jniLibs文件夹添加jar包

eclipse中项目自带libs文件夹,用来放需要的jar包之类的,可是在AndroidStudio中创建项目并没有这个文件夹,所以需要创建,名字统一为jniLibs。

1.Android创建项目默认为:
在这里插入图片描述

2.找到这个页面:
在这里插入图片描述

3.加入一段代码:(注意和buildTypes那一个大括号并列,在android大括号之内)

  1. sourceSets{
  2. main{
  3. jniLibs.srcDirs=['libs']
  4. }
  5. }

4.保存后会在上方出现提示:
在这里插入图片描述

5.点击后在项目中就出现jniLibs文件夹了。

在这里插入图片描述

6.将需要的bar包放入该文件夹,如果要引用,找到jar包(前边有小三角的是已引用的,没有小三角的可以引用)右键,选择Add As Library…,就引用好了。


06 INSTALL_FAILED_NO_MATCHING_ABIS 解决方案

在网上看到出现这个异常的原因是使用的了 Native lib 或者 JNI 之类的反正就是跟硬件有关的乱七八糟的包.

例如使用了 一个图片压缩的包, 涉及到了 JNI, 之后打包就出现了上述的异常.

解决方案:

在 app 的 moudle 的 build.gradle 文件中, 粘贴一下代码, 注意是添加在 android {} 大括号中.

  1. // 解决 native libraries 不支持cpu的体系结构。允许模拟器调试
  2. splits {
  3. abi {
  4. enable true
  5. reset()
  6. include 'x86', 'armeabi-v7a','x86_64'
  7. universalApk true
  8. }

这样就可以直接跑模拟器了. 但这样做后在打包时会产生多个 apk, 所以发布版本时把上面的代码注释掉后 rebuild 一下工程再打包. 切记一定要 rebuild 工程!


07 Android Studio打包时候报错 app lintVitalRelease

  1. apply plugin: 'com.android.application'
  2. android {
  3. //添加这段代码
  4. lintOptions {
  5. checkReleaseBuilds false
  6. abortOnError false
  7. }
  8. compileSdkVersion 26
  9. defaultConfig {
  10. applicationId "com.example.administrator.test"
  11. minSdkVersion 15
  12. targetSdkVersion 26
  13. versionCode 1
  14. versionName "1.0"
  15. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  16. }
  17. buildTypes {
  18. release {
  19. minifyEnabled false
  20. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  21. }
  22. }
  23. }
  24. dependencies {
  25. implementation fileTree(include: ['*.jar'], dir: 'libs')
  26. implementation 'com.android.support:appcompat-v7:26.1.0'
  27. implementation 'com.android.support.constraint:constraint-layout:1.0.2'
  28. implementation 'com.android.support:design:26.1.0'
  29. testImplementation 'junit:junit:4.12'
  30. androidTestImplementation 'com.android.support.test:runner:1.0.1'
  31. androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
  32. implementation 'com.android.support:gridlayout-v7:26.1.0'
  33. implementation files('libs/nineoldandroids-2.4.0.jar')
  34. }

在配置文件“build.gradle”中添加注释代码


08 启动AVD时,Waiting for target device to come online

ctrl+alt+s,调出SDK Manager,选择SDK tools,查看SDK Tools
主要原因是Build-Tools或者SDK Platform-Tools或SDK Tools 有更新,造成版本不一致。下载并安装新版,保证版本一致就可以了。


09 android.support.v7.app.actionbaractivity 报错

actionBarActivity已经由AppCompatActivity取代了
import android.support.v7.app.ActionBarActivity;; 改成import android.support.v7.app.AppCompatActivity;
用这个AppCompatActivity类就行了


10 android 配置报错 Program type already present android.support.v4.app

错误:Program type already present: android.support.v4.app.BackStackRecord$Op

错误:Program type already present: android.support.v4.app.ActionBarDrawerToggle$Delegate

两个错误的大致意思就是 前边已经存在了v4包的类文件,说实话,没太理解它真正的意义,不过已经猜出大概错误,是跟v4包有关。

看了一些博友的博客,发现我在配置

  1. dependencies {
  2. implementation fileTree(include: ['*.jar'], dir: 'libs')
  3. testImplementation 'junit:junit:4.12'
  4. implementation 'com.google.code.gson:gson:2.3.1'
  5. implementation project(':library-pulltorefresh')
  6. implementation 'com.mcxiaoke.volley:library:1.0.16'
  7. implementation project(':library-sidedrawer')
  8. implementation project(':library-circleimageview')
  9. implementation 'com.android.support:appcompat-v7:27.1.1'
  10. implementation 'com.android.support:support-v4:27.1.1'
  11. implementation project(':library-slidingmenu')
  12. implementation 'com.baoyz.swipemenulistview:library:1.3.0'
  13. implementation 'org.greenrobot:eventbus:3.0.0'
  14. }

的时候 少了一个v4的导入(不加这个导入的话 ) 下面这行会报红线,但是不影响程序运行

  1. implementation 'com.android.support:appcompat-v7:27.1.1'
  2. implementation 'com.android.support:support-v4:27.1.1'

加上这句话之后,以上问题迎刃而解。


11 移动项目后,Gradle sync failed: java.lang.NullPointerException

超级大坑!!!在网上搜索了一系列的解决方法,最终解决方法如下:

如果你在项目中导入了SlidingMenu这种模块式的依赖,那么就需要将这个模块移出到与app目录同级,并且修改相应的build.gradle以及settings.gradle,不能存在多级子目录路径(即“/”符号)

PS:这是我安装了AS 3.5版本遇到的问题,低版本下的AS应该不会出现这种问题

发表评论

表情:
评论列表 (有 0 条评论,1145人围观)

还没有评论,来说两句吧...

相关阅读