Android bug日志/错误收集

本文档汇总了一系列Android开发过程中常见的技术问题及其解决方案,包括高并发下使用context引发的崩溃、应用无法调试、InstantRun配置问题、代码更新异常、构建失败、RecyclerView滑动异常及Glide加载图片设置等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bug 收集

1. Fatal signal 11 (SIGSEGV), code 2, fault addr 0x7f674fb000 in tid -8665652 (
高并发下使用context 导致的 具体原因不明白
解决办法 使用context的方法 加 synchronized
```
  public synchronized static byte[] drawable2Byte(Context context, int tile_2) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.tile_2);
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);

    byte data[] =baos.toByteArray();
    bitmap.recycle();
    try {
        if (baos != null)
            baos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return data;
}

```
2. Android 错误无法debug 运行

Cannot debug application xx.xxx.xxx.app on device huawei-huawei_g7_tl00.

This application does not have the debuggable attribute enabled in its manifest.

If you have manually set it in the manifest, then remove it and let the IDE automatically assign it.

If you are using Gradle, make sure that your current variant is debuggable.
这里写图片描述

3. Instant Run requires ‘Tools | Android | Enable ADB integration’ to be enabled.

错误: Instant Run requires ‘Tools | Android | Enable ADB integration’ to be enabled.
这里写图片描述

4. Android studio 无法更新代码 AssertionError: null

android studio 在更新SVN 出现
AssertionError: null
在文件目录下 更新代码出现
Error: Please execute the ‘Cleanup’ command.
只要在 Cleanup 下 就可以更新了

5. Android 错误Error:Execution failed for task ‘:app:preDexDebug’.
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe'' finished with non-zero exit value 1

原因

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

这个问题有很多问题导致的 有可能重启下studio 就好了

6. Process ‘command ‘G:\android-sdk-windows\build-tools\20.0.0\aapt.exe’’ finished with non-zero exit v
  1. 暂时发现targetSdkVersion 要和supoport 相同 就是supoport 版本 不能高于 targetSdkVersion
  2. 查找是否有包冲突
  3. 在build.gradle 中 android 字段里添加
dexOptions {
    javaMaxHeapSize "4g"
    preDexLibraries = false
}
  • did you try to to “Build”-> “Clean Project” and then go to “Build” -> “Rebuild Project”
7.Android Studio升级3.1.2
org.gradle.internal.resource.transport.http.HttpErrorStatusCodeException: Could not HEAD 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/2.3.3/gradle-2.3.3.pom'. Received status code 405 from server: Method Not Allowed

删除.gradle 文件夹

8. Recycyle 滑动到最后一项
 Called removeDetachedView with a view which is not flagged as tmp detached.ViewHolder{277104a position=3 id=-1, oldPos=-1, pLpos:-1} android.support.v7.widget.RecyclerView{6e4abbb VFED..... ......ID 0,0-1080,768 #7f09025f app:id/rc_chat}, adapter:com.shangwenwan.sww.adapter.message.ChatAdapter@95248d8, layout:android.support.v7.widget.LinearLayoutManager@94b0431, context:com.shangwenwan.sww.activity.message.ChatActivity@5fff557

原因 使用

 mRcChat.scrollToPosition(mChatAdapter.getItemCount() - 1);

解决 替换成

 mRcChat.smoothScrollToPosition(mChatAdapter.getItemCount() - 1);

9. Glide加载长图时 圆角无效

原因

 getRoundRequestOptions().transform(new RoundedCorners(radius)).centerCrop()

解决

  /**
     * @param url
     * @param imageView
     * @param radius    圆角  单位 px
     */
    public static void withRound2PX(String url, ImageView imageView, int radius) {
        if (checkFinish(imageView)) {
            return;
        }
        GlideApp.with(imageView)
                .load(url)
                .apply(
                        getRoundRequestOptions().transforms(new CenterCrop(),new RoundedCorners(radius))
                )
                .into(imageView);
    }

transforms 是可以设置 顺序 顺序 顺序的
参考 https://blog.youkuaiyun.com/qq_19269585/article/details/80968147

<think>我们正在处理一个关于Android开发中API标记的问题。用户提到:New API must be flagged with @FlaggedApi: field android.view.KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN [UnflaggedApi] 这表示在Android的KeyEvent类中,有一个字段KEYCODE_FP_TOUCH_SWIPE_DOWN没有被标记为@FlaggedApi,而根据要求,新的API必须使用该注解标记。 解释: 在Android开发中,@FlaggedApi是一个用于标记那些尚未正式发布或处于实验阶段的API的注解。这有助于开发者识别这些API可能存在的风险,并且在一些严格的代码审查工具(如Lint)中,如果使用了未标记的新API,会给出警告或错误。 具体到这个问题,错误信息指出android.view.KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN这个字段是一个新的API,但没有被标记为@FlaggedApi。 解决方案: 1. 如果我们是在使用这个API,我们需要等待Android团队将其标记,或者如果我们有权限修改系统代码,我们应该给这个字段加上@FlaggedApi注解。 2. 但是,通常我们作为应用开发者,无法修改Android框架的代码。因此,我们可能需要在我们的代码中忽略这个错误(如果确定要使用)或者避免使用这个API,直到它被正式标记并发布。 然而,错误提示来自UnflaggedApi检查器,这通常是在编译或静态分析时出现的。我们可以通过添加注解来抑制这个错误(如果我们确定要使用且无法等待官方修复)?但是注意,我们不能在系统类上添加注解,所以只能在我们自己的代码中处理这个警告。 实际上,对于系统API,我们无法直接添加@FlaggedApi,因为它是Android框架的一部分。因此,正确的做法是: - 如果我们是在开发系统应用(有系统权限),可以尝试在系统源码中给该字段添加@FlaggedApi,然后重新编译系统。 - 如果是普通应用开发者,通常不应该使用未标记的API(因为可能不稳定),或者我们可以通过注解来抑制这个警告(如果确定要使用且愿意承担风险)。 抑制警告的方法(在普通应用开发中): 在调用处或声明处使用@SuppressLint("UnflaggedApi"),但注意,这个字段是系统类中的,我们无法修改系统类。因此,我们只能在我们使用这个常量的地方进行抑制。 例如: ```java @SuppressLint("UnflaggedApi") public void someMethod() { // 使用KEYCODE_FP_TOUCH_SWIPE_DOWN int keyCode = KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN; } ``` 但是,最好的做法是避免使用未标记的API,因为它们可能不稳定,并且在未来的版本中可能会改变。 另外,如果这个错误是在我们自己的代码库中出现的(比如我们定义了一个新的API而没有标记),那么我们应该在自己的API上添加@FlaggedApi注解。 因此,针对这个具体问题,如果我们是普通应用开发者,我们可以选择: 1. 不使用这个常量,改用其他方式。 2. 在使用的代码处添加@SuppressLint("UnflaggedApi")来抑制警告。 3. 等待Android官方修复,即在新版本的SDK中标记这个API。 注意:如果这个错误是在我们编译系统代码(如AOSP)时出现的,那么我们应该在定义这个常量的地方添加@FlaggedApi注解。 例如,在AOSP中,我们修改KeyEvent.java文件: ```java @FlaggedApi public static final int KEYCODE_FP_TOUCH_SWIPE_DOWN = ...; ``` 现在,根据要求,我们需要在回答后提出3-5个相关问题。 回答总结: 问题:在编译或静态分析时出现错误,指出android.view.KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN没有使用@FlaggedApi标记。 解释:@FlaggedApi用于标记新的或不稳定的API,这个错误是因为这个字段没有被标记。 解决:作为普通应用开发者,我们可以抑制警告或避免使用;作为系统开发者,应该在定义处添加注解。 代码示例(针对普通应用开发者如何抑制警告): ```java @SuppressLint("UnflaggedApi") private void handleSwipeDown() { // 使用未标记的API int keyCode = KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN; // ... 其他逻辑 } ``` 注意:如果这个常量是新增的,可能只在较新的Android版本中存在,因此在使用时还需要注意版本兼容性问题。 现在,提出相关问题:</think>在 Android 开发中,"New API must be flagged with @FlaggedApi: field android.view.KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN [UnflaggedApi]" 错误表示指纹触摸滑动事件常量 `KEYCODE_FP_TOUCH_SWIPE_DOWN` 未使用 `@FlaggedApi` 注解标记。这通常发生在使用较新的 Android API 时,需要开发者显式声明 API 的兼容性状态。 ### 问题解析: 1. **错误原因** Android 要求所有新增但尚未稳定的 API 必须用 `@FlaggedApi` 标注,以明确其"实验性"状态。该常量是新增的指纹操作事件(Android 13+引入),但未正确标记。 2. **解决方案** - **短期处理**:在代码中使用 `@SuppressLint("UnflaggedApi")` 临时抑制警告(需承担兼容性风险) ```java @SuppressLint("UnflaggedApi") void handleSwipe() { int keyCode = KeyEvent.KEYCODE_FP_TOUCH_SWIPE_DOWN; // 事件处理逻辑 } ``` - **长期方案**:等待 Android 官方在后续 SDK 中正式标记该 API,或改用替代事件常量(如 `KEYCODE_NAVIGATE_DOWN`) 3. **核心作用** `@FlaggedApi` 机制防止开发者意外使用未稳定的 API,避免: - 不同设备厂商的兼容性问题 - 未来版本中的 API 行为变更导致崩溃 - 安全漏洞(如未经充分测试的硬件交互)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值