项目中遇到的一些问题或异常以及处理方法

1、LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

遇到该异常是在listview中适配器中的getView方法里,导入布局后,设置布局中的控件layoutParams时报此异常,因item的父控件是listview,所以使用LayoutParams需要找其对应的类型,需要将LinearLayout LayoutParams修改成AbsListview LayoutParams即可;

2、getView方法中在给textview等其他控件设置资源时,使用到 if 语句或者 else if 时,上下滑动listview,当返回到第一屏时,部分复用的item指针position发生了变化;

在使用viewholder的适配器当中,使用if语句设置资源时,必须使用else,如果不设置在滑动的时候当convertView不为null时只走了if当中的一种情况,再滑动回原来的状态时,convertView使用的缓存视图当中的值,因为滑动前后走if情况不一,所以照成复用的时候会有数据错乱以及当前指针跟position不一致的情况,正确做法是使用if的时候必须使用else;在给控件设置点击事件的时候,在if情况中设置监听的时候,在else当中也必须要设置监听,else当中监听器设置nul即可;

3、Error:Execution failed for task ':app:processDebugManifest'.> Manifest merger failed with multiple errors, see logs

这个是Android studio中导入eclipse的第三方依赖包出现的错误,提示是在清单文件里的错误,把manifest中的application标签内容全部删除后再次刷新后错误消失,具体原因待查。

另外贴上其他网友的解决办法  http://blog.csdn.net/qq_33785670/article/details/52455241

4、studio项目关联SVN后,如何断开连接并重新share subversion

在项目的project模式下,打开.idea目录下的vcs.xml文件,将修改为也就是把SVN删除;

然后打开项目所在磁盘,打开项目文件夹后把.svn文件夹删除,注意.SVN是隐藏文件,需要设置可查看隐藏文件;

再回到as中查看,这时就可以重新关联SVN了;

5、okhttp的接收结果中报java.lang.IllegalStateException: closed异常

这是因为OkHttp请求回调中response.body().string()只能有效调用一次,在调用了response.body().string()方法之后,response中的流会被关闭,因此不能二次调用; 

6、android aidl导出jar包

Android aidl导出jar包时需要注意,直接导出src会出现类找不到的情况。解决方法:导出时把gen文件夹下aidl生成的 Java文件选上即可。

7、Can't create handler inside thread that has not called Looper.prepare()

Toast 的显示需要出现在一个线程的消息队列中;因为Toast在创建的时候会依赖于一个Handler,一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对象,而在主线程中会默认创建一个Looper对象,因此不能在子线程中直接显示Toast;
有两种方法解决:
1、在开启的子线程中执行Looper.prepare()来构建一个Looper,然后在显示Toast,但是不要忘记执行Looper.loop()来加载这个Looper,
2、直接使用主线程的Looper对象;获取主线程的Looper的方法是Looper.getMainLooper()

8、Android Studio 执行 lint task的时候 可能会遇到如下错误。

Execution failed for task ':app:lint'.> Lint found errors in the project; aborting build.
只要在当前app的app/build.gradle文件内增加如下代码,

android {  

lintOptions {      

abortOnError false  

    }    
}

9、INSTALL_FAILED_NO_MATCHING_ABIS 安装包安装失败

由于本机设备是x86架构,而所运行的项目为arm架构,只需要在项目的build.gradle中的android中加入以下代码:

splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a'
            universalApk true
        }
    }

10、Error: Default interface methods are only supported starting with Android N (-- min-api 24)

原因分析: java8才支持静态接口方法,Android N 要求jdk版本为1.8
解决方案:定义和调用静态接口方法的module编译时都使用jdk1.8即可;

11、Unity工程导出Android apk失败,错误信息如下:

错误1:

CommandWithNoStdoutInvokationFailure: Gradle initialization failed.
UnityEditor.Android.Command.RunWithShellExecute (System.String command, System.String args, System.String workingdir, System.String errorMsg) (at :0)
UnityEditor.Android.AndroidJavaTools.RunJavaWithShellExecute (System.String args, System.String workingdir, System.String error) (at :0)
UnityEditor.Android.GradleWrapper.WarmupGradle (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingDir, System.String baseCommand) (at :0)
Rethrow as GradleInvokationException: Gradle initialization failed.
UnityEditor.Android.GradleWrapper.WarmupGradle (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingDir, System.String baseCommand) (at :0)
UnityEditor.Android.PostProcessAndroidPlayer+c__AnonStorey0.<>m__0 () (at :0)
System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) (at :0)
System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at :0)
System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at :0)
System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) (at :0)
System.Threading.ThreadHelper.ThreadStart () (at :0)
UnityEngine.UnhandledExceptionHandler:m__0(Object, UnhandledExceptionEventArgs)

解决方案:在Build settings界面,安卓导包选项中,生成系统选择Internal(deprecated)一项,其他不变;如下图:

