Android 应用多开对抗实践

合集下载

android分身应用的原理

android分身应用的原理

Android分身应用的原理1. 概述分身应用是指能够在同一设备上创建多个虚拟实例的应用程序。

Android分身应用的原理是通过虚拟化技术实现的,虚拟化技术可以将一个物理设备或操作系统拆分为多个独立的虚拟运行环境,每个虚拟环境都具有自己的独立资源和应用配置。

2. 分身应用的优势•多账号管理:分身应用可以让用户在同一设备上同时登录多个账号,方便管理不同身份的应用数据。

•数据隔离:每个分身应用都拥有独立的应用数据存储空间,互相之间不会干扰。

这种数据隔离可以保护用户隐私和应用安全。

•多开运行:分身应用可以同时运行多个实例,用户可以在不同分身应用之间快速切换,提高使用效率。

3. 分身应用的实现原理Android分身应用的实现原理主要涉及以下几个方面:3.1 虚拟化技术虚拟化技术是实现分身应用的关键技术之一。

Android平台上常用的虚拟化技术有容器虚拟化和系统级虚拟化。

•容器虚拟化:容器虚拟化通过在操作系统层面实现了多个独立的虚拟运行环境,每个环境都有自己的应用、进程和虚拟文件系统。

常见的容器虚拟化技术有Docker和LXC等。

容器虚拟化的优势在于占用资源更少,启动速度更快,但对于一些需要系统级权限的应用可能不支持。

•系统级虚拟化:系统级虚拟化是通过在操作系统层面实现了多个独立的虚拟运行环境,每个环境都有自己的内核和系统服务。

常见的系统级虚拟化技术有VirtualBox和VMware等。

系统级虚拟化可以支持更多的应用和系统级权限,但对于资源占用和启动速度会有一定的影响。

3.2 用户身份管理分身应用需要实现多个账号的登录和切换功能,所以需要有一个用户身份管理的机制。

通常的做法是通过在应用内部实现账号管理界面,用户可以在该界面进行账号的登录、注册和切换操作。

3.3 应用数据隔离分身应用需要保证每个实例的应用数据是相互隔离的,不会相互干扰。

在实现上,可以通过以下方式进行数据隔离:•数据存储空间隔离:每个分身应用都拥有自己的应用数据存储空间,通常是通过创建不同的应用包名来实现。

Android应用多窗口模式开发指南

Android应用多窗口模式开发指南

Android应用多窗口模式开发指南Android操作系统自4.0版本开始引入了多窗口模式,这使得在同一时间可以在屏幕上同时运行多个应用程序。

多窗口模式为用户提供了更加便捷和高效的多任务处理体验。

本文将为开发人员提供一个Android应用多窗口模式开发的指南,以帮助他们实现这一功能。

一、概述多窗口模式是指在Android设备的屏幕上同时显示多个应用程序界面,用户可以在这些应用程序之间自由切换和操作。

多窗口模式既可以在手机上使用,也可以在平板电脑等大屏设备上使用。

对于开发人员来说,实现多窗口模式需要考虑以下几个方面:1. 界面适配:多窗口模式下,应用程序的界面需要适配不同的屏幕尺寸和分辨率,以保证用户在不同设备上都能获得良好的用户体验。

2. 交互设计:多窗口模式下,用户需要能够方便地在不同应用程序之间切换和操作,因此应用程序的交互设计需要符合用户的使用习惯。

3. 数据共享:多窗口模式下,用户可能需要在不同应用程序之间共享数据,应用程序需要支持数据的无缝传输和共享。

二、使用多窗口模式在Android应用中使用多窗口模式需要进行以下几个步骤:1. 声明支持多窗口模式:在应用程序的清单文件(AndroidManifest.xml)中,需要在<application>标签中添加以下属性:android:resizeableActivity="true"。

这样声明之后,应用程序才能在多窗口模式下运行。

