博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio 常见编译问题一览
阅读量:3899 次
发布时间:2019-05-23

本文共 6283 字,大约阅读时间需要 20 分钟。

文章目录

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


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

解决方法一

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

import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; 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”文件夹下也放了该文件。
运行后,一点击播放按钮会出现下方错误

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

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

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”
然后将

defaultConfig {
applicationId “name.bagi.levente.pedometer” minSdkVersion 2 targetSdkVersion 2 }

改为

defaultConfig {
applicationId “name.bagi.levente.pedometer” minSdkVersion 11 targetSdkVersion 2 }

点击右上角Sync No


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

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

1.Android创建项目默认为:

在这里插入图片描述

2.找到这个页面:

在这里插入图片描述

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

sourceSets{        main{            jniLibs.srcDirs=['libs']        }    }

4.保存后会在上方出现提示:

在这里插入图片描述

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

在这里插入图片描述

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


06 INSTALL_FAILED_NO_MATCHING_ABIS 解决方案

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

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

解决方案:

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

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

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


07 Android Studio打包时候报错 app lintVitalRelease

apply plugin: 'com.android.application'android {
//添加这段代码 lintOptions {
checkReleaseBuilds false abortOnError false } compileSdkVersion 26 defaultConfig {
applicationId "com.example.administrator.test" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes {
release {
minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' implementation 'com.android.support:gridlayout-v7:26.1.0' implementation files('libs/nineoldandroids-2.4.0.jar')}

在配置文件“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包有关。

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

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' implementation 'com.google.code.gson:gson:2.3.1' implementation project(':library-pulltorefresh') implementation 'com.mcxiaoke.volley:library:1.0.16' implementation project(':library-sidedrawer') implementation project(':library-circleimageview') implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:support-v4:27.1.1' implementation project(':library-slidingmenu') implementation 'com.baoyz.swipemenulistview:library:1.3.0' implementation 'org.greenrobot:eventbus:3.0.0'}

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

implementation 'com.android.support:appcompat-v7:27.1.1'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应该不会出现这种问题

转载地址:http://ticen.baihongyu.com/

你可能感兴趣的文章
[已解决]AutoCompleteTextView 不显示匹配的内容,因为将空的内容添加进去了
查看>>
object c的浅拷贝(地址拷贝)和深拷贝(对象拷贝)
查看>>
object c son字符串的解析
查看>>
object c 非常强大的类的属性复制kcv键值码赋值
查看>>
Java中普通代码块,构造代码块,静态代码块区别及代码示例
查看>>
iOS 第4课 UILabel
查看>>
[已解决]junit.framework.AssertionFailedError: No tests found in
查看>>
“服务器端跳转”和“客户端跳转”的区别
查看>>
Datatables基本初始化——jQuery表格插件
查看>>
Servlet监听器——实现在线登录人数统计小例子
查看>>
Oracle笔记——简单查询语句 Oracle入门
查看>>
基于Hibernate和Struts2的用户管理系统小案例
查看>>
打开.class文件的方法
查看>>
基于windows平台Git+GitHub+Hexo搭建个人博客(一)
查看>>
基于windows平台Git+GitHub+Hexo搭建个人博客(二)
查看>>
Windows平台下SVN安装配置及使用
查看>>
python简便的编辑工具:jupyter notebook
查看>>
使用pip安装的时候出现 ModuleNotFoundError: No module named ‘pip‘
查看>>
Selenium自动化测试(八)之上传文件
查看>>
Selenium UI自动化(Java篇)
查看>>