Android进阶之路 - AndroidStudio 编写、编译、调试期间常见问题

以下的每一个问题都是我在开发中遇到的!关于内容我会在从业期间内,不断去完善~

孪生篇:Android进阶之路 - 常见异常汇总

编写期间问题

1.As自带代码提示功能无法使用,不进行任何提示

2.设置文件为仅读 or 正常状态

  • 出现问题 (当设置为仅读状态,我们去编辑代码就会出现报错)

解决方式:

  • 设置方式(设置为仅读状态)
    这里写图片描述

  • 设置方式(设置为正常状态)
    这里写图片描述

3.运行项目的时候弹出edit configuration

解决方式:File–>project structure
在这里插入图片描述

4.As内部android sdk下载

解决方式:

  • File -> Settings -> Appearance & Behavior -> System Settings -> Android SDK.
    在这里插入图片描述

  • 安装好之后,重启As

File - Invalidate Cache/Restart
在这里插入图片描述

  • 点击Invalidate and Restart 之后As将进行重启
    在这里插入图片描述

5.Alt+Enter 智能返回提示不对

这里的返回提示指的是如 new ArrayList<>(); 通过Alt+Enter提示应自动返回ArrayList list 用于接收
结果:ArrayList list = new ArrayList<>() ;

解决方式
操作流程:File → Setting → Editor → Intentions 打勾即可
在这里插入图片描述


编译期间问题

如在控制台找不到错误输出,可以打开Termianl ,输入命令 gradlew compileDebug --stacktrace 回车 ~ 然后会显示一些具体出错的信息

1.transformDexArchiveWithExternalLibsDexMergerForDebug(jar包引用冲突)

解决方式:

  1. build.gradle(app)的defaultConfig标签内加入以下属性
  multiDexEnabled true
  1. build.gradle(app)的dependencies标签内加入以下依赖
  implementation 'com.android.support:multidex:1.0.3'
  1. Application继承于MultiDexApplication(demo的话,直接在清单文件使用MultiDexApplication也可以,如果运营项目需继承MultiDexApplication)

2.Installation failed with message -99(缓存问题)

后台清理一下数据,释放所有内存;如首先卸载apk,同时使用手机自带的清理工具,清理apk残留数据即可~ (也可尝试插拔数据线,或重启一次手机 ~)

3.编译提示警告xx已过时 (屏蔽警告)

PS:一般是警告,不是错误,也可以打包成功,但编译有时会失败 ;同时如果警告条目太多,当我们真报错的时候,报错的信息是位于最底部的!!!所以这里要格外注意

解决方式:屏蔽警告方法

app的目录下build.gradle添加:

//在android内部 ,allprojects 同级的有defaultConfig、buildTypes等
android {
lintOptions {
    checkReleaseBuilds false
    abortOnError false
	}
}

根目录下build.gradle添加:

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
  }

如上述操作无法屏蔽警告的话,请在builde.gradle(app)的android{ }内添加以下俩行代码

 aaptOptions.cruncherEnabled = false
 aaptOptions.useNewCruncher = false

4.Error:注: 某些输入文件使用或覆盖了已过时的 API

解决方式:

根目录下build.gradle添加:

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
     }
  }

设置build.gradle后依旧会有警告,但是警告不会影响程序运行!如果影响到了,那么进行如下配置!!!

gradle.properties 查看是否有android.enableAapt2 属性,如有设置为false,如无直接添加以下这行代码 ~

android.enableAapt2 = false

设置好上面俩处配置之后应该就可以运行起来项目了,至少我是没问题了!
此时警告依旧会存在,而且数量应该不少,这时候就可以用到上文提到过的屏蔽警告方法进行设置了!!

5.找不到cache.properties (系统找不到指定的文件)

  • 报错输出Log
Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageBaiduDebug'.
> E:\garage_android\app\build\intermediates\transforms\dexMerger\baidu\debug\0\classes2.dex (系统找不到指定的文件。)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 26s
  • 出错原因
    gradle的无可用的caches(缓存) 空间了

  • 解决方式
    找到 gradle\caches 空间,删除不用的gradle版本 !(一般位于C盘的用户目录下,如果找不到请在文件右上角直接搜索)

如没看明白,直接看图吧 ~
在这里插入图片描述

6.代码混淆之后,在编译期报出警告信息

借鉴自此


解决方式:

在 proguard-rules.pro 中添加以下这两个混淆,然后重新编译

-keepattributes EnclosingMethod 
-keepattributes InnerClasses

7.All packages are not available for download(构建错误)

这里写图片描述
解决方式:把代理去掉,setting -> proxy,这里勾选auto

8.As 版本升级到3.0之后编辑出现 enableAapt2 问题

报错信息:The option ‘android.enableAapt2’ is deprecated and should not be used anymore. Use ‘android.enableAapt2=true’ to remove this warning. It will be removed at the end of 2018…

  • 解决方式 - 短暂 (亲测可用)

gradle.properties(混淆配置) 新增 android.enableAapt2 = true ,设置之后如无生效可以尝试clean、rebuild 或 重启 As

# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.

org.gradle.jvmargs=-Xmx1536m

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

android.enableAapt2 = true

  • 解决方式 - 彻底 (未测未用)

File -> Settings 进入设置

搜索Gradle

Global Setting中,随便输入个没有空格或中文的目录,比如C:/tools/.gradle

9.1 无法正常打包apk - app:transformClassesAndResourcesWithProguardForRelease(打包apk)

编译期间报错,导致无法正常打包apk

错误信息:Execution failed for task ‘:app:transformClassesAndResourcesWithProguardForRelease’.

解决方式:proguard-rules.pro(混淆规则)增加 -ignorewarnings忽略警告 ,可能治标不治本 ~