2. 适配界面布局:为了适应不同屏幕尺寸和分辨率,在设计应用程序的界面布局时,可以使用百分比布局或者约束布局等灵活的布局方式,避免使用具体的像素值。

3. 响应多窗口模式事件:在应用程序中,需要对多窗口模式下的事件进行处理,比如窗口大小变化事件、窗口焦点变化事件等。

可以通过注册监听器来处理这些事件,确保应用程序可以正确响应用户的操作。

4. 支持数据共享:在多窗口模式下,用户可能需要在不同应用程序之间共享数据,开发人员可以通过使用系统提供的共享机制来实现数据的传输。

Android移动应用开发实践

Android移动应用开发实践

Android移动应用开发实践当我们在使用手机时,随时随地打开各种APP,掌握鲜活的信息时,是否想过APP是如何产生的?是一群工程师,尤其是Android开发工程师通过编写代码,设计架构,才能将APP推向市场。

Android移动应用开发是一门需求量不断增长的技术,是软件行业中非常重要的一部分。

本文将对Android移动应用开发的实践进行探讨。

一、Android应用的开发环境Android应用的开发环境主要包括软件环境和硬件环境。

软件环境是指开发时需要安装哪些软件和工具。

Android开发环境需要Java JDK和Android SDK,开发工具可以选择Android Studio或Eclipse等;硬件环境是指硬件设备的要求,Android Studio由于需要运行Android模拟器,因此对计算机的硬件性能有要求,最好是具有良好的配置的电脑。

二、Android应用的开发流程Android应用的开发流程主要包括需求分析,UI设计,系统架构设计,编码测试和发布这几个步骤。

需求分析阶段是最重要的阶段,通过深入了解移动应用软件环境和实际用户需求,确定产品功能,从而制定出明确的产品需求。

UI设计阶段是设计师根据需求分析产生的用户场景来进行的。

视觉效果和操作体验是衡量产品质量的重要指标。

设计师不仅需考虑美观与实用,还需兼顾Android界面设计规范。

系统架构设计阶段是Android应用开发的重点环节,要确定整体架构,包括软件架构,模块划分和数据库设计,相互之间要遵循稳定、可靠和高效的设计原则。

编码测试阶段主要是将结构设计和业务逻辑通过代码实现,并对编写的代码进行测试,找出潜在的BUG并解决。

发布阶段需要将编写的Android应用程序发布到市场上,让广大用户使用体验。

发布后的各项数据需要进行分析,根据用户反馈不断完善应用程序,做到不断优化。

三、Android应用开发的技术要点1、Java编程语言: Android SDK使用Java语言开发,所以Android应用开发需要对Java编程语言有一定了解。

Android实训实习报告总结

Android实训实习报告总结

一、引言Android 学习已有一年半有余,先后做过两款游戏、三款应用和搭建一台服务端,也了解过一些Android相关的源码(JDK、SDK和NDK),学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。

巩固和学习了更多的Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。

android入门后,只会照着别人的葫芦来画瓢,即没有设计思想,也没有自主原创的代码,不好不好于是乎,进了公司跟着项目走,用项目来驱动自己去学习和提高公司是1+1开发模式,即1个美工 + 1个工程师,负责完成一个项目(主要是游戏开发),就完全需要自己设计游戏的布局、逻辑,以及各种动画,来增强用户体验的效果当时主要是看Android官方的SDK API文档、中文API文档、 JDK源码,对有些感念不清楚,就上论坛去找答案,如CSDN、ITEye、IBM、知乎,或者去啃google 官方的文档。

二、新掌握的Java基础学习2.1、Activity View、Surfaceview的理解掌握了常用控件、view、surfaceview使用方式,知道怎样去适配不同屏幕后,每天就是重复的工作,堆砌代码,难以进一步去提升自己于是就自己给自个找点事干,自定义控件,如对话框背景等,或去google code找些开源的代码下来研究,学习人家的设计思想、模块功能的划分、代码组织结构等知识这个过程中,涉及到的知识比较多,如版本管理工具SVN、Git、Mercurial,如设计模式的思想,如怎样构建通用的开源应用框架(考虑sdk1.5等版本),如何适用在不同屏幕分辨率的手机上等等学习中会不断遇到一个又一个新的问题,因此需要不断去查资料、再学习各种工具,逐步积累,潜移默化中自己掌握的知识和工具就多了,眼界也开阔了。

