美文网首页安卓开发笔记Android开发Android studio
开发工具总结(4)之Android Studio3.0填坑指南

开发工具总结(4)之Android Studio3.0填坑指南

作者: AWeiLoveAndroid | 来源:发表于2017-10-30 11:50 被阅读4252次

    序言

    Android Studio 3.0

    上篇讲了: 全面总结Android Studio2.X的填坑指南

    这篇讲一下AS3.0的坑。。


    作为这个世界上走在最前沿的生物“猿”,怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3.0正式版也发布了,作为Android开发的猿们我们应该早就知道谷歌在今年5月的开发者大会上就说了要支持Kotlin语言,所以这次更新一个比较大的点就在于支持Kotlin语言了,下面就跟着LZ的脚步来探索一下AS3.0吧
    相信很多人很早就体验过谷歌爸爸放出来的体验版本了,虽然说正式版已经出了,但是很多人也不敢轻易贸然的更新,因为怕会掉进坑里出不来(真是一只胆小的猿,鉴定完毕)。


    安装

    如果你从Android Studio内部点击更新的话,会跳转到Android的官网,没有梯子的同学可以点击 谷歌官方Android 开发中文网 下载更新:

    网址: https://developer.android.google.cn/studio/index.html

    不同平台版本

    如何加快下载速度? ----- 设置代理(必备操作)

    貌似从2017年的中旬开始,AS就不能搜索依赖库了,后来gradle插件也不能搜索了,只有通过设置代理,或者翻墙(这个有风险,不推荐,怕查水表)的方式去解决问题。这里讲一下代理如何操作:

    代理地址:mirrors.neusoft.edu.cn
    端口号:80

    打开设置页面 --> Appearance & Behavior --> System Settings --> HTTP Proxy,找到Manual proxy configuration,选择HTTP
    ,填入代理地址和端口号,点击ok
    如图所示:

    操作方式2:
    在搜索插件页面,同样可以设置代理:



    安装过程中遇到的问题

    1、Gradle Sync failed:

    Gradle sync failed: Cause:
        com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;
        Consult IDE log for more details (Help | Show Log) (8s 123ms)
    

    其实一开始不是这个错,最开始是一个redownload的一个错,后来LZ把2.3版本的给删了,缓存给清除了,然后就变成这个错了。既然有错,那就解决呗,顺手百度了一个,下面看看stackoverflow的解决方案:

    同步失败问题在stackflow上的解决

    这个方法确实也适用于我,把ButterKnife降级之后就OK了。如果有其他更好的解决方法,欢迎私信我。

    “一个问题的解决是为了更好的迎接下一个问题的出现”——鲁迅

    解决方案1:把项目中依赖的ButterKnife降级到8.4.0

    解决方案2:把gradle plugin版本降低至2.3.3 重新编译下就可以了


    2、Unable to resolve dependency for:

    出现了Unable to resolve dependency for:这个问题

    第一眼看这个错的时候我以为我setting.gradle中没有依赖appCommon,看完之后明明确实依赖了,而且这是一个老项目,在AS2.3版本的时候很正常,然后我就知道这又是一个坑,无奈的又去上了一把Internet,然后试过网上说的在buildTypes中加入preview节点,然而并没有什么卵用,查了半天还是没有找到解决的方法,后来看着这段报错信息的时候,我看到了signingConfigs,我想到gradle中好像有这么个节点,抱着试一试的态度我删了那个节点,然后,卧槽卧槽卧槽,可以成功编译了,这是不是有一种躺着过坑的赶脚。如果有其他更好的解决方法,欢迎私信我,有偿给发红包

    解决方案: 把项目中的signingConfigs节点删除掉就好了,如果你担心多渠道打包的事情,那么就用打包工具吧。


    3、app:transformDexArchiveWithExterLibsDexMergeForDebug

    app:transformDexArchiveWithExterLibsDexMergeForDebug

    解决方案:将电脑中的.gradle目录删除掉(清除掉gradle缓存)重新build


    4、gradle打包,自定义apk名称代码报错(Cannot set the value of read-only property 'outputFile' )

    Error:(56, 0) 
      Cannot set the value of read-only property 'outputFile' for
      ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} 
      of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
    

    解决方案: 修改文件名代码请这样写:(必须配置了productFlavors节点才可以这样写)

    android.applicationVariants.all { variant ->
        variant.outputs.all {
             outputFileName = "driver_${variant.productFlavors[0].name}_v${variant.versionName}.apk"
        }
    }
    

    如果这样不行的话,请按下面这个写,这个是通用的:

    android.applicationVariants.all { variant ->
        variant.outputs.all {
             outputFileName = rootProject.getName()
                    + "-" + buildType.name
                    + "-" + releaseTime()
                    + "-v" + defaultConfig.versionName
                    + "-" + defaultConfig.versionCode
                    + ".apk";
        }
    }
    

    =================================================

    【附:】Android Studio3.0之前自定义输出apk名字的方式:
    android {
        android.applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(output.outputFile.parent, rootProject.getName()
                        + "-" + buildType.name
                        + "-" + releaseTime()
                        + "-v" + defaultConfig.versionName
                        + "-" + defaultConfig.versionCode
                        + ".apk");
            }
        }
    }
    

    5、AAPT2 编译报错 AAPT2 error

    Error:java.util.concurrent.ExecutionException: 
      com.android.tools.aapt2.Aapt2Exception: 
      AAPT2 error: check logs for details
    

    解决方案:在gradle.properties中关闭APPT2 编译,加上下面这行代码就好了:

    android.enableAapt2=false

    注:如果是eclipse转到as上的项目,可能没有gradle.properties文件,请在项目根目录中手动创建。


    6、apt插件问题

    Error:Cannot choose between the following configurations of project :mylibrary:)
    Error:Cannot choose between the following configurations of project :mylibrary:
    - debugApiElements
    - debugRuntimeElements
    - releaseApiElements
    - releaseRuntimeElements
     All of them match the consumer attributes:
    

    解决方案:

    • 1.在project的build.gradle中删除
      classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    • 2.在module的build.gradle中删除
      apply plugin: 'android-apt'
    • 3.将module的build.gradle文件中的dependency的apt 'com.jakewharton:butterknife-compiler:8.1.0'
      改为 annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0'

    7、Execution failed for task ':app:preDebugAndroidTestBuild

    Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
    Conflict with dependency 'com.android.support:support-annotations' in project ':app'. 
    Resolved versions for app (26.1.0) and test app (27.1.1) differ. See 
    https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.
    

    原因:
    发生这种类型的错误,原因是当我们修改了.build中的compileSdkVersion,产生所依赖的dependency与当前版本不一致导致的。

    解决方案:点击 Build->Rebuid Project 菜单,重新编译一下项目,就OK了,如果还不行,先点击 Build->Clean Project 菜单,然后再点击 Build->Rebuid Project 菜单。


    8、Error:Execution failed for task ':react-native-update:compileDebugNdk'.

    Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of    
    Android Studio. Please switch to a supported build system.
    Consider using CMake or ndk-build integration. For more information, go to:
    [https://d.android.com/r/studio-ui/add-native-code.html#ndkCompile](https://link.jianshu.com?
    t=https%3A%2F%2Fd.android.com%2Fr%2Fstudio-ui%2Fadd-native-code.html%23ndkCompile)
    To get started, you can use the sample ndk-build script the Android
    plugin generated for you at:
    D:\react-native\yiguan_rn_demo\node_modules\react-native-update\android\build\intermediates\ndk\debug\Android.mk
    Alternatively, you can use the experimental plugin:
    [https://developer.android.com/r/tools/experimental-plugin.html](https://link.jianshu.com? 
    t=https%3A%2F%2Fdeveloper.android.com%2Fr%2Ftools%2Fexperimental-plugin.html)
    To continue using the deprecated NDK compile for another 60 days, set
    android.deprecatedNdkCompileLease=1521518279826 in gradle.properties
    

    解决方案:在gradle.properties文件,把android.useDeprecatedNdk去掉,换成android.deprecatedNdkCompileLease=1521518279826 (后面这个数字按错误日志里的填)


    本文转自 [Android Studio3.0更新之路(遇坑必入)],另外也加了自己的一些理解。(https://mp.weixin.qq.com/s/VzMHjmKcI0hOHYrWK3Eqrw)
    参考文章:https://www.jianshu.com/p/15afb8234d19


    最后,推荐一本书给大家看看,希望对大家有帮助。

    相关文章

      网友评论

      • start筑梦:请问,问题4 ,打包的按这个改没用,是用的友盟打包
        AWeiLoveAndroid:@start筑梦 自己去友盟官网文档去看吧,这个我就没办法去解决了。。三方的sdk出问题,还是去他们官网看看吧
        start筑梦://通过脚本动态修改productFlavors的值
        productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
        这是我之前写的,然后把这个注释了,改成了你发的这个,还是会报错,我是不是没有写全呢,谢谢解答
        AWeiLoveAndroid:已经更正,你再去试试看,有问题欢迎提出
      • Ansel_Young:赞一个。
        请问有没有遇到更新完之后输入法输中文不提示或者看不到选词提示的情况。
        AWeiLoveAndroid:试试其他的输入法。。
      • boyang的博客:第三个问题,百度了,也按你说的做了,还是不行
        boyang的博客: @阿韦爱Android 好的,谢谢,我去试试
        AWeiLoveAndroid:建议删除C盘的.gradle 然后删除Android Studio安装路径里面的gradle文件夹, 重新下载一个gradle压缩包,解压放进去Android Studio安装路径里面替换。试试看。
      • dceecc979eaa:最大的坑难道不是上面这些所有的坑都踩过了,然后生成的release包升级安装安装不上吗? 升级安装时系统读不到版本号,认为是降级安装,直接安装失败,解决办法是gradle plugin 3.0.0降到gradle plugin 2.3.3
        AWeiLoveAndroid:@het 不愧大佬。公司开发还是用的2.3:mask:
      • 773e36d35f14:failed to find build tools revision26.0.2。没有外网这个怎么解呀,gradle里面的compilesdkversion和targetsdkversion都改了,还是没用

        AWeiLoveAndroid:如果你本地的sdk下载了对应的版本 应该是可以找到的 另外你试试gradle的离线模式
      • 54be7e942026:第3点那个Unable to merge dex,貌似删了.gradle重新build,还是没用啊。难道我踩到天坑了:(

        另外不只有有木有兄弟遇到AS3.0里我的QQ输入法的候选词都无法显示了
        boyang的博客: @jhyc7719 老哥,你的解决了没
        chon_den:碰到了,暂时把QQ 输入法设置里边切换到 “单行输入模式”(可能会不习惯)
      • b89dae9e30b0:新的 gradle 插件不再支持 annotation processors,如果需要使用需要显式声明
        defaultConfig{
        ...
        versionCode 1
        versionName 1.0
        javaCompileOptions {
        annotationProcessorOptions {
        includeCompileClasspath false
        }
        }
        }
      • 止念观息:哎,自动adt被抛弃之后,android的坑越来越多
      • 建航:第二个问题在报错的节点里面加上matchingFallbacks = ['release','debug']也可以解决,主要问题是另外的module没有相应的节点,给它设置对应的就行了
        AWeiLoveAndroid:@建航 非常感谢
        建航:在app文件里面
      • 为何是Hex的昵称:mac 下 AS 3.0 的 Terminal 中文乱码
      • fa38c7f8fa37:第二个问题有解决方法:在 can not resolve 的 project 加上提示缺失的 buildType 即可,空的 buildType 也可以。
        AWeiLoveAndroid:非常感谢
      • 王洪贺:把gradle plugin版本升级至3.0你还会遇到flavorDimensions的问题,哈哈,坑可不只是这么点,不过确实提示更好用了

      本文标题:开发工具总结(4)之Android Studio3.0填坑指南

      本文链接:https://www.haomeiwen.com/subject/xhsppxtx.html