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

Android Instant App(安卓即时应用程序)中启用 ProGuard (混淆)

Apps(即使应用程序)而言却是必不可少的,通过丢弃那些你从来不会使用的导入库和代码将有助于缩减所有的这些依赖。...即使对于常规项目配置 ProGuard(混淆)也是很有挑战性的,更何况是 Instant App(即时应用),当你启动的时候,你几乎肯定会遇到构建失败或者程序崩溃的情况。...现在我们明白为什么 ProGuard(混淆)失败,是时候解决这个问题了:确保我们为项目配置添加必要的保留规则,以防止在不同模块(在一个模块中定义,在另一个中使用)之间的类被移除或混淆。...在已安装的应用程序构建中,AAPT(处理资源构建的一部分)自动为你处理。...遵循这些步骤应该能带你完成构建,并防止你的即时应用程序崩溃

2.5K30

我以为发现Android 14系统中的一个bug,然而...

我看到这条消息之后的第一感觉就是,貌似和我印象中Android 14的行为并不一致。 因为没有任何错误日志可以观察到这种现象是不应该的,我印象中用法不正确的话是直接导致应用程序崩溃。...唯一的问题就是,我所使用的上述示例,在没有明确指定当前App包名的情况崩溃,而我的同事guting却反馈说是没有任何错误日志可以观察到。...后来我们又尝试了一下使用隐式Intent启动Serivce,在不指定包名的情况下崩溃。只有发送广播时不会崩溃,且这条广播是收不到的,相当于广播莫名其妙丢失。...最后,我尝试把targetSdkVersion设置成33,发现即使指定App包名,广播消息能收到。只要设置成了34,不指定App包名广播就会丢失,且没有任何错误出现。...结果这一研究,还真让我发现真实的问题所在。 现在我们已经知道,App target到Android 14之后,隐式Intent启动内部Activity和Serivce是崩溃的。

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

Android开发:请你吃一顿史上最全的Android混淆大餐

同时,反序列化的过程创建对象从根本上来说还是借助于反射,混淆之后 key 会被改变,所以违背我们预期的效果。 四大组件 Android 中的四大组件同样不应该被混淆。...其他应用程序访问组件时可能会用到类的包名加类名,如果经过混淆,可能无法找到对应组件或者产生异常。...由于方法名称和类的名称都经过混淆处理,即使程序发生崩溃问题,很难定位问题所在。...系统为我们提供 retrace 工具,结合上文提到的 mapping.txt 文件,就可以将混淆后的崩溃堆栈追踪信息还原成正常情况下的 StackTrace 信息。...这个波操作是不是有点"出类拔萃"?哈哈,就不卖关子,其实很简单,只要生成一套自己的 txt 格式的混淆字典,然后在混淆规则 Proguard-rules.pro 中应用一下即可: ?

4K30

一篇文章带你领略Android混淆的魅力

同时,反序列化的过程创建对象从根本上来说还是借助于反射,混淆之后 key 会被改变,所以违背我们预期的效果。 4.4 四大组件 Android 中的四大组件同样不应该被混淆。...其他应用程序访问组件时可能会用到类的包名加类名,如果经过混淆,可能无法找到对应组件或者产生异常。...由于方法名称和类的名称都经过混淆处理,即使程序发生崩溃问题,很难定位问题所在。...系统为我们提供 retrace 工具,结合上文提到的 mapping.txt 文件,就可以将混淆后的崩溃堆栈追踪信息还原成正常情况下的 StackTrace 信息。...这个波操作是不是有点"出类拔萃"?哈哈,就不卖关子,其实很简单,只要生成一套自己的 txt 格式的混淆字典,然后在混淆规则 Proguard-rules.pro 中应用一下即可: ?

93420

APP测试之Monkey压力测试(一)

同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止): (1)如果限定Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止; (2)如果应用程序崩溃或接收到任何失控异常...//即使app崩溃,Monkey依然继续发送事件,直到事件数目达到目标值为止 adb shell monkey -p com.tencent.WeChat --ignore-crashes 1000...说明:用于指定应用程序崩溃时(Force& Close错误),Monkey是否停止运行。...如果使用--ignore-crashes参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到1000为止。...说明:用于指定应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行如果使用--ignore-timeouts参数,即使应用程序发生ANR错误,Monkey