2.2、android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新,ListView、ViewPager、WevView、ExpandableListView、GridView、ScrollView、Horizontal ScrollView、Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多。

如何进行Android应用的多版本测试

如何进行Android应用的多版本测试

如何进行Android应用的多版本测试Android应用的多版本测试是为了确保应用在不同的Android操作系统版本上都能正常运行和提供良好的用户体验。

由于Android平台的碎片化,不同设备厂商和用户都可能使用不同版本的操作系统。

因此,针对不同版本的Android操作系统进行全面的测试工作,是开发者不可忽视的重要任务。

下面将介绍一些进行Android应用多版本测试的方法和注意事项:1. 设备选择在进行多版本测试前,首先需要选择适当的设备来代表不同的Android操作系统版本和屏幕分辨率。

建议选择不同厂商、不同型号的设备,并且覆盖主流的Android版本。

这样可以更全面地了解应用在不同环境下的表现,并及早发现和解决兼容性问题。

2. 适配性测试适配性测试是针对不同版本的Android操作系统,验证应用在各种系统级别的功能和特性上的兼容性。

测试人员需要验证应用在不同版本的Android系统上的稳定性、性能和功能表现,以确保应用在各个系统版本上的正常运行。

3. 兼容性测试兼容性测试是针对不同设备型号和屏幕分辨率,验证应用在不同设备上的兼容性。

测试人员需要验证应用在不同屏幕大小和分辨率下的布局是否正确,并检查应用在不同设备上的UI显示和交互是否一致。

此外,还需注意设备的处理器类型和内存容量,以确保应用在不同设备上的流畅性和稳定性。

4. 功能测试功能测试是针对应用的各项功能模块进行测试,确保在不同版本的Android系统上都能正常运行。

测试人员需要对应用的各个功能模块进行全面测试,包括界面交互、数据输入和输出、网络通信等。

同时,还需测试应用在不同版本的Android系统上的功能兼容性,避免因系统版本差异导致功能异常或崩溃的情况。

5. 性能测试性能测试是为了评估应用在不同版本的Android系统上的性能表现。

测试人员需要对应用在不同系统版本上的启动速度、响应时间和资源消耗进行测试,以及测试应用在不同网络环境下的网络传输速度和稳定性。

华为应用多开的原理

华为应用多开的原理

华为应用多开的原理1. 背景介绍在智能手机的使用过程中,有时我们可能需要同时登录多个账号,或者在同一款应用中使用多个账号。

然而,原生的应用程序往往只允许单一用户登录,这限制了用户的使用体验。

为了解决这一问题,华为在其手机上提供了应用多开功能,允许用户同时登录多个账号或使用多个账号。

2. 应用多开的实现原理华为应用多开的实现原理基于以下几个关键技术:2.1 双进程机制华为手机应用多开通过双进程机制实现多账号登录或使用。

每次用户在应用多开时,系统将为该应用创建一个新的进程。

这个新的进程与原有进程相互独立,拥有独立的数据空间和运行环境,从而实现了多账号的并行登录。

2.2 虚拟化技术华为手机应用多开还利用虚拟化技术实现多账号使用。

通过虚拟化技术,系统可以在同一台设备上同时运行多个操作系统,每个操作系统拥有独立的应用程序和数据。

当用户在应用多开时,实际上是在虚拟的操作系统中打开了一个新的应用实例,从而实现了多账号的同时使用。

2.3 数据隔离为了保证多个账号之间的数据安全和隔离,华为手机应用多开对不同账号的应用实例进行了数据隔离。

每个应用实例独立保存用户数据和配置信息,确保不同账号之间的数据不会互相干扰。

