前言

整理归纳使用 AndroidStudio 过程中遇到的问题,并记录解决办法。

佛祖保佑永无 BUG

正文

Error:Could not download protobuf-java.jar (com.google.protobuf:protobuf-java:3.0.0)

老项目导入到最新版本的 AndroidStudio 时,发现无法同步,找不到 protobuf-java.jar 这个包,因为新版本有所改动

解决方案:
我之前只有 jcenter(),需要修改配置
修改一下整个项目的配置 build.gradle

1
2
3
jcenter() {
url "http://jcenter.bintray.com/"
}

报错 error: No resource identifier found for attribute ‘cardCornerRadius’ in package ‘com.xxxxx.xxx’解决

在依赖我自己的 RxTool 下的 RxUI 库时,出现上面这个错误,我反复检查了 res 目录里的文件,最后确定没有缺少资源,查看报错信息如下:

发现有 cardBackgroundColor,cardCornerRadius,cardElevation 三个属性应该与 cardview 有关,然后我发现在 app 下的 build.gradle 文件中没有导入卡片布局 cardview 相应的依赖包。然后我导入相应的依赖包 

1
implementation 'com.android.support:cardview-v7:27.1.1'

重新 clean project 后报错消失了,一阵狂欢,终于解决了,哈哈。

AAPT: error: inner element must either be a resource reference or empty。

Logcat 错误日志

1
AAPT: error: <item> inner element must either be a resource reference or empty。

问题出现原因:升级 gradle 插件导致对 values 文件的命名规则更严格,导致原本项目中存在的 values 文件因包含一些不严谨的键值对而报错。
例如:

1
<item name="about_version_code" type="id">false</item>

解决方法
修改成:

1
<item name="about_version_code" type="id" />

Android Studio 编译问题 - Error:Could not find org.jetbrains.trove4j:trove4j:20160824

今天早上打开 AS,发现项目编译不通过了。。。提示

1
2
3
Error:Could not find org.jetbrains.trove4j:trove4j:20160824

Error:SSL peer shut down incorrectly

真莫名其妙。。。

查阅资料,提供的解决方式大致有以下几种:

  1. 在 buildscript 中加上这个 jcenter()

    1
    2
    3
    4
    5
    6
    7
    8
    buildscript {
    repositories {
    jcenter()// 在这里加
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    }
    }

    但是,一般项目都有这个属性了,仍然是报上面的错。

  2. 修改 gradle-wrapper.properties 文件
    将 distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
    修改为:distributionUrl=http://services.gradle.org/distributions/gradle-4.1-all.zip
    有的同志,说这样调整之后,重新编译就通过了。但我的仍然是编译不过。

  3. 项目 build 文件中 repositories 和 allprojects 括号中加上 mavenCentral()
    然后将 jcenter() 改成

    1
    2
    3
    maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' }

    maven{ url'http://maven.aliyun.com/nexus/content/repositories/jcenter'}

    最后是这个样子:

1
2
3
4
5
6
7
8
9
10
11
12
buildscript {
repositories {
mavenCentral()
google()
//jcenter()
maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}

这样就编译通过了。

总结:个人认为,在 AS 加载(引入)各种包、库的时候,由于网络限制等原因,导致加载失败,这个时候,找个靠谱的第三方库来作为下载来源,才是最有效的。

Android Studio 使用 ButterKnife 生成变量加前缀 m

以前 把 局部变量 改成成员变量的时候可以, 但是现在使用 ButterKnife 并没有在生成变量的时候自动加前缀 m

局部变量

File -> Other Settings -> ButterKnifeZelezny 设置:

ButterKnifeZelezny


Unable to load class ‘org.gradle.api.internal.component.Usage’

今天从 GitHub 上下载一个项目导入 Android studio3.0 后报错,报错如下,详见截图:

1
2
3
4
Error:(26, 0) Unable to load class 'org.gradle.api.internal.component.Usage'.
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

这个 bug 产生的原因就是和 Android studio3.0 有关,因为在 Android studio2.3 的时候还没有这种情况。

解决办法:

把 project 的 build.gradle 里的 classpath ‘com.novoda:bintray-release:0.3.4’改为 0.5.0 版本的就好了。如下图所示:


java.lang.BootstrapMethodError: Exception from call site #3 bootstrap method

在引用 ButterKnife 库时,提示错误:

1
java.lang.BootstrapMethodError: Exception from call site #3 bootstrap method

butterknife_issues 找到了解决办法

解决方式:在 build.gradle 中添加以下代码 Java8 的新特性

1
2
3
4
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

解决 org.gradle.api.tasks.TaskInputs.

greendao 版本过低

在 app 的 gradle 中升级到

1
implementation 'org.greenrobot:greendao:3.3.0'

在根 gradle 中设置

1
2
3
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
}

to be continued…