android自动删除su,Android如何在测试程序中删除被测应用私有的原始数据

在Android App测试中,为了确保每次测试都在相同起点,可以通过手动、命令行或自动化方式清除应用数据。手动操作可在Settings中清除应用数据,命令行使用`adb shell pm clear`命令,自动化测试则可以通过VBS脚本或在测试项目中添加代码实现。需要注意的是,由于Android安全机制,一个App无法直接清除其他App的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道在Android App测试时,当我们想把应用程序恢复的初始状态,我们通常可以有以下几种做法:

手动

到Setting -> Apps -> 单击我们要测得应用程序 -> 选择Clear data

这样重新启动App的时候,我们的程序就处于初始状态了。

命令行

当然我们也是可以使用命令行来操作的,比如:

adb shell pm clear my.app.package

只要把对应的包名,改成你自己的就可以了。

自动化

要是能自动化就更加完美了,这样我们就可以在我们的自动化Case里添加相应的恢复App原始状态的代码了,如此我们就可以保证我们的Case总是在一个一致的测试环境中,岂不更美?

这里我找到了两种方法。

方法一:在VBS脚本中添加代码,完成操作

Set objWsh = CreateObject("Wscript.Shell")

objWsh.Run"adb shell pm clear my.app.package",1, True

方法二:在Android Test Project中添加相应代码删除私有原始数据

ffd81fde3a53ac60354ccf27cc30b65c.gif

Context context = this.getInstrumentation().getTargetContext().getApplicationContext();

Editor edit=context.getSharedPreferences(m_strPreferencesName, Context.MODE_PRIVATE).edit();

edit.clear();

edit.commit();

ffd81fde3a53ac60354ccf27cc30b65c.gif

当然我这里是删除名叫“m_strPreferencesName”的数据,如果我们想删除其他,或者所有的Share Preferences数据都是可以的。

请注意:

虽然Java 有Java.lang.runtime,我们可以通过它在运行时去执行Command命令,完成一些操作,但是在Android里,类似下面的代码就不可以:

ffd81fde3a53ac60354ccf27cc30b65c.gif

try{

Runtime.getRuntime().exec("adb shell pm clear com.my.package");

}catch(IOException ex)

{

ex.printStackTrace();

}

ffd81fde3a53ac60354ccf27cc30b65c.gif

这里不会抛任何异常,而且也不会清除App的数据。

这是因为Andorid的安全机制不允许一个App去删除另一个App的数据。

参考资料:

http://stackoverflow.com/questions/5544205/accessing-application-context-from-testsuite-in-setup-before-calling-getactivi

http://stackoverflow.com/questions/4856955/how-to-programatically-clear-application-data

### 安卓设备上添加或安装系统应用程序 在安卓设备上添加或安装系统级应用涉及多个方面,包括权限管理、文件路径以及特定的配置过程。以下是详细的说明: #### 权限与安全性 安卓系统非常注重用户数据的安全性和隐私保护[^1]。因此,在安装系统级应用之前,必须确保该应用具备相应的权限,并且其操作不会对系统的稳定性和安全性造成威胁。 #### 创建系统应用程序 为了使一个普通的 Android 应用程序成为系统级别应用,通常需要执行以下操作: - **项目配置**:创建一个新的 Android 工程并将其标记为系统应用。这可以通过调整 `AndroidManifest.xml` 文件中的属性来完成。例如,设置 `<application>` 节点的 `android:sharedUserId="android.uid.system"` 属性[^2]。 ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.systemapp"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" android:sharedUserId="android.uid.system"> <!-- 关键 --> ... </application> </manifest> ``` - **签名匹配**:系统级应用还需要使用与系统镜像相同的密钥进行签署。这意味着如果没有原始 ROM 的私有密钥,则无法成功部署某些类型的系统应用。 #### 手动安装方法 如果希望通过手动方式将 APK 添加至 `/system/priv-app/` 或其他指定目录以使其作为系统应用运行,需注意以下几点: - 设备应处于已 root 状态或者支持 ADB 命令行工具; - 使用命令如 `adb push your_app.apk /system/priv-app/YourAppName/your_app.apk` 将目标 apk 推送到相应位置; - 修改分区挂载状态(如果是只读),通过 remount 实现写入能力后再推送文件;最后重启设备生效。 #### 特定功能需求下的考虑因素 针对某些特殊场景比如模拟地理位置等功能的需求时,可能还会涉及到额外的要求——即除了上述基本流程外还需进一步确认是否满足对应 API 访问条件等问题[^4]。 ```bash # 示例ADB指令序列用于root环境下强制放置APK到Privileged区域 su mount -o rw,remount /system # 改变/system为可写模式 mkdir /system/priv-app/NewApp # 新建存放新APP的目标夹 cp /path/to/local/newapp.apk /system/priv-app/NewApp/ chmod 644 /system/priv-app/NewApp/* # 设置适当权限给新增加的应用包体 reboot # 提交更改后重新启动手机让改动起效 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值