2.9K30

再看LayoutInflater,这次你可能又会有新的认识

我们都知道,在开发Android应用程序的时候,编写布局基本都是通过xml文件来编写的。当然你完全可以在代码中纯手写布局,但是写过的人都清楚,这样编写布局非常麻烦。...可能即使不少做过多年Android开发的程序员未必能解释得清楚。 而这段代码在我们使用RecyclerView,或者使用Fragment时都是一定会用到的。...注意观察上述代码,我们将第二个参数指定成mainLayout的同时,将第三个参数指定成了false。如果你尝试将第三个参数指定成true,然后重新运行代码,程序将会直接崩溃。...崩溃信息如下: 这个崩溃信息是在说,我们正在添加一个子View,但是这个子View已经有父布局,需要让父布局先调用removeView()移除子View后才能添加。...这样后面再次addView的时候就会发现它已经有一个父布局,从而抛出与上面同样的崩溃信息。 不信的话你可以自己动手试一试。

59100

APP测试之Monkey压力测试(一)

如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错; (3)如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错; 按照选定的不同级别的反馈信息...//即使app崩溃,Monkey依然继续发送事件,直到事件数目达到目标值为止 adb shell monkey -p com.tencent.WeChat --ignore-crashes 1000...说明:用于指定应用程序崩溃时(Force& Close错误),Monkey是否停止运行。...如果使用--ignore-crashes参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到1000为止。...说明:用于指定应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行如果使用--ignore-timeouts参数,即使应用程序发生ANR错误,Monkey

1.8K21

Android混淆你了解多少?

以上代码中的 proguard-android.txt 表示 Android 系统为我们提供的默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义的混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...同时,反序列化的过程创建对象从根本上来说还是借助于反射,混淆之后 key 会被改变,所以违背我们预期的效果。 四大组件 Android 中的四大组件同样不应该被混淆。...其他应用程序访问组件时可能会用到类的包名加类名,如果经过混淆,可能无法找到对应组件或者产生异常。...由于方法名称和类的名称都经过混淆处理,即使程序发生崩溃问题,很难定位问题所在。...系统为我们提供 retrace 工具,结合上文提到的 mapping.txt 文件,就可以将混淆后的崩溃堆栈追踪信息还原成正常情况下的 StackTrace 信息。

1.7K00

Android多进程总结1

com.biyou.multiprocess为进程名,也是apk的包名, 但是如果需要将某些组件(如Service,Activity等)运行在单独的进程中,就需要用到android:process属性...我们可以给android的组件设置android:process属性来使其运行在指定的进程中。...,或者使一些组件共享一个进程 (3)AndroidMantifest.xml中的application元素支持android:process属性,可以修改应用程序的默认进程名(默认值为包名) 为何要使用多进程...模块之间互不干预,团队并行开发,责任分工明确。 3.子进程奔溃,主进程可以继续工作 如果子进程因为某种原因崩溃,不会直接导致主程序的崩溃,可以降低我们程序的崩溃率。...通过JNI利用C/C++,调用fork()方法来生成子进程,一般开发者利用这种方法来做一些daemon(守护进程)进程,来实现防杀保活等效果。

1.4K10

如何用 Android vitals 解决应用程序的质量问题

即使在使用硬件实验室进行测试时,它也以其他方式难以获得的规模为你提供信息。 Android vitals 可以提醒你的问题包括崩溃应用程序无响应(ANR)和渲染时间。...这会影响电池的续航时间,如果用户无法及时充电,可能导致他们无法使用设备。这种行为很可能让用户迅速卸载你的应用。 应用程序无响应(ANR)事件。这些事件发生在你的应用程序 UI 冻结的时候。...从用户的角度来看,这种行为与应用崩溃一样糟糕。用户可能不会立即卸载你的应用,但如果 ANR 持续存在,用户很可能寻找替代的应用。 过度唤醒 那么,唤醒是什么以及它们何时变得过度呢?...C) 持续性和自动重试 —— 任务可以持续执行(即使重新启动可以),并且可以在发生故障时自动重试。 D) Doze 兼容性 —— 任务只有在不受 Doze 模式限制或应用程序待机时才会执行。...即使你将繁重的操作移动到后台线程,需要与主线程进行通信以显示进度或计算的结果。多线程编程并不容易,而且在使用同步进行锁定时,通常很难保证不会阻塞执行。

