美文网首页
Android studio 使用过程中的问题方案和小贴士(一)

Android studio 使用过程中的问题方案和小贴士(一)

作者: Ansel_Young | 来源:发表于2017-05-30 22:00 被阅读0次

    一 、问题方案

    • 报错问题

    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.

    如图:

    Paste_Image.png

    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 三个文件夹

    • 报错问题

    Program type already present: android.content.pm.IPackageDeleteObserver

    A:依赖冲突,解决:双击shift,全局查找冲突的这个IPackageDeleteObserve ,发现有两个包都引入了这个,删掉一个包,重新构建就OK了

    • 报错问题

    文件本地查看没问题,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后将其删除

    • 报错问题


      微信截图_20200413193710.png

      A:引用androidX冲突问题
      在gradle.properties文件中加:

    android.useAndroidX=true
    android.enableJetifier=true

    • 报错问题


      微信截图_20200820201254.png

    A:代理配置问题

    打开 ~/.gradle/gradle.properties (如果是windows的话应该在
    C:\Users\用户\.gradle\gradle.properties),把https的两行注释掉即可,重启AS。

    image.png

    二、小贴士

    <一> 导入别人的项目如何更改Gradle版本跟自己的相匹配

    我们在导入别人的项目时,经常会卡在这个界面,如下图所示:


    Paste_Image.png

      这是由于在首次导入项目的时候AS默认是使用 gradle-wrapper-properties 中默认的设置,它会从网上下载所需要的对应版本的 gradle。这时我们只要把默认的加载修改为我们本地有的就ok了。即修改gradle-wrapper-properties 文件,同时修改build.gradle对应的dependencies中classpath路径,如图所示:

    Paste_Image.png Paste_Image.png

    另一种方法就是下载对应的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。

    Paste_Image.png

      操作之后,在你的Module的build.gradle中会增加了

    Paste_Image.png

    这个时候我们已经添加了framework.jar包,但是我们还有改变framework.jar的作用域属性,右键你的module,Open Module Setting,然后将framework.jar的Scope改为 Provided 。如图所示:

    Paste_Image.png

    改了framework.jar的作用域后,Module的build.gradle也会有改变,之前的compile files(‘libs/framework.jar’),会变成provided files(‘libs/framework.jar’)。

    2,改了framework.jar 的scope后,再在修改project的build.gradle文件,改成如下所示:

    Paste_Image.png

    这是在原有的基础上加了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文件放进去就行了,如图所示:

    QQ截图20170325190549.png

      至于为什么这么放置,其实是有一定依据的,原理如下:
      其实在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下的工程一样,就改这里的值就可以了。

    mark

    相关文章

      网友评论

          本文标题:Android studio 使用过程中的问题方案和小贴士(一)

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