[技术博客] Android 开发 Bug Log

大大小小的bug,聪明的愚蠢的都有, 持续记录中......

  1. java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.termux/com.termux.app.TermuxActivity}: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class com.google.android.material.floatingactionbutton.FloatingActionButton

    控件FloatingActionButton 所在的Activity的theme是自定义的Theme, 而这个控件要求app theme为Theme.AppCompat.在xml中修改对应的Activity的android:theme="@style/Theme.AppCompat"

  2. android activity is not an enclosing class

    这通常是个很尴尬(新手易犯)的错误, class 写成this了,也可能真的是内部类的问题.

    Intent intent  = new Intent(MainActivity.this, xxxActivity.this);
    //改成
    Intent intent = new Intent(MainActivity.this, TermuxActivity.class);
  3. Attempt to invoke virtual method

    NullPointerException:Attempt to invoke virtual method...

    多半是空指针问题, 有的是控件找不到, 有的是资源找不到, 有的是各种属性方法错误,但是没有报出这些个bug,而是产生了一个NullPointer, 然后在NullPointer上调用方法,就会报这个bug。很容易定位。

  4. 兼容性Bug: AndroidX

    We hope the division between android.* and androidx.* makes it more obvious which APIs are bundled with the platform, and which are static libraries for app developers that work across different versions of Android.

    从 API 28(Android 9.0,Pie)开始,Google 推荐开发者从原来的各种支持库转移到一个新版本的名为 AndroidX 的支持库。它相比老支持库有着无需操心版本控制、实时更新的优点。原有的支持库将被保留并且可以继续使用,但接下来所有新的支持都将发布在 AndroidX 上。

    由于我们的项目使用了多个开源项目的代码作为基础,兼容性问题及其明显,有各种不同版本的com.android.support 依赖库,因此我们决定统一使用AndroidX来解决兼容性难题。

    AndroidStudio 迁移项目到AndroidX: 点击 Android Studio 的 Refactor > Migrate to AndroidX...

    这能解决大部分的支持库兼容问题,但不是全部,对于代码中仍然存在的各种com.android.support.XXX可以在https://developer.android.google.cn/jetpack/androidx/migrate, 找到对应包名的改动,然后在工程中对应更改就行了。

    AndroidX:https://developer.android.google.cn/jetpack/androidx

  5. Android 添加第三方lib和jar

    在app的libs目录中拷贝所要假如的.so文件或者.jar文件

    在app模块的build.gradle中的android闭包中加入:

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

    点击gradle sync同步整个工程即可。**Note: **模拟器的架构通常是x86, 而通常的android设备为aarch64, 有可能.so文件在模拟器可用而在设备上不能使用。

  6. JNI 与 NDK

    java本地接口为JNK,android的本地接口为NDK, 主要用于调用本地C/C++接口。

    配置NDK:

    SDK Manager ➡️SDK tools, 勾选NDK和LLDB,apply & OK

    注意NDK的版本,容易因此报编译上的bug.

    termux会使用本地C接口开进程来运行bash或者别的shell。绕过android的层层封装。

  7. View 填充bug

    自定义的View很容易遇到这个bug:

    android.view.InflateException: Binary XML file line #0: Error inflating class

    在对应的xml文件中定位错误的元素。

    可能的原因有很多:

    1. 在自定义的View中使用了高版本的SDK中的方法,在低版本SDK中运行时出现android.view.InflateException。需要进行SDK版本的判定,改写相关操作。
    2. 自定View在布局中出现错误的书写
    3. 内部自定义view出现android.view.InflateException的情况

    refer

[技术博客]Android 开发 Bug Log的更多相关文章

  1. [技术博客] Android 自动化测试

    [技术博客] Android 自动化测试 安卓自动化测试工具与平台的搭建 类似于网页端自动化,安卓测试的自动化也主要是针对控件的自动化.其原理就是通过python(其他语言) 的脚本来代替我们手动完成 ...

  2. 【新版】Android技术博客精华汇总

    [新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...

  3. [技术博客] 软工-Ruby on Rails 后端开发总结分享

    [技术博客] 软工-Ruby on Rails 后端开发总结分享 在这次软件编写中,我们的后端使用了Ruby on Rails (RoR)框架. Rails框架是用Ruby编写的.这意味着当我们为Ru ...

  4. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  5. 个人技术博客(α)------javaweb的学习路程

    该博文大致内容是学习的一个过程,心得,并不是以技术博客为主,在此说明. 关于javaweb的学习开始的时间大概是从大二下(2017年6.7月份)的暑假开始的,在学长的介绍下加入了实验室进行学习,由于是 ...

  6. IT技术博客收藏

    1. coolshell.cn 特点: 每篇都是精品 2. 云风 特点: 3. 阮一峰的博客 特点:高精深 3. offbye涛声依旧-全端技术博客 特点: android的开发技术比较多,非常值得一 ...

  7. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

  8. 最值得收藏的java技术博客(Java篇)

    第一个:java_my_life 作者介绍:找不到原作者信息.大概做了翻阅全部是2012年的博客. 博客主要内容:主要内容是关于Java设计模式的一些讲解和学习笔记,在相信对学习设计模式的同学帮助很大 ...

  9. [福大软工] Z班——个人技术博客评分

    个人技术博客 作业地址 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering2015/homework/1070 作业要求 个人技术博客单次作业 ...

随机推荐

  1. [ROR] 如何在mixin模块中定义类方法(Howto define class methods in a mixin module)

    方法一: 修改模块的include方法 module Bbq def self.included(base) base.send :include, InstanceMethods base.exte ...

  2. golang中uint8字节切片转字符串

    假如拿到了一个字节切片test1 = {'a', 'b', 'c', 'd', 11} package main import ( "fmt" "reflect" ...

  3. spring 请求参数和路径变量

    请求参数和路径变量:客户端传递参数给服务端的两种方式 请求参数可以发送值传递给服务器,请求参数采用key=value的形式并使用“&”符号进行参数间的分隔,例如: http://localho ...

  4. Java 控制流程 之 循环语句

    循环:循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一 ...

  5. JavaScript 之 创建元素

    方式一: 使用  document.write() 语法格式: document.write('新设置的内容<p>标签也可以生成</p>'); 注意:在使用方式的时候,writ ...

  6. xenserver 备份和还原

    1. 备份和还原xenserver host系统 //备份 # xe host-backup file-name=[name.xbk] -s [ip] -u [username] -pw [passw ...

  7. java学习(2):类和对象

     一.类 类可以看成是创建对象的模板,它描述一类对象的行为和状态.创建对象也叫类的实例化.类必须先定义才能使用. 通过下面一个简单的类来理解下Java中类的定义: public class Dog { ...

  8. rf中setup与teardown

    setup:是测试一个用例(或者套件)前要做的事情 teardown:是测试后要做的事情 在RF中,每个测试套件目录.测试套件文件.测试用例 都可以有自己的setup 和teardown 所有的 se ...

  9. Linux定时任务运行thinkPHP某个方法

    先上实力: 1.查看正在执行的crontab,用命令crontab  -l ,这样就可以看到哪些任务一直在执行了.2.crontab -e  自动打开文件 编辑定时任务程序 在打开的页面中点击“i”键 ...

  10. js 压缩图片 上传

    感谢,参考了以下作者的绝大部分内容 https://blog.csdn.net/tangxiujiang/article/details/78755292 https://blog.csdn.net/ ...