首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【连载】聊聊 APK——直接运行 Dex文件的黑魔法

导读 很多人可能不太明白 APK 有什么好聊的,我个人觉得,作为一名合格的 Android 开发,对于 APK 的简单认识一定要有。...APK 的组成有 Dex 文件,资源,资源表和签名摘要信息等四部分组成,这四部分是不可或缺的,不然任何一个 OS 都无法正常的运行你带 Activity 的 Android 应用。...《聊聊 APK —— aapt 编译资源》这篇文章讲述了 aapt2 是如何编译资源文件以及产生资源表,我们在开发 Android Application 的时候,对于R.java应该是再熟悉不过了,但是大部分人并不知道...我的手机是一台运行 Android 9 的手机,输出的结果是: ART version 2.1.0 arm64 如果我们在 jvm 的环境下,运行 1> java -version 那么输出的结果是:...学习过 Android 的人可能会了解到,class -> dex 需要的工具是dx,它属于 Android Platform Build Tools 的一部分,会随着 SDK 的分发更新而更新,在我这使用的是

2.5K20

当dex分包遇上NoClassDefFoundError&ClassNotFoundException

简介 本文记录的是:国庆节前夕,解决Crash率高达9.08%问题成功避免加班拿3倍工资的故事 PS: 除了在时间上两者相遇外,本文中提到的两个(top1&top2)crash问题与dex分包并没有关系...分包功能,于是dex分包合情合理的成了头号怀疑对象,但是Check分包方案后有如下疑问: Crash栈中的BaseActivity和SpaceCleanActivity在主dex中 这两个Crash在测试中不可复现...幸好,在RDM异常上报平台逐个查看logcat信息的过程中,我们在第4页找到了一个关键的日志信息 log.txt 我们分别来看看对应关键地方的代码 com.example.nucleus.manager.spaceclean.SpaceScanManager.y...同时发生)下,才有可能抓到这个关键信息 问:为什么这个关键地方SpaceScanManager.y(ProGuard:709)的ExceptionInInitializerError异常没有导致程序挂掉...精神哥、小萝莉,为您定期分享应用崩溃解决方案 ▲长按二维码可识别关注

