Android Studio 常见报错

此文章用以记录项目开发中遇到的一些比较常见的bug,以及解决方法,以便以后再次遇到能够有据可查。 

1、将一个项目复制,改名之后,重新打开编译错误,报了如下错误:

com.android.builder.internal.aapt.AaptException: Failed to crunch file

经过搜索后发现原来是在Windows中不允许存在比较长的路径名称所造成的,路径长度必须低于240个字符,如果有那个文件的绝对路径长度超过了240个字符,则会报次错误,编译报错。随意把路径改短后,Android Studio顺利编译通过。

2. 项目打包编译报错:

java.lang.UnsatisfiedLinkError:dlopen failed: /data/app/***.so:has text relocations

原因:在android 开发中调用.so文件,在android 7.0版本中报了上面的错误,经过反向查证,是so文件的编译版本sdk过低了,应该在7.0的sdk以下去编译。

解决办法:将项目目标(targetSdkVersion)SDK版本降低。(我是之前将SDK从18调到了27,故报此错),所以将我自己项目中的SDK27降回了18,重新编译就OK了。

3、Thread already started

进程已经开启,再次开启此进程就会报错

解决办法: new Thread(进程名).start();

4、ANR抓取Log步骤:

adb logcat -d > abc.log 将Log导入到abc.log文件中,默认路径为:C:\Users\(计算机用户名)中;

抓取anr Log 不要过滤,要按确定之后得到的堆信息。

不用root 也可以访问到文件 cat /data/anr/traces.txt(logcat看到堆栈信息的目录)

adb shell cat /data/anr/traces.txt > (目标目录)

文件中ANR的信息过滤,找anr和stack分析,看看是什么原因引起的程序无响应(卡死)。

5、用ApplicationContext去启动Standard模式的Activity会报错:

android .util.AndroidRuntimeException:Calling start Activity from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

解决办法:stardard模式的Activity默认会进入到启动它的Activity所属任务栈中,但是非Activity类型的Context(如ApplicationContext)并没有所谓的任务栈,故报错。将Application改为Activity类型的context即可。

6、android sutdio真机调试[INSTALL_FAILED_UNKNOWN_SOURCES]

解决办法:系统设置 设置->安全->未知来源->开启 即可。

7、打开android studio报错:

Unable to create Debug Bridge:Unable to start adb server: error: could not install *smartsocket* listener:cannot bind to 127.0.0.1:5037:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。(10048)
error: unknown host servicecould not read ok from ADB Server* failed to start daemon *error:cannot connect to daemon'D:\installed\Android\sdk\platform-tools\adb.exe,start-server'failed -- run manually if necessar...

原因:端口复用,可能是手机助手占用了5037端口

解决办法:在控制台查看adb的端口号5037被谁占用了:netstat -aon|findstr "5037"找出对应的PID号:

Android Studio 常见报错_第1张图片

可以看出我这里是pid = 8896 的进程占用了5037端口,所以再用命令 tasklist查看一下所有进程的信息:

Android Studio 常见报错_第2张图片

可以看出,我这里是LdsMobileLink.exe占用5037端口,即鲁大师手机助手,然后只需要去任务管理器,找到进程LdsMobileLink.exe,将其关闭即可。

8. 防止RecycleView刷新时焦点不错乱bug的步骤:

1.adapter初始化后执行setHaStableIds(true)方法;

2.重写Adapter的getItemId(position)方法,让每个view都有各自的id;

3.RecycleView的动画必须去掉;mRecyclerView.setItemAnimator(null);

9. 项目编译的时候报了如下错误:

More than one file was found with OS independent path 'META-INF/library_release.kotlin_module'

这种问题的解决方案:

app下的build.gralde的android {}模块里面添加要过滤的文件的配置:

android {
    ......
    packagingOptions {
        exclude 'META-INF/library_release.kotlin_module'
        //后面如果再出现这样的问题,同样接着往后添加exclude即可
    }
	......
}

然后Sync Now, 然后重新Rebuid 或者 重新打包即可解决;

10. 项目编译报如下错误:

Failed to transform 'D:\Android\gradle\gradle-5.4.1\caches\modules-2\files-2.1\org.bouncycastle\bcprov-jdk15on\1.68\46a080368d38b428d237a59458f9bc915222894d\bcprov-jdk15on-1.68.jar' using Jetifier. Reason: IllegalArgumentException, message: Unsupported class file major version 59. 

解决方案:在工程项目的gradle.properties文件中增加一行

android.jetifier.blacklist=bcprov-jdk15on-1.68.jar

如果后面还有这样的问题,用逗号隔开,往后添加.jar文件皆可;

 11.跳转界面日志显示:

ExtraActivityManagerService: MIUILOG- Permission Denied Activity

这是小米(红米)手机限制引起,解决方法:

手机管家-> 授权管理 -> 应用权限管理 -> 后台弹出界面-> 勾选

12. AS打包Android App Bundle生成上架Google的aab文件时报错

A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
'other' has different root

解决方法:项目路径,签名文件(.jks文件或者.keystore文件),打包生成的abb文件(要上架的abb包)要放在相同的根目录下,无论是 c盘d盘e 盘都行,但是必须一致,然后clean下,打包就能成功了。

13. 编译报错:Entry name 'classes.dex' collided

* What went wrong:
Execution failed for task ':app:packageIconvnetRelease'.
> A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
   > Entry name 'classes.dex' collided

解决方案:要在Module的build.gradle中添加如下代码:

android {
    ...
    packagingOptions {
        ...
        exclude 'classes.dex'
        exclude '**.**'
    }
}

然后同步一下即可。

后期遇到常见的Bug还会持续更新。

你可能感兴趣的:(移动开发,Android,Android,Android,Studio,AaptException)