这样,即使在多账号同时使用的情况下,用户的数据也能够得到有效保护。

3. 应用多开的使用方法使用华为手机上的应用多开功能非常简单。

只需按照以下步骤操作即可:1.打开华为手机的设置应用,找到“应用多开”选项。

2.点击“应用多开”,系统将列出所有支持多开的应用程序。

3.选择想要多开的应用程序,系统将为该应用创建一个新的实例。

4.在新的应用实例中,输入相应的账号和密码,即可登录不同的账号。

5.可以在多个应用实例之间自由切换,实现多账号的同时使用。

4. 应用多开的应用场景应用多开功能在许多场景中都能够发挥重要作用,例如:•社交软件:允许用户同时登录多个社交账号,方便处理私人和工作社交关系的分离。

•游戏应用:允许用户同时使用多个游戏账号,享受不同账号带来的游戏体验。

如何在Android测试中应对不同设备的兼容性挑战

如何在Android测试中应对不同设备的兼容性挑战

如何在Android测试中应对不同设备的兼容性挑战如何应对不同设备的兼容性挑战在Android测试中,不同设备的兼容性挑战是一个必须应对的重要问题。

由于Android系统的开放性,市面上存在着各种不同的设备,包括不同品牌、型号、屏幕尺寸、操作系统版本等,这给开发者和测试人员带来了很大的挑战。

在本文中,我们将探讨如何应对这一挑战以确保Android应用程序在不同设备上的顺利运行。

1. 设备选型在进行Android测试之前,首先要选择一系列代表性的设备,覆盖不同的品牌、型号和操作系统版本。

根据应用程序的定位和目标用户群,选择包括低端、中端和高端设备在内的多款设备进行测试。

通过选择代表性设备,可以最大程度地覆盖不同设备的兼容性问题。

2. 物理设备和虚拟机测试兼容性测试可以使用物理设备和虚拟机两种方式进行。

物理设备测试能够更真实地模拟用户的使用情况,并且能够检测到一些硬件相关的兼容性问题。

虚拟机测试则更加便捷,可以快速部署和运行,并且可以模拟不同的设备和操作系统版本。

在实际测试中,综合使用物理设备和虚拟机进行测试,以充分覆盖不同场景下的兼容性问题。

3. 自动化测试为了提高测试效率和准确性,可以借助自动化测试工具来进行兼容性测试。

通过编写测试脚本,可以自动化执行大量的测试用例,覆盖更多的场景,并且减少人工测试的工作量。

同时,自动化测试还能够快速定位和报告问题,提高问题的排查和修复效率。

在选择自动化测试工具时,要根据应用程序的特点和需求进行合理选择。

4. 分析用户数据通过分析用户数据,可以获取用户在不同设备上的使用情况和反馈信息。

可以利用Firebase、Google Analytics等分析工具,收集设备信息、操作系统版本、应用程序崩溃日志等数据,并进行详细的分析。

通过分析用户数据,可以及时发现和解决在特定设备上出现的兼容性问题,优化用户体验。

5. 多浏览器适配除了设备兼容性外,Android应用程序还要考虑不同浏览器的兼容性问题。

安卓多开原理

安卓多开原理

安卓多开原理
安卓多开原理是通过虚拟化技术来实现的。

虚拟化技术是指在一台物理计算机上创建多个虚拟的运行环境,每个虚拟环境都可以独立运行应用程序,互相之间相互隔离,就像是在一台计算机上运行了多台独立的计算机。

在安卓多开中,通过虚拟化技术创建多个虚拟的安卓运行环境,每个虚拟环境都具有独立的系统和应用程序。

这些虚拟环境被称为虚拟机,每个虚拟机都有自己的独立存储空间、内存和其他资源。

每个虚拟机可以安装和运行不同的安卓应用程序,就像是在一台设备上同时运行多个安卓系统一样。

实现安卓多开的常用工具包括虚拟化软件和虚拟机引擎。