项目中遇到的一些问题或异常以及处理方法_第1张图片

12、Could not find com.android.tools.build:aapt2:3.3.2-5309881.

错误信息:

Could not find com.android.tools.build:aapt2:3.3.2-5309881.
Searched in the following locations:
  - file:/Users/heshuiguang/Library/Android/sdk/extras/m2repository/com/android/tools/build/aapt2/3.3.2-5309881/aapt2-3.3.2-5309881.pom
  - file:/Users/heshuiguang/Library/Android/sdk/extras/m2repository/com/android/tools/build/aapt2/3.3.2-5309881/aapt2-3.3.2-5309881-osx.jar
  - file:/Users/heshuiguang/Library/Android/sdk/extras/google/m2repository/com/android/tools/build/aapt2/3.3.2-5309881/aapt2-3.3.2-5309881.pom
  - file:/Users/heshuiguang/Library/Android/sdk/extras/google/m2repository/com/android/tools/build/aapt2/3.3.2-5309881/aapt2-3.3.2-5309881-osx.jar
  - file:/Users/heshuiguang/Library/Android/sdk/extras/android/m2repository/com/android/tools/build/aapt2/3.3.2-5309881/aapt2-3.3.2-5309881.pom
  - file:/Users/heshuiguang/Library/Android/sdk/extras/android/m2repository/com/android/tools/build/aapt2/3.3.2-5309881/aapt2-3.3.2-5309881-osx.jar

解决方案:在项目的gradle下的allprojects中添加 google() 库

allprojects {
    repositories {
        //添加谷歌库
        google();
        flatDir {
            dirs 'libs'
        }
    }
}

13、项目编译阶段出现错误:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileJava'

解决方案:在AndroidStudio的terminal中输入 gradle compileDebugSource --stacktrace -info 命令,重新编译查看gradle的具体报错信息,如果报错中类似 processDebugManifest 信息的,同样把可以使用 gradle processDebugManifest 跟进出错的位置,以此类推,直到找到最终的错误位置;

14、studio配置了忽略提交文件*.iml ,但是提交的时候.iml结尾的文件仍然在svn显示的问题

打开Preferences,在如下图中红色线圈住的位置添加*.iml,即可解决

项目中遇到的一些问题或异常以及处理方法_第2张图片

15、ERROR: The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin

分析: module中build.gradle下的instrumentTest.setRoot(‘tests’) ,instrumentTest已经在旧版本中被弃用导致;

解决:使用 androidTest 替换 instrumentTest 即可;

16、Unknown failure: Failure - not installed for 0 Error while Installing APKs

解决:删除studio项目app下的build文件,然后重新编译;

(注:网上有的方案是在手机设置——>开发者选项——>关闭MIUI优化,有的是开启未知来源软件安装,但这两个方法对我的问题不管用,最后删除build文件夹好使了)

17、com.android.tools.r8.CompilationFailedException: Compilation failed to complete

分析:引用的包冲突、引用的依赖库manifest.xml文件中package名称重复、或者build.gradle 中少jdk1.8的引用;

解决:1、冲突的包删除;

           2、修改依赖库包名package;

           3、在build.gradle中,android括号下添加:

android {

    compileSdkVersion 28

    //添加1.8jdk引用
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

18、om.android.tools.lint:lint-gradle:26.4.0 > com.android.tools.build:builder:3.4.0 > com.android.tools.build:apkzlib:3.4.0

解决:打开项目的build.gradle,添加google库和jcenter库,如下:

buildscript {
    repositories {
        //添加google库和jcenter库,顺序必须google库在前
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
    }
}

allprojects {
    repositories {
        //添加google库和jcenter库,顺序必须google库在前
        google()
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

19、打签名apk包报错:Could not find org.codehaus.groovy:groovy-all:2.4.15.

解决:方法同18,在项目的build.gradle中添加google库和jcenter库,顺序必须google库在前

allprojects {
    repositories {
        //添加google库和jcenter库,顺序必须google库在前
        google()
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

20、libiPhone-lib.a错误 

unity导出xcode工程报libiPhone-lib.a错误 

解决:在build setting中找到 other link flags  添加三项:-Wl    -undefined    dynamic_lookup

21、INSTALL_FAILED_INSUFFICIENT_STORAGE

studio编译安装apk时提示此问题,是由于手机的存储空间不足,删除一些APP即可;

22、Could not resolve all files for configuration ':app:debugRuntimeClasspath',并提示某个libs下的包找不到

出现该问题的背景,一个工程依赖一个library,这个library接入了第三方的SDK;

解决:将整个工程进行编译时,需要在app的build.gradle中的repositories中加入library的libs路径,如下方式:

项目中遇到的一些问题或异常以及处理方法_第3张图片

 

持续更新...

 

你可能感兴趣的:(工具)