android studio 奇怪问题收集(gradle问题详解)
- plugin is too old,please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to …
临时解决方案:去环境变量里面照着配置就对了,比如 ANDROID_DAILY_OVERRIDE = “c9940005c…fdcb919e0”。as需要重启。
这种方式的弊端是,下次创建新项目的时候你又得配一次,每次的值都不一样啊。
终极解决方案:
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310579135480ddd276b97844b22918448e435061e5a25a4ec66644b598f84616607a84c5cecf73c6f645f76f7c693de5dddcdd36e68de7c69671cf04105d36faddc4653837ed70fb2f30ee7ccab7384aea495820944ca255824d6e78b2c424a9d3cb14326e3d0de0a430c56edfa3013b9046029e97057b631a6bd72391081809d0b1d9476967611e1eb62f07f49e84fb05a466412af0eef4f047d6cf74f56a4052a04e3ad00ba3d79317ee81ea4b9b0e5b71e9bdc9b62c4ac8bf274c377e7b5fdfe05557122ac76e5f5f6a53c145205addddf669976ebbaace11abe03d76118e90331787cce1acfc39857833104b5ba7ffe587f616e5c8cf523a962701e26a84f0fb06f822be6dd371c&p=882a9644d6d21aef00acc7710f519d&newp=aa759a46d7c30bfc57ef853d4e4281231610db2151d7d41e6b82c825d7331b001c3bbfb423231600d4c47f6d06ac4c5eebf43c71350327a3dda5c91d9fb4c57479c2&user=baidu&fm=sc&query=Plugin+is+too+old+and+ANDROID_DAILY_OVERRIDE+value+is+also+outdated%2C+please+use+new+value&qid=e55465a90000691f&p1=7
首先得明白以下一些问题:
可以先看看gralde基础,https://segmentfault.com/a/1190000002439306
a. gradle wrapper task利用gradle-wrapper.properties来下载指定的gradle
b. build.gradle中classpath 'com.android.tools.build:gradle:xxx’表示要使用这个android gradle plugin
这是as对gradle进行支持的插件,插件版本一般和gradle版本配合使用。
所以,对应的解决方案,就是下载最新的gradle,路径在gradle-wrapper.properties中配置,可以在项目gradle/wrapper/gradle-wrapper.properties中找到
distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distsdistributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
然后要更新对应版本的插件,project的build.gradle中的classpath将插件地址更到最新
dependencies { classpath 'com.android.tools.build:gradle:2.2.0'}
然后build的过程中,你可能遇到这样的问题:Error:Minimum supported Gradle version is 2.14.1. Current version is 2.10.
解决方案在此:http://blog.csdn.net/qq_32365567/article/details/52671275
可能需要先下载2.14.1版本的gradle到手机。
2.Error:(3) Error retrieving parent for item: No resource found that matches t
看看你的build.gradle文件里面的compileSdkVersion
和compile 'com.android.support:'版本是不是对应的
3.关于multidex,用于解决方法超过65535的问题相信都不陌生,随着as的不断升级,貌似只要在app的build.gradle中添加这个就行了。
defaultConfig {
multiDexEnabled true
}
一开始我以为这是新用法,后来发现这里面有坑哇,大概就是导致某些第三方包在不同机型上有的可以有的不可以。所以还是得用最全版本的:
1)在app的build.gradle文件的dependencies 节中添加分包设置:
dependencies {
…
compile ‘com.android.support:multidex:’
…
}
2)通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.
defaultConfig {
…
multiDexEnabled true
…
}
3)分三种情况,由于我并未创建自己的Application.class,直接在AndroidManifest.xml文件的Application声明中添加;
android:name=“android.support.multidex.MultiDexApplication”
如果有自定义的Application,请在其中添加方法:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
4 随着第三方so的版本越来越多,armeabi ,v7,x86。。。丢到app中会很大,而且不同第三方提供的版本不一样你就惨了。所以只能做减法,留一个armeabi,里面一般都用v7的so。奇葩的是,有的第三方在编译的时候会自动生成不同包的so,比如个推,如果你个推更新到2.9以上后,你可能会突然发现某些手机其他第三方的so找不到了,所以要避免其生成各个版本的so,在defaultConfig节中添加:
ndk {
abiFilters “armeabi”
}
5 com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files
解决方案:在app的build.gradle中添加:
packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' }
6 This version of android studio is incompatible with the gradle version used.看起来貌似是gradle升级后引起的,解决方案在此:http://blog.csdn.net/sinat_15417921/article/details/51907728
2016/11/19:
7.startActivityForResult时需要设置RequestCode,这里有两个坑:
第一个坑是,如果在Fragment中使用了startActivityForResult,后面发现fragment的onActivityResult拦截不到RequestCode,说明该Fragment的Activity中有onActivityResult,它会先拦截所有RequestCode,此时需要在Activity中做Fragment的请求应答。如果想让fragment处理事件,这时候需要在Activity的onActivityResult中添加super.xxx。
第二个坑是最近发现的一个坑,当我习惯第一个坑的存在后,经常会在fragment请求startActivityForResult后,在activity中去处理,这时候遇到第二个坑,发现回来的RequestCode变了。所以,如果没有其他RequestCode,fragment的请求应在frament中处理完毕。
8.点击事件中的全局变量值莫名其妙被改变?这个坑后来发现是这么回事。大体结构是这样的:
Entity entity=...;if(layout==null){layout = View.inflate...;button = layout.findViewById...;button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { entity....; } });}
然后发现当entity的内容发生变化后,onClick中的entity始终保持第一个entity的值。
解决方案:把点击事件放到if条件外,每次点击重新设置点击事件。或者使用setTag的方式,每次数据变了给button重新setTag,然后在事件里取出tag就是对的。
2016/11/24
8.如果有一天发现file.mkdirs()不起作用了,看看你的targetSdkVersion是不是超过了22。23以上的权限模式有点点不一样,所以最简单的恢复方式就是将其改回22。
2016/12/06
9.今天突然发现as的布局preview不能正常工作了,提示:android.support.v7.widget.ActionBarOverlayLayout can not cast to android.support.v7.internal.widget.ActionBarOverlayLayout
最终解决方案是:修改AppTheme,在前面添加Base,比如:
10.还有个同时发现的问题,突然发现相对布局不正常了,位置错乱了。最后发现在api=22以下都不正确,而在api=23以上是正确的。情况是这样的:
A通过alignBaseLine对齐B,然后C通过layout_below置于A下,结果C的位置不正常了。最后发现alignBaseLine引起api22以下计算位置不正确。换成其他写法即可。
2016/12/10
11.as检测内存泄露实例推荐:http://www.th7.cn/Program/Android/201610/987059.shtml
2016/12/17
12.如果你想知道为什么fragment可能产生getActivity()=null的情况,可以看看这个:http://blog.csdn.net/goodlixueyong/article/details/48715661
2016/12/29
13.有些时候被迫要去深入一些东西,比如前面的一个问题65535,虽然有官方的解决方案,但是会产生各种问题,如果你发现启动app变慢了,需要至少几秒钟,看看是不是在Application中使用了Multidex.install。如果是的,恭喜你中标了,想优化看看这篇http://www.open-open.com/lib/view/open1452264136714.html
2017/01/03
14.关于app启动慢现在发现了新线索,有时候是因为debug版本,换成了release版本就好了。参考:http://www.open-open.com/lib/view/open1468241867068.html
2017/06/21
15.编译app时发现报错 java.lang.OutOfMemoryError: GC app:transformClassesWithDexForDebug。
这是as编译时内存不够用了,要增加分配给它的内存。解决方案:
在项目下的gradle.properties中配置:# Specifies the JVM arguments used for the daemon process.# The setting is particularly useful for tweaking memory settings.# Default value: -Xmx10248m -XX:MaxPermSize=256m org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8#
2019/07/17
16. 唔,没想到时隔两年又回来接着写了,这次发现个奇怪问题,as3.4直接run可以正常安装apk到手机上,如果是打包成release版本,在安装的时候会发生闪退。https://blog.csdn.net/zgh0711/article/details/72190165/
2019/07/26
17. android studio 3.4无法引入本地aar包
正解如下:
1)拷贝aar到app/libs中
2)app/build.gradle中dependencies做修改,将aar后缀添加进去
3)最重要的一步,File->Sync Project with Gradle Files
- android studio 3.4 更新本地aar后,gradle sync没有刷新
解决方案:https://blog.csdn.net/lyabc123456/article/details/82497899
2019/08/01
19. A模块依赖B模块后,B模块中对其他包的依赖,不被A引用,这时候需要将B模块中相关依赖改为api声明
2020/02/21
20. android studio 新版可对module直接生成jar和aar
build之后
jar位置:[module]->build->intermediates->full-jar
aar位置:[module]->build->outputs->aar
更多相关文章
- 高级Redis应用进阶课 一站式Redis解决方案
- Android(安卓)8.1开启Bluetooth A2DP sink
- android在只拥有第三方apk的情况下在自己app中打开第三方app
- 下载、更新Android(安卓)SDK慢的解决方案
- android创建工程时自动创建的V4和V7工程
- 打包Android报错:Error building Player: CommandInvokationFailu
- [已解决] MediaPlayer.setVolume设置声音大小失效问题
- android 获取app的版本号和版本名称
- NDK各个版本链接