63820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你愿意用快应用替换你手机上的那些APP?

    但我的预判统一推送只是一项公益事情,对各大厂商并无利益冲突,而小程序是直接给手机厂商带来利益冲突,所以我认为快应用会很快到来,但没有想到这么快....我手上正好有魅族MX6手机,收到快应用推送的通知,于是我顺手体验了一把,并不比原生差,只是现在快应用刚起步,功能还并不完全,但至少说明快应用已经来了! ? ?...很多人diss我无非下面几个原因了: Google的Instant App,微信小程序对Android APP开发者的冲击是有一些但还不大,但这次快应用就不同了. 且看我一一道来....原因二: 很多公司的业务重心不敢放到小程序上,只是作为一个流量入口,用小程序给APP导流 功能也是非常有限的....这一不小心就违规了,说下回就下架了 命脉完全在别人手上, 话说前段时间头脑王者的小程序不就是被下架了吗,然后微信官方还推出了类似小程序!

    4.9K41

    Android-App性能优化

    (注:此图不知道啥时候收集的,如有侵权,立删): 快 如何让app在运行过程过不卡顿,运行流畅,速度快,也就是说如何解决卡顿呢?我们先看看那些因素影响卡顿? 1....还有就是刷新,刷新的话尽量减少不必要的刷新和尽可能减少刷新面积 启动优化 冷启动 冷启动是指安装apk后首次启动应用程序,或者应用程序上次结束,进程被杀死后重新打开app....,白屏才会消失,这也是为什么启动app会出现白屏,这个问题,我也有提到过解决方式Anroid 白屏 Activity的创建 当Application首次启动完成绘制后,我们的UI线程会执行主活动进行以下操作...你比如,我用户Back退出应用程序,然后又重新启动,应用程序会再次执行Activity的onCreate(),但会从Bundle(savedInstanceState)获取数据,我们平时应用成勋崩溃,不也是通过该方法保存数据的吗...比如:线程的使用,这里我推荐使用线程池,我也写过相关文章,感兴趣的可以了解一下。Android-ThreadPooll.

    2.2K40

    C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

    正文 我记得,之前在写安卓方面的文章的时候,有人就问过我.Xamarin.Android为什么打包出来这么大?随便一个HelloWord就20-30MB? 嗯..今天我们就来解决这个问题.....在Application Icon选项中,我们可以任意选择一个已有的图片资源文件,并设置为应用程序的图标....就完成了 - - 是不是很简单.. 2.设置应用程序版本和名称 VS2017里面已经翻译的比较完善了,我就不多解释了..直接如下图: ?...一般,在小型Xamarin.Android应用程序上使用ProGuard通常可以减少大约24%的大小 如果,在具有多个库依赖性的较大应用程序上使用ProGuard通常可以实现更大的尺寸缩小。...生成过程是首先使用Xamarin.Android链接器来优化应用程序中的托管(C#)代码,然后使用ProGuard(如果启用)在Java字节码级别优化APK。

    3K80

    Netflix 工程师的生活——40毫秒的案例

    我在Netflix工作了几年,过去发布过很多台设备,但这是我推出的第一款Android电视设备。...接下来我开始检查Ninja的源代码,我想找到传输音频数据的那行代码。我认识很多,但我在播放代码中开始不知所措,我需要帮助。 我上楼找到了Ninja编写音频和视频传输代码的工程师,他帮我梳理了代码。...因为集成商已经确定音频流是问题所在,所以我将注意力集中放在将音频样本传递给Android音频服务的特定线程处理程序上。 我想回答这个问题:额外的时间在哪里?...在正常播放的情况下,你可以看到处理程序大约每15毫秒被调用一次。在播放卡顿的情况下,在右侧大约每55毫秒调用一次处理程序。调用之间有额外的40毫秒,没有办法跟上播放的速度。但这是为什么呢?...我把我的发现告诉了集成商和芯片供应商 (看,这是Android线程调度程序!),但他们对这一发现并不感冒。为什么不在每次调用处理程序时复制更多的数据呢?

    1K00

    技术速递|使用 Native Library Interop 为 .NET MAUI 创建绑定

    当您想要使用不是用 C# 编写的第三方 iOS 或 Android 库时,您需要一种在 .NET MAUI 应用程序中使用它的方法。...我将模板复制并粘贴到所需位置,将示例部署到所有三个平台,然后一切就绪!一切都按预期工作。我在 Android 应用程序上看到“Hello, Community Toolkit from java!”...,这说明 Android 绑定按预期工作,在 iOS 和 Mac Catalyst 应用程序上看到“Hello, Community Toolkit from swift!”...虽然我可以使用图表库创建的所有图表都非常漂亮,但我选择了 Native Library Interop 方法,因为我现在只需要在 .NET MAUI 应用程序中使用饼图,所以我只想绑定饼图的 API,仅此而已...正如我不是最精通 Swift 的专家一样,我也不是最精通 Android 的专家……但我仍然是一名移动应用开发人员!能够直接利用在线资源和 GitHub Copilot 使这一切变得非常可行。

    8300

    Android使用MultiDex发生ClassNotFoundException

    背景 在Method与Filed数超限的背景下,我们将多工程拆分成多个Dex打到Apk中解决该问题,但是在使用MultiDex的时候,还会遇到一些问题。 在启动的时候会发生如下Crash。...Dex中,导致在加载的时候会Crash。...因为5.0以下的手机使用的是Dalvik虚拟机,在Dex加载的时候,通过JIT即时编译生成字节码然后运行,而Art虚拟机则是在安装的时候,已经将Dex转换成aot文件,而aot文件已经是可以执行的二进制文件...,所以在安装的时候,5.0以上的手机会安装比较久,但是执行的速度会比5.0以下的手机快。...而A工程,在classes.dex,B工程在classes2.dex中。而在打完包出来后,在4.x的手机中会出现该异常。 参考资料 配置方法数超过 64K 的应用

    1.9K20

    关于apple上架常见问题汇总

    在 Apple 拒绝后上传我的应用程序的新版本时,如何更改上传的版本号? 当我尝试上传修改后的应用程序时,它不允许我并且我收到一条错误消息“ 错误 ITMS-4238:“冗余二进制上传。...答:我同意,但我认为这应该适用于两种方式。  ...但是,我的机器人在生成我签名的存档后返回一个错误,上面写着: “exportArchive:Xcode Server 不支持将应用程序上传到 Apple。”。 我有点失落。...我希望 xcode 服务器为我上传我的构建,但如果需要,我会设置 fastlane 来执行上传过程。但我感到 困惑的是为什么机器人将其作为错误返回。...如果设置为“上传”,它会吐出上面的错误:“exportArchive:Xcode Server 不支持将应用程序上传到 Apple。” 因此,我将其保留为“出口”。

    60110

    拥有大厂背书的高工竟被字节“没有技术深度”拒之门外,面试官只透露了“体系”两个字

    关于这点我本身就有一个深刻的体会,在我刚开始做Android开发的时候,我的工作是去维护Android自带的系统应用,客户提的问题或者进行二次开发,我都能很好的解决。...然后就会有一些空闲的时间,反正也是闲着,我就找了个系统应用里面最简单的一个应用(记事本)练练手。 我想既然这么简单,那我就自己照着写一个吧,就从零开始实现一个记事本应用。...当我开始写时,颠覆了我对安卓应用的理解,我发现以前认为懂的地方自己都没懂,我遇到了很多毫无头绪的问题,就这么一个简单的应用,我要靠不停的对照原版的代码实现才能发现自己的问题所在,然后才确信真正的做和看中间的差距有多大...image.png 关于如何系统学习Android开发 我想在学习上大家常用的问法是:不知道怎么学习Android开发,没有方向,不知道该往哪里使力。 什么是系统? 为什么我会提系统两个字呢?...从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节: 多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流

    81700

    redis反序列化出现:java.lang.ClassNotFoundException异常

    不知道大家在使用redis的时候,有没有遇到过如下错误:java.lang.ClassNotFoundException,这个错误是因为反序列化时找不到对应的对象导致的。...什么是序列化 在开始今天的课程之前,我们先来介绍一下:什么是redis的系列化和反序列化。...刨根问题 介绍完序列化和反序列化之后,我们继续回到刚才的问题,为什么会发生ava.lang.ClassNotFoundException错误呢?...处理方案 出现java.lang.ClassNotFoundException错误无非就是上面所说的两种问题,第一种好解决,只要在类上面加上如下所示的代码即可。...总结 我们在使用redis的时候,一定要去了解redis核心部分的相关原理,这样在出现问题的时候,我们也可以快速的定位问题发生的原因,并快速解决。

    3K10

    Easy Clean architecture on Android

    在我这几年的学习和成长中,深刻的意识到搭建一个Android应用架构是件非常痛苦的事,它不仅要满足不断增长的业务需求,还要保证架构自身的整洁,这让事情变得非常具有挑战,但我们必须这样做,因为健壮的Android...当抽象与依赖结合后,就会发现使用抽象通知的业务逻辑看不到也不知道使用Android通知管理器的具体实现,这就是我们想要的:业务逻辑不会注意到具体的实现细节,更不知道它何时会改变。...Apply on Android 按照上面提到的分层原则,我把项目分为了三层,也就是说它有三个Android module,如下图所示: Clean architecture modules 在Domain...具体到Android中的框架结构如下图所示: clean architecture structure 你可能有些困惑,为什么Domain指向Data?...总结: 我相信你和我一样,在搭建框架的过程中遭遇着各式各样的挑战,从错误中吸取教训,不断优化代码,调整依赖关系,甚至重新组织模块结构,这些你做出的改变都是想让架构变得更健壮,我们一直希望应用程序能够变得易开发易维护

    57630

    大纲

    ,我觉得Cordova就是一个平台,我可以基于脚手架开发一个简易H5应用出来。...可是如果我希望将这个应用作为APP或者桌面端应用,按照以前的方式需要重新使用对应的语言进行开发,而基于此平台我只需要安装好对应环境后敲击命令行 cordova build android | cordova...当前现在市面上也多出来很多新的这种开发平台,例如WeX5,HBuilder,APICloud等,其他的我还没有接触过,不过殊途同归把,我也不知道现在公司哪个用的多,先玩会一个再说。...允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。...Node环境,Cordova安装,和Android SDK环境的安装,比网上那些杂七杂八的教程简单太多,就是”简单的下一步操作“,当然在使用过程中,也会碰到一些奇怪的环境配置问题,这个时候也只需要百度即可

    49110

    关于apple上架常见问题汇总

    答:我同意,但我认为这应该适用于两种方式。...Apple Transporter 应用程序异常上传行为我正在使用 Apple transporter 应用程序将我的一个应用程序上传到 Testflight。...有点像尝试不同的浏览器。将 macOS 应用程序上传到 Apple Store我用 Qt/QML 用 C++ 开发了一个我想从 Apple Store 分发的应用程序。...我希望 xcode 服务器为我上传我的构建,但如果需要,我会设置 fastlane 来执行上传过程。但我感到困惑的是为什么机器人将其作为错误返回。...在 Apple 拒绝后上传我的应用程序的新版本时,如何更改上传的版本号?当我尝试上传修改后的应用程序时,它不允许我并且我收到一条错误消息“错误 ITMS-4238:“冗余二进制上传。

    1.7K30

    今日头条Android开发岗实习生面试

    jvm内存模型,为什么要了解‘       垃圾回收机制,哪些是要被回收的对象(哪些被回收?不用了的死了的对象啊。。判断依据是什么??布吉岛)       有了解过注解么?...(@interface)  具体的实现原理(不知道) 源代码阶段还是编译时还是运行时(我说编译时,好像不对?) (之前在bilibili上看视频学到,记了笔记,但当时的感觉是,注解?...(答了一些,感觉可能回答的深度不够,这个问题问了很久) 序列化serializable和parcelable的区别(我...面试官当时不会写序列化这个单词,准备在电脑上找,我对他说,不用找了,我不会!...Android相关       activity被局部遮挡以后的状态,以及取消遮挡以后的状态(onPause(),onResume())       singleInstance和singleTask的应用场景...真的不知道原理啊,但我觉得肯定相等,直觉以及迷之自信! 最后,面试官说,我的问题都问完了,你有什么要问我的么?   我也不知道该问啥啊,直接说没有了,然后面试官又问,没有么?   我。。

    1.3K10

    使用WebRTC开发Android Messenger:第3部分

    在使用WebRTC开发Android Messenger:第2部分中,我描述了Android上对WebRTC的一个应用。在本节中,我将探索它用于哪些应用程序。...还有一大堆很难或不可能呼叫特定用户的应用程序,例如聊天轮盘赌应用程序,以及具有允许用户启动呼叫客户支持功能的功能的应用程序。 在这项研究中,我把重点放在允许用户与特定的其他用户联系的会议应用程序上。...通过在Android上设置系统属性,可以使Facebook Messenger使用备用库,但我找不到攻击者可以让设备切换库的方法。...默认情况下,此应用程序不使用SCTP,并且无法使用SDP打开它。因此,不可能使用此BUG。BOTIM看起来确实有一种模式,它可以与对等方交换SDP,但我不知道如何启用它。...该BUG的披露期限到期后,将释放该BUG在应用程序上的行为的详细信息。

    1.6K53

    UI设计师必须知道的 iOS和Android的APP图标设计指南

    当第一次面临绘制应用程序图标的挑战时,我遇到了很多问题。我在完成几个项目后之后才找到了一些答案。我决定写这篇文章来帮助和我一样的初学者,但我希望经验丰富的设计师也会觉得它很有用。好吧,让我们开始吧!...为什么每个app都需要一个图标? app的图标是为每个移动应用程序添加的唯一图像。这是新用户在App Store和Google Play上找到应用时看到的内容。...你永远不知道你会在哪里找到一个好主意。但重要的是不要在追求原创性时与应用程序失去联系。 4,一致性 图标是应用程序的一部分,它们必须携手合作。图标应描述应用程序并显示其主要功能。...我使用Sketch,但任何其他图形编辑器也可以使用。 绘制iOS应用程序图标 有许多用于创建图标的模板,但我们暂时不会使用它们。假设我们已经研究了市场,也许确定了这个想法,甚至手工制作了草图。...我不会对细节感到枯燥,但我的图标经过了经理审核,并向客户反馈了几次。 ? 为了更好呈现图标,我做了一个简单的动画: ? 这个和我在Dribbble上分享的其他东西图标都准备好了!我们把它导出吧。

    2.1K20

    Android工程使用org.apache.commons.codec(commons-codec)库,运行时提示Base64.encodeBase64URLSafeString“java.lang.

    FIDO UAF是一个旨在提供身份验证通用方案,以代替繁杂密码记忆的一个方案,Google,阿里这些大头都是核心成员,感觉是用来未来代替密码的1号方案。可能是定义的太通用了,UAF目前应用面还不广。...我试了一下,和普通的Base64编码不同的是把编码末尾的”=“号去掉了。这样的话Http的Get参数就不会出现问题。虽然UAF要求使用POST发送请求,但我看到大佬都这么做,我就跟着用吧。...而稍后在我进行单元测试的时候出问题了。Android单元测试提示我找不到“Base64.encodeBase64URLSafeString”这个方法。 这就奇怪了,编译期没有报错,运行时报错?...“我就是大名鼎鼎的文件验证器了, 能管很多事” “那刚才他为啥还得请示上级呢” , 我用眼神指了一下开车的ClassLoader 文件验证器的声音一下子就压低了: “你不知道,说来话长...但是类之间的互相依赖可能会有点多。 但我突然发现, 为什么eBay的代码却用了这个库呢????他们是不是没有实际跑过呢???

    5.2K20

    刷机那些事(2)

    刷机那些事(2) 前言 大概一个月前,我的 Redmi Note 10 Pro 光荣阵亡了,于是,在经过了一个月小钱钱的攒后,在二月初,我终于入手了 Redmi K60 8+256G 版本,然后,又经过七天的煎熬...再经过七天的煎熬后,我终于熟练的备份好手机数据,进入 FastBoot 模式,开始解锁之后(这里还有一个小插曲,不知道是我记错了还是什么,第七天晚上,当我备份手机数据,开始解锁的时候,小米的解锁工具却告诉我还要等...(其实如果将线缆慢速插入 USB 3.0 口,操作系统应该会把这个线缆识别为 USB 2.0,但我当时没这么试,不知道可不可以) 刷机 接下来就十分简单了,下载全量包,提取 boot.img(可以用 payload-dumper-go...,但不知道为什么,我的 K60 虽然出厂是 Android 13,但依然使用的是 boot.img(init_boot.img 根本没找到)。...小米不妙·享:让所有电脑均支持小米妙享的应用流转。 知了:知乎去广告模块。 网抑叼毛云:网易云换源模块(不用 beta 大喇叭的原因是因为那个玩意我装上以后一打开网易云设置就崩溃,不知道为啥)。

    1.1K10
    领券