-dontwarn org.apache.commons.logging.**
-ignorewarnings
-keep class * {
public private *;
}

9.2 无法正常打包apk - Error:Execution failed for task ':app:lintVitalRelease(打包apk)

错误信息:Error:Execution failed for task ':app:lintVitalRelease

解决方式:app的目录下build.gradle添加以下代码 (类型上方屏蔽警告的解决方式)

//在android内部 ,allprojects 同级的有defaultConfig、buildTypes等
android {
lintOptions {
    checkReleaseBuilds false
    abortOnError false
	}
}

10.编译版本问题 Error:com.android.dex.DexException: Multiple dex files define Landroid/suppo

通过以下方式设置之后可以clean、rebuld、或重启项目来查看我们的解决方式是否有效

方式一
查看libs下是否有v4、v7包

通过compile fileTree(include: ‘*.jar’, dir: ‘libs’)来引入v4包的,把这个jar包删除,

改为gradle引入 compile ‘com.android.support:support-v4:25.3.1’问题解决,

可能是gradle引入的gradle才能自动解决重复的包,而通过jar包引入的gradle处理不了

方式二
查看build.gradle(app)是否引用的26的版本,同时查看是否有 multiDexEnabled true 属性

 compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.salesmanservice"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

11.Android的targetSdkVersion版本为28,网络请求(http)出现问题,编译无法通过 ,报错 java.net.UnknownServiceException

解决方式 (如需更多解决方式,请进入顶部的孪生篇进行查看 ~)

修改 build.app 内 targetSdkVersion 为28以下的版本! 27就ok咯 ~

12.app那块显示一个红叉,无法直接launch app 报出:default activity not found ,可以build工程产生apk文件,但是不能用studio直接launch app

原因:我自己在AndroidManifest.xml内MainAcitivity对应的activity标签内加入了 category 的 launcher ~

解决方式:这里只是我面临的问题和解决方式,有位 博友 介绍此问题更全一些 ~

//这是MainActivity内部的正常属性
<activity
        android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
 
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

13.项目在运行到设备时 报出:Error while Launching activity(安装包数据未清除干净)

具体报错信息

在这里插入图片描述
解决方式:AndroidStudio内打开下方Terminal命令工具 adb 对应报名(清除遗留数据),如Success则清除成功

Look here,baby!清除成功后,最好clean一下项目!这样的话一般项目都可以正常运行在设备上了!还不行的话就重启一下AndroidStudio !!!

在这里插入图片描述

14.Gradle error : Write access is allowed from event dispatch thread only in android studio(jdk原因)

原因:未设置或设置因某些场景失效,导致无法通过jdk环境运行

解决方式:File - Project Structure - SDK Location
在这里插入图片描述

15.Run Configuration Error: Broken configuration due to unavailable plugin or …(插件方面)

原因:加载插件失败,或之前已加载插件失效等

解决方式:File - Settings - Plugins 查看插件是否有爆红的,如有则取消勾选后,重新勾选一次,然后保存关闭,重启As(建议:Invalidate and Restart)
在这里插入图片描述

16.Gradle project sync failed. Basic functionality (eg. editing, debugging) will not work properly(Gradle同步)

解决方式:一般具体原因可通过As类似的文件路径,(C:\Users\Administrator.AndroidStudio\system\log\idea.log)查看出错的log日志

查询log日志内有关error 错误,根据对应错误进行解决

17.Caused by: java.lang.AssertionError: Already disposed: Module: …(配置冲突)

解决方式:右键 Module - open module settings - 选取左侧Modules - 如果有app和项目名,则删除app目录 - 重新编译

或在左侧Modules内选中SDK 重新设置bulid target版本

18.Build completed with 1 error and 0 warnings in 2 s 113 ms(JDK方面)

解决方式:File - Settings 将java compiler 改成正确版本
如无效,可同样将 project structure 改成正确版本


调试阶段问题

1.vivo手机调试出现"INSTALL_FAILED_TEST_ONLY"

出错场景:vivo手机编译安装期间,出现解析包错误~

解决方式:
步骤 1 - 取消箭头所指向的选项框选取
在这里插入图片描述
步骤 2 - gradle.properties文件中添加以下代码 (有时候只添加此项既可)

android.injected.testOnly=false

借鉴一位博主的解决方式解决方式(未亲测):研究发现原来是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性,导致IDE中run跑出的apk在大部分手机上只能用adb install -t 来安装

adb install -t app-debug.apk

2.小米手机调试出现"INSTALL_CANCELED_BY_USER"

提示:小米手机若需要通过AndroidStudio调试的话,需要插入SIM卡

  • 简单步骤

1> 设置 - 更多设置 - 系统安全 - 未知来源 - 允许
2> 设置 - 更多设置 - 开发者选项 - USB调试 - 允许
3> 设置 - 更多设置 - 开发者选项 - USB安装 - 允许

3.Source code does not match the bytecode警告

原因:代码改变后,未重新编译

解决方式:As顶部菜单中选择build(重新编译)或直接restart(重启代码);此项操作均是为了清空无效代码,编译最新代码

4.WARNING: Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.

原因:compile会被在2018年底取消,会被imlementation替代,所以会报这个警告
解决方式:将compile换成imlementation 即可 ~

5.com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details(生成签名apk时报错)

  • gradle.properties中加入以下配置
 android.enableAapt2=false
  • build gradle 中加入以下配置
 aaptOptions.cruncherEnabled = false
 aaptOptions.useNewCruncher = false

具体如下

buildTypes {
        release {
            aaptOptions.cruncherEnabled = false
            aaptOptions.useNewCruncher = false
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
  • 重启、clean、rebuild
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远方那座山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值