虚拟化软件用于创建和管理虚拟环境,常见的虚拟化软件有Parallel Space、VirtualXposed等。

虚拟机引擎负责模拟安卓系
统的运行环境,常见的虚拟机引擎有VirtualBox、VMware等。

在安卓多开的过程中,虚拟化软件会创建一个或多个虚拟环境,并将安卓系统安装到虚拟环境中。

每个虚拟环境都有一个独立的应用程序列表和数据存储空间。

用户可以在每个虚拟环境中安装不同的应用程序,并且这些应用程序之间相互独立,彼此不会产生冲突。

虚拟化技术通过将物理资源虚拟化为多个独立的逻辑资源,并提供隔离机制,实现了安卓多开的功能。

每个虚拟环境都是相互隔离的,不会相互影响,用户可以在不同的虚拟环境中同时使用不同的安卓应用程序,提高了使用效率和便利性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dataDir 目录的父级目录理论上归属 system 用户或 root 用户,除非是系统应用,否则不能访问。 补充 为什么使用 dataDir 而不是 nativeLibraryDir 或 sourceDir 呢? 看 nativeLibraryDir 和 sourceDir 目录所在的位置,base.apk 权限 rw-r-r--r-- 任意用户读取, lib 目录权限 rwxr-xr-x 任意用户读取和执行
拆招
反系统级应用多开
仅多用户方案的多开,忽略 chroot / lxc
简单粗暴的代码
// --- C++ --#include <unistd.h> bool isDualApp(){return 0 != getuid()/100000;}
// --- Java --import android.os.Process; static boolean isDualApp(){return 0 != Process.myUid() / 100000;}
10 1970-08-23 18:57 0 -> /data/data
drwxrwx--x 221 system system 16384 2019-09-05 11:50 11
drwxrwx--x 13 system system 16384 2019-09-12 17:53 999
使用多用户模式实现的多开,在客户端中可以通过 Android SDK 的 UserManger 类判断当前运行 APP 的用户是否为主用户和受限用户
// erManger.java public boolean isAdminUser() {
return isUserAdmin(UserHandle.myUserId()); } // ... public boolean isPrimaryUser() {
UserInfo user = getUserInfo(UserHandle.myUserId()); return user != null && user.isPrimary(); }
if (MU_ENABLED) { return uid / PER_USER_RANGE;
} else { return ER_SYSTEM;
} }
可看到通过 uid/100000 获得 Android 的 UserId,同时通过其它 final 字段和相关注释得知 OWNER/SYSTEM/ADMIN 的 UserId 是 0,因此我们可以通过 uid/100000 为 0 判断为主用户,非主用户 直接判为多开即可。
u999_a118 14392 905 0 14:07:52 ?
00:00:01 com.miui.analytics
u999_system 19793 905 0 19:55:24 ?
00:00:00 com.android.keychain
shell
20408 13712 3 19:58:11 pts/0 00:00:00 grep u999
# ls -al /data/app/com.example.checksandbox-ElZnrZIb5m2rbBv_3K8nZQ\=\=/ total 2420 drwxr-xr-x 3 system system 4096 2019-09-24 16:15 . drwxrwx--x 80 system system 12288 2019-09-24 16:15 .. -rw-r--r-- 1 system system 2440234 2019-09-24 16:15 base.apk drwxr-xr-x 3 system system 4096 2019-09-24 16:15 lib
Android 应用多开对抗实践
白天午睡梦到些以前给某行业安全峰会写了材料,醒来后把记得的部分重新整理一下,分享出来给大 家,尽量写得简洁明了。
未必准确,仅供参考,欢迎纠正补充
Android 应用多开对抗实践 应用多开技术总结 系统级技术 用户级技术 拆招 反系统级应用多开 简单粗暴的代码 验证 可改进 反用户级应用多开 仍然是简单粗暴的代码 验证 威力加强版 对用户级应用多开的理解 业务前端白名单 后记
用户级技术
多开技术方案 VirtualApp MultiDroid DroidPlugin Excelliance 其它
发行版 APP VirtualXposed, DualSpace LBE平行空间, Parallel Space 分身大师 双开助手, MultiAccount 虚拟大师
在用户级的多开技术中,还可以在按设计用途划分出三类
而 dataDir 的目录权限 rwx------ ,私有不公开
# ls -al /data/user/0/com.example.checksandbox/
total 40
drwx------ 5 u0_a366 u0_a366
4096 2019-09-24 16:15 .
drwxrwx--x 271 system system
99910118
Gid: 99910118
99910118
99910118
99910118
可改进
区分各种系统级双开/分身模式
反用户级应用多开
仍然是简单粗暴的代码
测试代码一
// --- C++ --#include <unistd.h> #include <sys/stat.h> #include <string> bool isDualApp(std::string dataDir) {
验证
使用上文提到的 MIUI 中的 "应用双开" 功能,在进程中找到 UserId 999 运行的进程,因为第一列显示 成了用户名,进 /proc/${PID}/status 查看进程 uid。uid / 100000 是 999,没毛病。
# --- adb shell ---
$ ps -ef | grep u999
测试代码二结果
技术 DroidPlugin VirtualApp VirtualApp MultiDroid Excelliance 其它
在 Android 5.0 在基于多用户功能 添加了 Android for work 功能,可以在同一个桌面启动器下 使用受限用户启动 APP,不再需要切换界面。同时将权限开发给了非系统应用。
chroot
UNIX 的 chroot 系统调用在 Android 上也能用,需要 root 权限。在本地挂载运行精简版系统镜 像,使用远程桌面软件如 VNC 等访问本地多开的系统。尚未发现发行版 APP,可能在 ARM 服务 器云手机中用到。
$ ls -al /data/user/
total 52
drwx--x--x 4 system system 4096 2019-09-05 11:49 .
drwxrwx--x 42 system system 4096 2019-04-22 20:32 ..
lrwxrwxrwx 1 root root
return 0 == access((dataDir + "/../").c_str(), R_OK); }
测试代码二
// --- Java --import java.io.File; boolean isDualApp(String dataDir){
return new File(dataDir + File.separator + "..").canRead(); }
技术 DroidPlugin VirtualApp VirtualApp MultiDroid Excelliance 其它
发行产品 分身大师 VirtualXposed DualSpace LBE平行空间 双开助手 虚拟大师
结果 阴性 阳性 + 阳性 + 阳性 + 阳性 + 阳性 +
emmm,看来三六零在文件系统上的功能做得挺完善的, access 访问 dataDir 的父目录时返回了 -1 (errno: 13 Permission denied),其它的没什么问题
“容器”:VirtualApp、MultiDroid 热更新/插件化:DroidPlugin、Excelliance 虚拟系统:虚拟大师
具体实现原理大家可以翻论坛里的 精品贴,这里不多描述。
值得一提的是,某云手机团队的 "虚拟大师" 产品,实现在用户态运行了一个精简版的 Android 系统镜 像,在系统库中拦截了几乎所有系统调用,使用类似前文提到的 chroot 挂载系统镜像的方法运行,有 兴趣的同学可以看一看。
20480 2019-09-24 16:15 ..
drwxrws--x 2 u0_a366 u0_a366_cache 4096 2019-09-24 16:15 cache
drwxrws--x 2 u0_a366 u0_a366_cache 4096 2019-09-24 16:15 code_cache
drwxrwxr-x 5 u0_a366 u0_a366
4096 2019-09-24 16:15 lldb
因此,对于用户级多开软件来说,仅是实现多开功能,完全可以复用原本的 base.apk 和 lib,不 需要在自己目录中释放一份,而 dataDir 目录却是必须要另外准备的。
验证
代码放 APP 里跑一遍看看 测试代码一结果
$ cat /proc/14392/status
Name: .miui.analytics
Umask: 0077
State: S (sleeping)
相关文档
最新文档