一、报错信息 在 Android Studio 中 , 使用右键菜单 , 创建 " Bottom Navigation Activity " , 创建完成后 , 启动该 Activity , 报如下错误...cn.zkhw.client.BottomNavigationActivity.onCreate(BottomNavigationActivity.kt:32) 分析上述报错信息 , 可以得知 , 尝试调用 androidx.appcompat.app.ActionBar...的 void setTitle() 方法 , 但是 androidx.appcompat.app.ActionBar 对象是空的 , 直接报空指针异常 ; 进入 setupActionBarWithNavController...configuration) } 在上述代码中调用了 NavigationUI.setupActionBarWithNavController() 方法 , 这是 Navigation 中的常用方法 , 用于将...usesCleartextTraffic="true"> 设置了 Theme.AppCompat.Light.NoActionBar 主题 , 肯定是没有 ActionBar 的 , 因此这里尝试调用 androidx.appcompat.app.ActionBar
hierarchy can touch its views 大概意思就是:只有创建了视图层级的原始线程才可以修改这个视图 于是我百度了一下,然后大概解决方案是这样子的,子线程通过handler传值给主线程,主线程接收后,...String string = 请求结果 Message msg = new Message(); Bundle data = new Bundle(); //将获取到的...获取前: 获取后: MainActivity.java代码 package ink.cik.logininfoapp; import androidx.appcompat.app.ActionBar...; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.net.wifi.aware.DiscoverySession...Message msg = new Message(); Bundle data = new Bundle(); //将获取到的
优点 遵循最佳做法 Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。...如果要将项目迁移到AndroidX,在Android Studio的菜单栏中选择Refactor—>Migrate to AndroidX。...完成之后,打开gradle.properties文件,可以看到这两行代码: # 表示是否使用AndroidX android.useAndroidX=true # 表示是否将第三方库迁移到AndroidX...有了ProcessLifecycleOwner,我们可以方便获取到应用生命周期的变化,在其中做一些业务操作,减少了项目代码的耦合性。...如果在保存状态后尝试修改界面,很可能会导致应用的导航状态不一致,因此应用在保存状态后运行 FragmentTransaction时,FragmentManager会抛出异常。
并且,为了方便开发者迁移到AndroidX版本,谷歌官方给出了很详细的迁移文档(如何迁移到Android)。对于一些新组件和老组件,可以参加下面的表。...[在这里插入图片描述] 4.2 迁移到AndroidX 如果你从未在Android项目中使用AndroidX,现在希望将项目迁移到AndroidX,那么可以在菜单栏中依次选择【ReFactor】→【Migrate...to AndroidX... 】即可将你的Android项目迁移到AndroidX,如下图所示。...android.useAndroidX=true //是否使用AndroidX android.enableJetifier=true //是否将第三方库迁移到AndroidX 然后再打开...如果是新建项目,那么默认会添加AndroidX支持。
通过支持生命周期的组件,可以将原本在生命周期方法里的操作移到组件内部。...在项目添加生命周期感知组件的依赖,可以参加这个页面:传送门 //包含 ViewModel 和 LiveData implementation "androidx.lifecycle:lifecycle-extensions...虽然组件的生命周期不由我们控制,但是我们必须尊重组件的生命周期,不然很可能会导致内存泄漏甚至崩溃。...例如,如果回调在保存活动状态后运行 Fragment 事务,那么它将触发崩溃,因此我们永远都不想调用该回调。 为了简化此用例,Lifecycle 类允许其他对象查询当前状态。...保存状态后尝试修改 UI 可能会导致应用程序的导航状态不一致,这就是为什么如果状态保存后应用程序运行 FragmentTransaction ,则 FragmentManager 会引发异常的原因。
和尚在一个历史项目中接入了 Flutter Module 并采用 FlutterBoost 作为 Platform Channel 桥接;但实际开发遇到很多问题,仅记录两个印象深刻的小问题;...问题一:.so 文件混淆 问题分析 和尚的历史项目使用的 NDK 是 armeabi 而接入 Flutter 之后需要使用 armeabi-v7a,和尚在项目中添加 armeabi-v7a...方案解决 既然只有 release 包有问题,很大可能是混淆文件有问题;和尚查了一些资料将涉及到的 Flutter 文件免混淆,因为和尚对 NDK 等研究还很浅,因此仅提供列出方案;之后打包测试结果正常应用...问题分析: 和尚在集成 FlutterBoost 之后,打包 release 包测试时,发现有些手机进退两次应用就会崩溃,和尚也是很崩溃,抓到 Log 提示 Surface 在销毁时空指针...; java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Surface.release
我司项目里使用的SP也是按此优化,优化后效果还是比较显著的,所以目前项目也还没有对SP进行迁移(如迁移到MMKV或DataStore),但并不影响我们学习新的存储姿势。...上述代码执行后,会在/data/data/项目包名/files/下创建名为pf_datastore的文件如下:[图片] 可以看到后缀名并不是xml,而是.preferences_pb。...(context, BOOK_PREFERENCES_NAME)) } ) 这样构建完成时,SP中的内容也会迁移到Preferences DataStore中了,注意迁移是一次性的,即执行迁移后...上述代码执行后,会在/data/data/项目包名/files/下创建名为BookProto.pb的文件如下: [1240] 存数据 lifecycleScope.launch { //构建...迁移到Proto DataStore中 produceMigrations = { context -> listOf( androidx.datastore.migrations.SharedPreferencesMigration
因此,接收 bug 修复、新功能和其他库更新的唯一选择就需要将 Plaid 迁移到 AndroidX。 什么是 AndroidX?...依赖于一个旧版 support 库的第三方库可能与 AndroidX 不兼容,这很有可能导致你的应用在迁移到 AndroidX 后无法编译。...AndroidX 迁移工具位于菜单栏的 Refactor > Migrate to AndroidX 选项。这个选项将迁移整个项目的所有模块。 ? 运行 AndroidX 重构工具后的预览窗口。...在运行 AndroidX 迁移工具后,大量的代码被变更,然而项目却无法编译成功。此时,我们仅仅做了最少量的工作来使应用重新运行起来。 这个方法有利于把流程拆解为可控的步骤。...我们通过将 AndroidX 版本降低来重新添加了 plusAssign 函数和相关测试(参考这次提交),并且恢复了被注释了的代码。
因此,接收 bug 修复、新功能和其他库更新的唯一选择就需要将 Plaid 迁移到 AndroidX。 什么是 AndroidX?...依赖于一个旧版 support 库的第三方库可能与 AndroidX 不兼容,这很有可能导致你的应用在迁移到 AndroidX 后无法编译。...AndroidX 迁移工具位于菜单栏的 Refactor > Migrate to AndroidX 选项。这个选项将迁移整个项目的所有模块。 运行 AndroidX 重构工具后的预览窗口。...在运行 AndroidX 迁移工具后,大量的代码被变更,然而项目却无法编译成功。此时,我们仅仅做了最少量的工作来使应用重新运行起来。 这个方法有利于把流程拆解为可控的步骤。...我们通过将 AndroidX 版本降低来重新添加了 plusAssign 函数和相关测试(参考这次提交),并且恢复了被注释了的代码。
之后,将TabLayout迁移到material包下面去了com.google.android.material.tabs.TabLayout,原来的support下面的TabLayout从API 29...所以如果项目已经升级了AndroidX,建议直接使用后者。 TabLayout一般结合ViewPager+Fragment的使用实现滑动的标签选择器。 实战 activity_main.xml: <?...; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentPagerAdapter..."}; private List tabFragmentList = new ArrayList(); @Override protected void...return inflater.inflate(R.layout.fragment_tab, container, false); } @Override public void
迁移项目本身已有专线的情况下通过公网迁移的效率和成本并非最优。 说明: 为便于具备专线或希望通过自有资源提升迁移效率的客户,MSP 迁移平台提供了可以本地化运行的迁云工具箱。...docker import xxxxxxxx.tar toolbox:xxxxx 启动工具箱 Docker 镜像准备就绪后,运行 Docker 命令启动镜像,因迁移项目全周期时间跨度较大,运行在 Docker...工具箱包含功能 迁云步骤和方案 将整个迁移过程按照不同阶段进行细化,在每一个具体的实施步骤中提供最佳实践和相应的工具。即使对迁云项目不熟悉,也可以跟随迁云步骤的引导一步步完成迁云实施。...迁云工具 针对不同的迁移阶段和需要迁移的产品,提供了多种迁移工具以及迁移辅助工具,帮助提高项目迁移效率。...大大缩减资源梳理工作量的同时,可以将分析的结果与迁移成本估算、进度规划等模块衔接,为迁移过程提供更多的支持。 产品选型 从友商云迁移到腾讯云,会面临同一类型产品名称不同、规格不同的困难。
,而AndroidX Library中的API都变成androidx.,意味着后续android....:appcompat:1.0.0' 0x3、从Support过渡到AndroidX 一键迁移 AS 3.2及以上版本提供了一键迁移到AndroidX的功能,依次点击菜单栏的 Refactor → Migrate...配置 在项目的gradle.properties文件中添加下述配置: 当前项目启用androidx android.useAndroidX=true 将依赖包也迁移到androidx,一般写true 如果设为...② 执行完Migrate to AndroidX后就完成AndroidX迁移了?...⑤ Glide注解不兼容AndroidX 答:Glide升级到4.8.0以后,具体可见 官方issues ⑥ 没有迁移到androidX,却出现Support库和AndroidX库冲突?
与Android Support库不同,AndroidX软件包是单独维护和更新的。这些AndroidX包使用严格的语义版本控制,从版本1.0.0开始,您可以单独更新项目中的AndroidX库。...AndroidX; android.enableJetifier=true 表示将依赖包也迁移到AndroidX 。...,卸载重新安装应用才会以分区存储模式运行 2.5 适配方案 2.5.1 方案概览 分区存储适配包含文件迁移以及文件访问兼容性适配两个部分: 1)文件迁移 文件迁移是将应用共享目录文件迁移到应用私有目录或者...允许其他应用访问,并且应用卸载后不允许删除的文件,文件需要存储在共享目录,应用可以选择是否进行目录整改,将文件迁移到Android10要求的media集合目录。...将 supplierconfig.json 拷贝到项目 assets 目录下,并修改里边对应 内容,特别是需要设置 appid 的部分。
3.Androidstudio中添加jar包的方法 到网上下载你需要的jar包,下载下来后,将你Androidstudio中的项目视图切换为project,找到app下的libs,将你下载的jar包复制粘贴进去...AndroidX 是一个新的扩展 库,用于向下兼容.支持, 在 28稳定版库将所有的v4,v7,后续功能将被整合到 androidx 包中。...解决办法: (1)在gradle.properties文件里面添加如下代码 android.useAndroidX=true #表示当前项目启用 androidx android.enableJetifier...=true #表示将依赖包也迁移到androidx。...如果取值为false,表示不迁移依赖包到androidx,但在使用依赖包中的内容时可能会出现问题,当然了,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为false (2)在module的gradle
这三款服务都提供了对App崩溃采集和质量统计服务。 首先之前有过友盟、TalkingData使用项目经历,我优先考虑华为应用市场AG Connect。...在我的项目页面点击“添加项目”,新建应用 4 测试应用开发 4.1 客户端测试应用开发 新建一个APP 工程,包含两个页面,工程目录如下: 为了检测崩溃,第一个页面加入了crash测试按钮 5 测试CRASH...crashButton.setOnClickListener(new View.OnClickListener() @Override public void onClick(View...7.1 竞品效果对比 本人之前有过其他两款产品友盟和talkingdata的项目经验,综合本次使用情况,针对三款产品对比如下: 产品 启动次数 启动速度 页面数据 自定义埋点 崩溃日志 渠道统计 服务生态...华为应用市场AppGallery Connect深度整合华为内部各项优质服务,将华为在全球化、质量、安全、工程管理等领域长期积累的能力开放给开发者,大幅降低应用开发与运维难度,提高版本质量,开放分发和运营服务
二、配置 将AS更新至 AS 3.2及以上; Gradle 插件版本改为 4.6及以上; 项目下 gradle/wrapper/gradle-wrapper.propertie 文件中的distributionUrl...如果你不知道切换到AndroidX后类路径是什么,google也为我们提供了一个mapping文件在线下载链接 PS:因为太多了,截图只列出部分 ?...四、AndroidStudio自动转换 AS 3.2 及以上版本提供了更加方便快捷的方法一键迁移到 AndroidX。选择菜单上的ReFactor —— Migrate to AndroidX......属性变更 AndroidX对某些组件的属性做了调整,比如FloatingActionButton,切换到AndroidX后,可能会出现解析失败,需要删除一些属性或者调整一些属性。... 如果项目中使用了多个不同的地址,并且都是 http 的,所以就需要在该地址下面配置多个域名。 PS:更多信息请参考AndroidX官方文档
介绍 我们以前获取xml中的View,通常通过findViewById但是样板代码太多,而且容易引用错误发生崩溃。...而如果我们先接触的DataBinding 那么就很容易将ViewBinding误解成两个是一样的。但其实他们并不一样。...配置完毕后,Gradle一下整个项目,AndroidStudio会自动为每个XML布局文件生成一个绑定类,并不需要我们给xml文件中添加任何代码。...实例 java版本: private ActivityMainBinding binding; @Override protected void onCreate(Bundle...在模块中启用视图绑定后,它会自动应用于该模块的所有布局。 而DataBinding 的优势就在于:布局和数据的双向绑定了。 所以其实我们可以在项目之中同时使用视图绑定和数据绑定。
使用Jetpack有如下好处: 遵循最佳做法,Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。...2.2.1 引入依赖 1、非androidX项目 引入: implementation "android.arch.lifecycle:extensions:1.1.1" 添加这一句代码就依赖了如下的库...: image.png 2、androidX项目 引入: 如果项目已经依赖了AndroidX: implementation 'androidx.appcompat:appcompat:1.2.0' 那么我们就可以使用...* * 第一个Activity进入时,ProcessLifecycleOwner将分派Lifecycle.Event.ON_START, Lifecycle.Event.ON_RESUME。...3.4 生命周期事件处理——LifecycleRegistry 到这里,生命中周期事件的处理有转移到了 LifecycleRegistry 中: //LifecycleRegistry.java
使用Jetpack有如下好处: 遵循最佳做法,Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。...2.2.1 引入依赖 1、非androidX项目 引入: implementation "android.arch.lifecycle:extensions:1.1.1" 添加这一句代码就依赖了如下的库...2、androidX项目 引入: 如果项目已经依赖了AndroidX: implementation 'androidx.appcompat:appcompat:1.2.0' 那么我们就可以使用Lifecycle...* * 第一个Activity进入时,ProcessLifecycleOwner将分派Lifecycle.Event.ON_START, Lifecycle.Event.ON_RESUME。...3.4 生命周期事件处理——LifecycleRegistry 到这里,生命中周期事件的处理有转移到了 LifecycleRegistry 中: //LifecycleRegistry.java
领取专属 10元无门槛券
手把手带您无忧上云