Android 编译时异常

1. Apostrophe not preceded by \ XXX

某些字符未被转义,我遇到的是 ’ 没有转译,写成\’ ok。

2. CMake was unable to find a build program corresponding to “Ninja”

今日导入了别人写的Native项目,报了这个错:

CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.

错误很明显,是说找不到Ninja。因此只要给添加上就OK了。

  1. 下载Ninja https://github.com/ninja-build/ninja/releases
  2. 解压后放入 /usr/bin/
    问题解决

3. More than one file was found with OS independent path

在出错的Model的gradle的android节点下添加

packagingOptions {
        pickFirst 'META-INF/*'
    }

4. has different version for the compile (1.1.0) and runtime (1.1.1) classpath

字面意思编译版本和运行版本不一致,造成整个问题是由于依赖包冲突,我们可以通过以下命令查看项目的依赖关系:

./gradlew app:dependencies > log_dependencies.txt

这样依赖关系会保存到项目下的log_dependencies.txt文件内,在文件里搜索冲突的依赖包,然后进行excule即可。我的项目发生这个问题是在引入room数据库后发生了android.arch.core:runtime这个包的冲突。排查发现com.android.support:design中用到了这个库,解决如下:

implementation ('com.android.support:design:27.1.0'){
        exclude(group: 'android.arch.core', module: 'runtime')
    }

5. cannot access RoomDatabase

出现这个问题是由于我将一个带有Room的模块单独打成了一个module,在主项目引入该module。解决方法:
在之前的module中引入Room的方式由implementation改为api

6. Cannot add task ‘install’ as a task with that name already exists

可能大家遇到的不是install,而是其他的任务,但思想应该是一致的。我出现这个问题是这样的:我写了一个依赖库,开始时候是用apply plugin: 'maven’发布到本地,后来又想发布到网络仓库添加了apply plugin: 'com.github.dcendents.android-maven’这两个插件都使用了install这个task,所以造成了冲突,去掉一个就ok了

7. You must specify a URL for a Maven repository

有点丢人,maven配置时候多了一层嵌套。。。
错误写法

maven{
	maven { url 'https://jitpack.io' }
}

去除外层的maven{}解决

8. All flavors must now belong to a named flavor dimension

将gradle升级到3.0+后会遇到这个问题,在gradle中添加如下代码可解决:

defaultConfig{
	flavorDimensions "default"
}

9. Error: Default interface methods are only supported starting with Android N

在gradle中加入以下代码即可

android{
	...
	compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

10. Error:Unable to find toolchain: mips64el-linux-android/prebuilt

可以通过创建空文件解决

mkdir ~/Library/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin
touch ~/Library/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-linux-android-strip

11. Error:Cannot set readonly property

导入一个旧项目,里面使用了 gradle-experimental ,我在里面指定指令集时出现了问题:

android.ndk {
	moduleName = "xxx"
    ...
    abiFilters += "armeabi-v7a"
    ...
}

需要更改为add

android.ndk {
	moduleName = "xxx"
    ...
    abiFilters.add("armeabi-v7a")
    ...
}

12. res\navigation\xxx.xml: Error: Unsupported type ‘fragment’

低版本的gradle中使用了Android Jetpack中的Navigation组件,需要升级gradle版本,实测:

classpath 'com.android.tools.build:gradle:3.1.2'

可以。2.3.0编译出错

13. java.lang.NoSuchMethodError: No virtual method requireContext()Landroid/content/Context

requireContext()为Android 27以上的方法,低版本的编译环境使用会报错

14. unsupported modules detected

解决办法:关闭AS,去项目根目录删除.idea文件,重启AS搞定

15. Dex cannot parse version 52 byte code

解决办法在app的gradle文件中添加如下代码:

android{
	...
	defaultConfig{
		jackOptions {
			enabled true
		}
	}
	...
	compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

你可能感兴趣的:(Android)