Android Studio 常见编译问题一览 蔚落 2021-12-11 08:43 992阅读 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” 解决办法 ### **解决方法一** 在方法之前加上如下代码以导入相关包 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)解决方法 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTUxNjU5_size_16_color_FFFFFF_t_70] 打开图片中被选中的配置文件“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创建项目默认为: ![在这里插入图片描述][20190709133635484.png] 2.找到这个页面: ![在这里插入图片描述][20190709133609640.png] 3.加入一段代码:(注意和buildTypes那一个大括号并列,在android大括号之内) sourceSets{ main{ jniLibs.srcDirs=['libs'] } } 4.保存后会在上方出现提示: ![在这里插入图片描述][20190709133658533.png] 5.点击后在项目中就出现jniLibs文件夹了。 ![在这里插入图片描述][20190709133712594.png] 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应该不会出现这种问题 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTUxNjU5_size_16_color_FFFFFF_t_70]: /images/20211211/4904e2f3093d485c9fb5265ebfbb3436.png [20190709133635484.png]: /images/20211211/43e5b7bb190244adb0429ea6566956e4.png [20190709133609640.png]: /images/20211211/fd57dbedf89d47a0aeab1dba1cf258dc.png [20190709133658533.png]: /images/20211211/7c37c2c1792b4ed2993828f03cc9bcd5.png [20190709133712594.png]: /images/20211211/a471a60165814d67856fccb28b79da27.png
还没有评论,来说两句吧...