一 、问题方案
- 报错问题
Error:Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
A:这里可能是因为点9图片的问题,找到对应图片并打开,勾上showbadpatch可以修改点9图片问题
- 报错问题
Gradle 'AndroidUsbCamera-master' project refresh failed
Error:Configuration with name 'default' not found.
如图:
A:导致上面的问题可能是由于以下导致:
a、settings.gradle包含了不正确的目录:include ":目录名"
b、app目录下build.gradle文件目录不正确:compile project(':目录名')
c、引入的第三方库下是否包含build.gradle文件
- 报错问题
Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK: Split lib_slice_9_apk was defined multiple times. It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and the
A: 大意就是要说lib_dependencies_apk这个东西定义了多次,要我们点击ok卸载重装,但是点击OK,还是运行不了:
a、清理项目之前编译好的.class文件,重新编译文件
点击build->clean project ,然后再点击 rebuild project。
b、删除ide自动生成的一些文件,删除.gradle , .idea , build 三个文件夹
- 报错问题
文件本地查看没问题,Android Studio上查看的时候里面的数据全错乱
A:缓存问题。
a:清除缓存重启studio - 》 File —> Invalidate Cahes/ Restart
b:删除 项目路径下的 .gradle .idea 文件, 以及 app 目录下的build文件,然后重新编译
c:清除build缓存 Clean 后 Rebuild一下
d:找到C 盘。用户目录。.AndroidStudio版本号 .AndroidStudio3.3\system\cache 文件夹,关闭studio后将其删除
-
报错问题
A:引用androidX冲突问题
在gradle.properties文件中加:
android.useAndroidX=true
android.enableJetifier=true
-
报错问题
A:代理配置问题
打开 ~/.gradle/gradle.properties (如果是windows的话应该在
C:\Users\用户\.gradle\gradle.properties),把https的两行注释掉即可,重启AS。
- 报错问题
Program type already present: org.apache.commons.codec.Decoder
A:引用重复jar包问题
1、navigate ->class ->查询
2、 双击寻找重复jar包位置 然后通过以下方式之一处理:
(1)删除重复jar包问题;
(2)用exclude解决,大概意思就是去掉 你不需要的类 如:
二、小贴士
<一> 导入别人的项目如何更改Gradle版本跟自己的相匹配
我们在导入别人的项目时,经常会卡在这个界面,如下图所示:
这是由于在首次导入项目的时候AS默认是使用 gradle-wrapper-properties 中默认的设置,它会从网上下载所需要的对应版本的 gradle。这时我们只要把默认的加载修改为我们本地有的就ok了。即修改gradle-wrapper-properties 文件,同时修改build.gradle对应的dependencies中classpath路径,如图所示:
另一种方法就是下载对应的Gradle版本,并修改AS配置的Gradle路径使之对应。
<二> 如何在AS中导入android的framework.jar包
从Eclipse 转到Android Studio,必经 的一个过程就是导入第三方jar包,导入普通的jar包方式比较简单,网上其他的例子也比较多,但是关于导入framework.jar包内容就比较少。 有时候开发需要一些依赖framework中隐藏方法的时候,我们可以导入framework.jar, 编译的时候依赖framework, 打包的时候不打进去,这在eclipse中实现方式比较简单,这里记录下Android studio中导入framework.jar包的方式,其他系统jar包的导入方式同理。
1,首先将framework.jar拷贝到项目的/libs文件夹中,然后右键framework.jar文件,然后Add as Library ,再选当前的module。
操作之后,在你的Module的build.gradle中会增加了
这个时候我们已经添加了framework.jar包,但是我们还有改变framework.jar的作用域属性,右键你的module,Open Module Setting,然后将framework.jar的Scope改为 Provided 。如图所示:
改了framework.jar的作用域后,Module的build.gradle也会有改变,之前的compile files(‘libs/framework.jar’),会变成provided files(‘libs/framework.jar’)。
2,改了framework.jar 的scope后,再在修改project的build.gradle文件,改成如下所示:
这是在原有的基础上加了gradle.projectsEvaluted{}里面的内容,这里要说明下”Xbootclasspath/p”后接的路径,是相对于当前Project的根目录,例子中的”:app\libs\framework.jar”其中的app为Module名,libs就是放framework.jar的文件夹了。此时,Make Project就OK了(报红也没有关系)。
如果想调用jar包里面的方法可能不会自动提示,这个时候修改一下module对应的*.iml文件,把framework.jar包的引用放到第一个,这时再调用方法就可以自动提示了。
<三> 如何在AS中引用so文件
AS中引用so库其实是比较简单的,只需要在Module相应的目录下建立对应的文件夹,命名为jniLibs,再把相应的so文件放进去就行了,如图所示:
至于为什么这么放置,其实是有一定依据的,原理如下:
其实在AndroidStudio中,我们之所以可以把jar包放在对应模块的libs目录下,比如app模块(也就是通常意义下的主工程了)的libs目录中,而不需要再去配置build.gradle文件,就可以正常使用这些jar包,是因为在AndroidStudio中新建项目时,系统已经在默认为我们配置好了gradle,看相应模块下的build.gradle文件的话,一般会有这么一句:
dependencies { compile fileTree(dir: 'libs', include: ['.jar'])*}
其实,这句就是告诉gradle,我们的第三方jar包在libs目录下,如果没有这一行配置,那么理论上我们把jar包直接放在libs目录下其实是不行的,只不过新建项目时系统已经为我们配好了。这里libs是个相对路径,因为我们的build.gradle文件本身就在app模块下,那么这里的libs当然也就是指app模块下的libs,其实build.gradle文件中所有的路径都可以写相对路径,我们下边讲的so包的路径也是只写相对路径就可以了。
OK,言归正传,现在知道jar包的引入原理了,那么so包为什么要放在这样的一个目录下?能不能放在任意一个自定义的目录呢?当然是可以的。
其实在build.gradle中,默认会有一些这样的配置:
sourceSets {
main {
jniLibs.srcDirs = [**'src/main/jniLibs'**]
aidl.srcDirs = [**'src/main/aidl'**]
}
}
这些配置在你新建工程之后,在build.gradle文件中默认是没有的,因为默认就是这样的,当然也就不写也可以,当然你写出来也没错。意思是so包就去src/main/jniLibs目录下找,aidl文件默认就到src/main/aidl目录下找。当然还有许多其它的配置,你还可以配置你的AndroidManifest.xml文件在哪里,还可以配置你的Java代码在哪里,如果你不配的话都会有一个默认值,这里只是以jniLibs和aidl为例而已。
看到这里你应该就明白了,为什么把so包直接放到src目录下的main目录下的jinLibs目录就可以了,而不需要配置gradle文件了,因为系统默认就会到这个目录下找,如果你想把so包放在一个你喜欢的地方,比如直接放在app目录下的myJniLibs目录下,那你只需要把上面内容改成:
sourceSets {
main {
jniLibs.srcDirs = ['myJniLibs']
aidl.srcDirs = ['src/main/aidl']
}
}
这样就可以了。明白了原理,似乎一切都明了了,同理,如果不想把aidl文件放在默认目录下,也可以改aidl.srcDirs的值,如果不想把java代码放在默认目录,就可以改java.srcDirs的值,如果不想把资源文件放在默认目录下,就可以改res.srcDirs的值。。。还有几个,同学们慢慢去研究吧,如果你想把目录结构改的跟eclipse下的工程一样,就改这里的值就可以了。