2.2K10

关于so文件你需要知道的知识「建议收藏」

但你不应该从你的应用程序中读取它,因为Android包管理器安装APK时,自动选择APK包中为对应系统ABI预编译好的.so文件,如果在对应的lib/ABI目录中存在.so文件的话。...另外如果主abi目录不存在,这个策略遍历2次Apk,效率偏低。 4.0-4.0.3 遍历Apk中所有文件,如果符合so文件的规则,且为主abi目录或者次abi目录下的so,就解压拷贝到相应目录。...即使我们没有指定其他的兼容框架,需要一个过滤。当我们接入多个第三方库时,很可能第三方库做了多个平台的兼容。譬如fresco就做了各个平台的兼容,所以它创建了各个兼容平台的目录。...,其次是64位32位系统架构问题,可能导致UnsatisfiedLinkError崩溃。...倘若不正确地配置so文件,比如某些App使用第三方的so时,只配置其中某一种CPU架构的so,可能造成App在某些机型上的适配问题,产生上述崩溃

2.2K10

Android最佳性能实践(一)——合理管理内存

并且,系统可以在LRU cache当中缓存的进程数量减少,导致切换应用程序的时候耗费更多性能。...严重的话,甚至有可能导致崩溃,因为系统在内存非常吃紧的时候可能已无法维护所有正在运行的Service所依赖的进程。...但是目前手机的内存已经有点低了,系统可能开始根据LRU缓存规则来去杀死进程。 TRIM_MEMORY_RUNNING_LOW    表示应用程序正常运行,并且不会被杀掉。...TRIM_MEMORY_RUNNING_CRITICAL    表示应用程序仍然正常运行,但是系统已经根据LRU缓存规则杀掉了大部分缓存的进程。...在使用HashMap时,即使你只设置一个基本数据类型的键,比如说int,但是按照对象的大小来分配内存,大概是32字节,而不是4字节。

74561

Android性能优化(一)

即使应用中不使用 C++,可能会看到此处使用的一些原生内存,因为 Android 框架使用原生内存代表处理各种任务,如处理图像资源和其他图形时,即使编写的代码采用 Java 或 Kotlin 语言。...崩溃处理 我们每天工作遇到各种各样的疑难问题,“崩溃”就是其中比较常见的一种问题。解决问题跟破案一样需要经验,我们分析的问题越多越熟练,定位问题就会越快越准。...第三步:尝试复现 如果我们已经大概知道崩溃的原因,为了进一步确认更多信息,就需要尝试复现崩溃。如果我们对崩溃完全没有头绪,希望通过用户操作路径来尝试重现,然后再去分析崩溃原因。...并且Android系统在内存管理上有一个Generational Heap Memory模型,当内存达到某一个阈值时,系统根据不同的规则自动释放可以释放的内存。...即便有内存管理机制,但是,如果不合理地使用内存,造成一系列的性能问题,比如内存泄漏、内存抖动、短时间内分配大量的内存对象等等。

2.5K20

详解Android StrictMode严格模式的使用方法

Android 2.3提供一个称为严苛模式StrictMode的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。那它都做什么呢?...你可以强制用警告代替崩溃crash,可以仅将警告计入日志让你的应用继续执行。StrictMode是一个十分有用的类,它可以很方便地应用于检查Android应用程序的性能和存在的问题。...应该说大部分由StrictMode产生的规则警示都应去遵守,但有时不是所有产生的信息都表明你的程序有错误。...比如,在应用程序的主线程中去快速读写磁盘其实不会对应用的性能产生太大的影响,又或者你在调试程序阶段有一些调试的代码违反了设定的规则,这些都可以忽略掉这些规则。...总结 以上所述是小编给大家介绍的Android StrictMode严格模式的使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编及时回复大家的。

2K40

Android之SharedPreferences使用

