Android 编译遇到的问题(泪目)

作者: Kandy_JS | 来源:发表于2020-10-22 19:57 被阅读0次

    近日,公司需要改一个APP需求,此APP是上古代码,15年Eclipse代码,几经易手,面目全非。。。因实在不想弄Eclipse的安卓环境,故而迁移到as上面(不是直接兼容的,是把lib,jnilib,asset,res,src,androidmanifest按照as的格式拷贝到个空的as目录中),工程打开遇到各种编译的坑,仅此做记录。。。

    参考

    1、Some file crunching failed, see logs for details解决方案 以及.9patch点9图片的报错的详细修改方法
    2、gradle编译异常记录:finished with non-zero exit value 1-3
    3、警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用

    异常


    1、java.lang.RuntimeException: Some file crunching failed, see logs for details

    1.1、错误原因:构建Gradle的时候,Gradle会去检查一下是否修改过文件的后缀名。
    1.2、常见现象:
    ......1)一般大多数是出现在图片上,.jpg修改成了.png就会出现这个问题。
    ......2)命名图片成了xxx.png.png这类问题
    ......3)“@layout/more_text ”,多了空格,Error: ' ' is not a valid resource name character
    ......4).9图片不规范,必须加一个pix:AAPT err(Facade for 353666562): ERROR: 9-patch image 。。。\res\drawable-hdpi\result_bottom_left.9.png malformed.
    1.3、修改方法:
    ......1)在build.gradle文件中加上aaptOptions 这部分

    android {
        compileSdkVersion 25
        //...
        defaultConfig {
            applicationId "com.hainanfishery.second.detector"
            //...
        }
    
        //增加这个
        //java.lang.RuntimeException: Some file crunching failed, see logs for details
        aaptOptions {
            cruncherEnabled = false
            useNewCruncher = false
        }
    }
    

    ......2).9图片的修改(不赘述):https://blog.csdn.net/dashan618/article/details/71641396

    1.4、问题查找的工具,as每次都提示,see logs,实际上logs体现不了,不如用看build过程找问题 --》 右侧工具栏/Gradle/app工程/:app/build/build


    2323232323.png

    2、被编译的代码或资源有问题: non-zero exit value 1

    2.1、错误原因:资源问题,写的不规范,遗漏啥的。以前的Eclipse工具不帮你找错,有就行了,管你前面类型是啥
    2.2、常见现象:

        .....\layout\mediacontroller.xml:183: error: Error: No resource found that matches the given name (at 'background' with value '@color/mediacontroller_bg').
        .....\drawable\mediacontroller_btn_bg.xml:3: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/mediacontroller_bg_pressed').
        .....\drawable\mediacontroller_btn_bg.xml:4: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/mediacontroller_bg_pressed').
    
    2.3、修改方法:改正确即可
    @mipmap/mediacontroller_bg
    @drawable/mediacontroller_bg_pressed
    

    3、jar包冲突:non-zero exit value 2

    3.1、错误原因:重复的jar冲突
    3.2、常见现象:support-v4以前直接放在lib下,可后来项目直接compile里面都有v4或者v7了之类的
    3.3、修改方法:1)确定,删除没用重复的jar 2)支持可重复,在build.gradle中添加:multiDexEnabled true

    android {
        defaultConfig {
            multiDexEnabled  true 
        }
    }
    

    4、编译的代码过多导致内存不足:non-zero exit value 3

    4.1、修改方法:在build.gradle中添加 dexOptions 的 javaMaxHeapSize

    android {
        dexOptions {
              javaMaxHeapSize "2g" //增加编译时候的内存大小,实际看电脑内存支不支持
        }
    }
    

    5、警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用

        Method method  =  cls.getMethod( " hashCode " ,  new  Class[ 0 ]);  //  编译通过
        Method method  =  cls.getMethod( " hashCode " ,  null );  //  编译失败
    
        allMethod[i].invoke(dbInstance,  new  Object[]{});  //  编译通过
        allMethod[i].invoke(dbInstance,  null );  //  编译失败
    

    6、方法超量:android.dex.DexIndexOverflowException: Cannot merge new index xxxx into a non-jumbo instruction!

    6.1、错误原因:错误出现的原因是 Android设定的方法数是65536个(DEX 64K problem),超过这个方法数,导致dex无法生成,就无法生成APK(限制原因: 早期的Dalvik VM内部使用short类型变量来标识方法的id,就有了 最大方法数的限制65536)
    6.2、修改方法:在build.gradle中添加以下内容

    android {
    defaultConfig {
            multiDexEnabled  true 
        }
    
        dexOptions {
             jumboMode true  //方法数量超过
        }
    }
    

    7、错误: 程序包org.apache.http不存在

    7.1、错误原因:早期版本有apache,后面sdk默认没有了,使用到了HttpClient等需要apache支持
    7.2、修改方法:在build.gradle中添加以下内容

    android {
        useLibrary 'org.apache.http.legacy'
    }
    

    8、cmake的问题,找不到so拉...

    8.1、defaultConfig外面的 externalNativeBuild - cmake,指明了 CMakeList.txt 的路径;
    8.2、defaultConfig 里面的 externalNativeBuild - cmake,主要填写 CMake 的命令参数。异常处理,即由 arguments 中的参数最后转化成一个可执行的 CMake 的命令,可以在 app/externalNativeBuild/cmake/debug/{abi}/cmake_build_command.txt中查到。如下
    8.3、ndk的地方,如果真的在不同cpu幸好下生成so,那么可以对应写,不然不要随便写,否则有可能报错

    android {
        
        defaultConfig {
            ...
            //内部  externalNativeBuild 
            externalNativeBuild {
                cmake {
                    cppFlags ""
                }
            }
    
            ndk {
                abiFilters 'armeabi','armeabi-v7a'
                //arm64-v8a,向下兼容,如果确定没有单独打过v8的so,那么就不要加这个目录
    //                abiFilters 'armeabi','armeabi-v7a','arm64-v8a'//根据需要可选一个或多个
            }
        }
    
      //外部  externalNativeBuild 
       externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
    
    }
    
    
    

    9、编译发布APK时候发生一个严重错误 : Lint found fatal errors while assembling a release target.

    android {
        lintOptions {
            checkReleaseBuilds false
            // Or, if you prefer, you can continue to check for errors in release builds,
            // but continue the build even when errors are found:
            abortOnError false
        }
    }
    

    相关文章

      网友评论

        本文标题:Android 编译遇到的问题(泪目)

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