• Android androidStudio构建项目过程中问题解决方案(持续更新)


    目前来说,IDE开发工具已成为一个高度集成的开发工具,我们在做android开发,目前主要有eclipse或者AndroidStudio两大阵营,由于eclipse平台基本已被放弃,所以我们目前在做的就是已AndroidStudio为核心的平台,高度集成就会出现各种兼容问题,以下将是在AndroidStudio平台开发过程遇到问题与解决方法

    1、libs文件夹下的资源无法加载

    解:

    这个问题在初学者身上经常遇到,直接在build指定如下

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    在build文件下dependencies引入如下

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    如果依旧找不到,看jar包是否add上去,如果没有,右键add Library,如果在不行,

    2、libs下so文件无法加载

    在main文件夹下新建jniLibs文件夹,把libs下文件copy进去,

    修改build文件android{

    sourceSets { main { jniLibs.srcDirs = ['libs'] } }

    }

    3、引入的包有冲突,如何排查

    3.1、先把项目中引入的包都给列出来,如何列出来,通过task的help来完成

    A:代表项目名称

    B:代表该项目下的task

    C:是help文件夹下的gradle脚本

    D:dependencies执行完会列出当前项目中依赖的所有项目

    找到冲突包的module name,然后确定和哪个项目有冲突

    如果A项目和B项目有冲突,如果剔除冲突?

    A:implementation 'com.test.woniu:okhttp:3.12.12'

    B:implementation 'com.action.memu:fire:3.12.12'

    如果 A和B冲突

    implementation( "com.test.woniu:okhttp:3.12.12"){

    //只剔除groupid为com.action.memu下,模块为fire的

    exclude group: 'com.action.memu', module: 'fire'

    //剔除groupid为com.action.memu所有的包

    exclude group: 'com.action.memu'

    }

     old是低版本

    new是当前最高 版本,高版本会覆盖低版本

    4、布局无法预览

    这个问题已专门发过一片文章,可以参考布局无法预览的解决方案

    5.Jar包和和aar冲突 Duplicate class xxxx found in modules

    这种冲突基本来源于包的冲突,可以剔除,如果module libs里面引用jar,其他aar将jar打包上传,

    在整个项目中,就会报错Duplicate class xxxx found in modules,因为这个类已出现在其他module里面,即使剔除也不行。

    这种解决办法:

    需要用到jar的都采用libs加添加,或者都改用aar依赖库。否则还是会报错

    6.so文件多份,one more than aa.so,或者其他文件多出

    解决办法:

    1.看错误日志,多什么就将这个复制

    packagingOptions{
    exclude 'lib/armeabi-v7a/aa.so'
    }

    2.如果多个项目用到aa.so文件,其实可以将aa.so做成aar依赖,或者只在一个项目libs中保持一份,这样也可以避免

    7.修改gradle文件就要sync的办法

    有时候我们修改了gradle东西,就需要去同步一下,这样很费时,有些场景甚至不需要同步,这时候我们不同步ide可能会提示问题等

    解决:我们可以忽略这些

    只要点击ignore these changes,就不会立即同步

    8.跑debug包无法安装:

    在properties文件中添加:android.injected.testOnly = false

    9.引用本地代码,修改后不生效

    我们在做大型项目时,会将自己的module打包成aar集成到主工程或者丢给其他项目使用,但是我们在正常开发过程,又需要把自己的项目导入到主工程,进行调试,会发现突然出现代码修改完不生效

    解决:

    一般出现这个问题是自己的module被其他aar引用了,在主工程项目中,别人的aar包在你的项目之前已导入,在打包过程中,优先加载了别人的模块,导致你的项目被覆盖了。所以导致你本地的代码修改了不生效。debug也走不进去等情况。

    出现这种情况,在调试过程中,我们可以通过dependencies查找我们的module aar被哪些aar依赖了,然后通过剔除办法将我们的项目剔除

    例如:

    moduleA依赖了moduleB,现在moduleB注销了依赖,引入本地代码进行调试,

    这时候moduleA代码已覆盖了moduleB,这时候需要moduleA剔除moduleB,moduleB本地代码才会生效。

    implementation (“com.test.woniu:moduleA:3.12.12”){

    exclude group: 'com.action.memu', module: 'moduleB'

    }

    这样剔除了moduleB的依赖库,再执行,本地代码才会执行,有多少依赖在调试都要剔除本地模块库。

    10.kotlin报错:

    kotlin library {0} was compiled with a newer kotlin compiler and not be read

    这个问题出现在我使用车载库的时候,升级到最高版本,androidx.car.app:app-automotive:1.3.0-alpha01库使用的kotlin版本是1.7.0,而我本地的库是1.3.10,所以在高版本会覆盖我低版本,但是无法加载本地插件,导致这个问题

    解决:

    出现这个问题的原因还是包中库的冲突导致,最好的排查就是把项目中的依赖库给找出来,查看kotlin的库被哪些引用,引用的版本是什么?可以参考上方包冲突版本。

    这样很快就能定位到工程的问题出现在哪里。 

    11、依赖版本冲突,需要强制使用某个版本

    AndroidStudio implementation的依赖是会自动检查代码库,如果没有剔除,低版本会被高版本覆盖,如果这个高版本修改了一些api,我们也用不到,但是代码执行时,会报错,这时如果我们要在依赖中指定module下的某个库强制使用当前版本即可。

    解决:

    implementation('androidx.appcompat:appcompat:1.0.0'){
        force=true
    }

    这就是强制使用appcompat版本为1.0.0,这样就完美避开问题

    12.代码库的引用

    我们在开发过程中,如果用到某个库,都是通过import插进来

    这样会导致项目会越来越大,很浪费空间,因为import module也是将module拷贝一份到当前项目下,每个项目都是文件存在,只要将文件读取进来同样也是可以的

    解决:

    include ':test'
    project(':test').projectDir = new File("C:\\android\\code\\TestProject\\app")

    需要用到两个关键api:

    include和project

    include是将project导入进来,

    project是创建一个文件,把需要导入的项目路径拷贝进来

    这个文件放在哪?

    正常文件配置在setting.gradle文件中,因为我们的module都是在这边配置的

    然后在build.gradle如何使用?

    这是一个project,所以 implementation project(':test')即可

    13.模块之间引用资源找不到

    在A模块引用B模块,但是在build报错看,找不到资源,原因是默认隔离了两个模块,资源会进行覆盖。打包后,每个module的资源都是独立的,防止资源冲突

    解决:在gradle.properties中关闭即可:

    解决办法
    gradle.properties中:

    android.nonTransitiveRClass=false

    *********************************************************************************************

    未完待续

  • 相关阅读:
    jenkins打开html不显示样式问题(包含mac安装启动jenkins)
    【基于unity制作的游戏】《ZERO:天元》
    python 数据挖掘与机器学习核心技术
    【MySQL篇】多表查询知识点——子查询(全)
    以太坊 CALL 数据解析【ETH】
    MySQL操作合集
    国际视频编解码标准提案下载地址
    进阶JAVA篇-深入了解枚举与抽象枚举
    【动态规划】leetcode 343. 整数拆分
    【前端开发】JS同步与异步调用,Vue2基础知识
  • 原文地址:https://blog.csdn.net/qq36246172/article/details/126608902