它有两个参数,第一个name 指定SharedPreferences存储的文件的文件名,第二个参数mode 指定操作的模式。...mode的模式: Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写; Context.MODE_WORLD_READABLE: 指定该SharedPreferences...数据能被其他应用程序读,但不能写; Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读; Context.MODE_APPEND...无论是 commit() 还是 apply(),即使我们只改动其中一个条目,都会把整个内容全部写到文件。而且即使我们多次写同一个文件,SP 也没有将多次修改合并为一次,这也是性能差的重要原因之一。...由于提供异步落盘的 apply 机制,在崩溃或者其它一些异常情况可能导致数据丢失。

1K20

app自动化面试题

服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。...当某个应用程序进程被杀掉后,所有依赖于该进程的服务会停止运行(正在听音乐,然后把音乐程序退出) 5 App测试中ios和Android有哪些区别呢?...或是内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。亦或非授权的内存位置的使用可能导致App crash。...或者是不同网络的切换可能影响app的稳定性。 8app对于不稳定偶然出现anr和crash时候你是怎么处理的?...”来查找Android应用程序的DOM元素。

1.4K20

安卓入门-熟悉Android Studio以及创建第一个安卓模块

工程根目录下存在一个build.gradle文件,它代表整个工程的构建,其中定义适用于这个工程中所有模块的构建规则。...buildToolsVersion:用于指定项目构建工具的版本,目前最新的版本就是24.0.2,如果有更新的版本时,Android Studio进行提示。...proguardFiles 用于指定混淆时使用的规则文件,这里指定两个文件: 第一个proguard-android.txt 是在Android SDK目录下的,里面是所有项目通用的混淆规则 第二个proguard-rules.pro...相信如果让你从上千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为error,那些不相干的琐碎信息就不会再干扰你的视线。...即使你目前在Java领域已经有不错的成绩,我希望在Android的世界你可以放下身段,以一只萌级小菜鸟的身份起飞,在后面的旅途中你不断地成长。

1.8K30

Android代码静态检查(lint、Checkstyle、ktlint、Detekt)

支持【300+】检测规则,支持Manifest文件、XML、Java、Kotlin、Java字节码、Gradle文件、Proguard文件、Propetty文件和图片资源; 基于抽象语法树分析,经历LOMBOK-AST...(构建器默认是lint-results.html ) //htmlOutput file("lint-report.html") // true--所有正式版构建执行规则生成崩溃的...lint检查,如果有崩溃问题将停止构建 checkReleaseBuilds true // 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃...// 指定问题的规则生成警告 warning 'ResourceAsColor' // 忽略指定问题的规则(同关闭检查) ignore 'TypographyQuotes...不同团队的代码的风格不尽相同,不同的项目对于代码的规范不一样。

1.5K31

使用kotlin协程提高app性能(译)

Android上,协程有助于解决两个主要问题: 管理长时间运行的任务,否则可能阻止主线程并导致应用冻结。 提供主安全性,或从主线程安全地调用网络或磁盘操作。...本主题描述了如何使用Kotlin协程解决这些问题,使您能够编写更清晰,更简洁的应用程序代码。 管理长时间运行的任务 在Android上,每个应用程序都有一个主线程来处理用户界面并管理用户交互。...如果您的应用程序为主线程分配了太多工作,那么应用程序可能明显卡顿或运行缓慢。...要指定协程应该运行的位置,Kotlin提供三个可以使用的调度程序: Dispatchers.Main – 使用此调度程序在主Android线程上运行协同程序。...这意味着如果您使用await从常规函数启动新的协同程序,则可能以静默方式删除异常。 这些丢弃的异常不会出现在崩溃指标中,不会出现在logcat中。

2.3K10

Android Monkey-入门与使用

进程 7、查看内存使用 8、查看CPU使用率 1、Monkey测试原理 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。...它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。...--ignore-crashes 用于指定应用程序崩溃时(Force & Close错误),Monkey是否停止运行。...如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。...” 3、crash 6、杀掉Monkey进程 依次输入如下命令: 1、adb shell 2、ps | grep monkey 3、kill -9 进程号 7、查看内存使用 查看测试机内存参数(可以用来查看指定进程包名的内存使用情况

80620
领券