CTS-DEBUG CtsAppSecurityHostTestCases AdoptableHostTest#testApps

# CTS-DEBUG CtsAppSecurityHostTestCases AdoptableHostTest#testApps

这个case 其实是和testEjected  是一样的,如果出现了和我上一篇一样的问题(Expected private volume; found [private:179,66 unmountable 02f80bf6-ac2d-4afa-99be-6869b479334c, private mounted null]),可以参考上一篇解决方案。这个其实是一整块的case ---AdoptableHostTest 可以单跑这个Test 测试该项

run cts-dev  -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest

可是这次报错的内容不一样,原因是这样的,不插实体sdcard 跑该case:在修改动态分区前
case 是pass的,修改动态分区后就不行了。
来看问题
cts AdoptableHostTest#testApps test fail  log 如下

android.appsecurity.cts.AdoptableHostTest#testApps   
    java.lang.AssertionError: Expected success string but found Failure [-6]
    at android.appsecurity.cts.AdoptableHostTest.assertSuccess(AdoptableHostTest.java:385)
    at android.appsecurity.cts.AdoptableHostTest.testApps(AdoptableHostTest.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

调查过程中发现测试该case的时候会创建虚拟sdcard,然后转成内部存储,然后会将原来内部存储的数据移到虚拟的sdcard中。
因为在修改动态分区前的版本是ok的,所以参考动态分区修改的文件内容。
最后发现和分区表 fstab有关
我们设备是non ab的,非动态分区使用的文件为
device\qcom\msm8953_64\fstabs-4.9\fstab_non_AB_variant.qti
动态分区使用的文件是
device\qcom\msm8953_64\fstabs-4.9\fstab_non_AB_dynamic_partition_variant.qti
对比两个文件的差异,考虑到case测试的时候会移动数据,用户数据是放在userdata下的
fstab中 sdcard 使用的是**encryptable=footer**

    /devices/soc/7864900.sdhci/mmc_host*        /storage/sdcard1 vfat  nosuid,nodev         wait,voldmanaged=sdcard1:auto,noemulatedsd,encryptable=footer

动态分区前 userdata使用的是**forceencrypt=footer**

    /dev/block/bootdevice/by-name/userdata      /data        ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc,discard  wait,forceencrypt=footer,quota,reservedsize=128M

动态分区后userdata使用的是**fileencryption=ice**

    /dev/block/bootdevice/by-name/userdata       /data            ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc,discard  latemount,wait,formattable,fileencryption=ice,quota,reservedsize=128M,checkpoint=block

这两个加密方式不一样,所以尝试修改动态分区的fstab文件**forceencrypt=footer,fileencryption=ice**

    /dev/block/bootdevice/by-name/userdata       /data            ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc,discard  latemount,wait,formattable,forceencrypt=footer,fileencryption=ice,quota,reservedsize=128M,checkpoint=block

修改后在跑case 测试pass

注意啦

修改这种方式虽然能跑过case AdoptableHostTest  可是如果你是Android Q 以上的版本,测试CtsSecurityTestCases的时候会报错,原因就是AndroidQ 以上的版本需要用FBE加密 fileencryption=ice。上面那种修改方式,在forceencrypt,fileencryption两个都存在的时候通过查看 ro.crypto.type=block

        if ("file".equals(PropertyUtil.getProperty("ro.crypto.type"))) {
            Log.d(TAG, "Device is encrypted with file-based encryption.");
            // TODO(b/111311698): If we're able to determine if the hardware
            //     has AES instructions, confirm that AES, and only AES,
            //     is in use.  If the hardware does not have AES instructions,
            //     confirm that either AES or Adiantum is in use.
            return;
        }
        if (PropertyUtil.getFirstApiLevel() < MIN_FBE_REQUIRED_API_LEVEL) {
            Log.d(TAG, "Device is encrypted.");
            return;
        }
        fail("File-based encryption is required");

知道问题点后,userdata就不能加forceencrypt了,那就修改sdcard的加密属性为 fileencryption=ice ,编译测试后 就没问题了

/devices/soc/7864900.sdhci/mmc_host*         /storage/sdcard1   vfat    nosuid,nodev                                wait,voldmanaged=sdcard1:auto,noemulatedsd,fileencryption=ice
/devices/platform/soc/7864900.sdhci/mmc_host*         /storage/sdcard1   vfat    nosuid,nodev                                wait,voldmanaged=sdcard1:auto,noemulatedsd,fileencryption=ice

 

在修改fstab的时候发现另一个问题跟这个有关,u盘插入设备可识别到插入,但是识别不成存储设备导致U盘不可用 下一篇说明

<think>嗯,用户遇到了一个权限问题,执行./android-cts/tools/cts-tradefed时提示权限不够。我需要先回忆一下Linux权限的基本知识。这个错误通常是因为文件没有执行权限,所以应该检查文件的权限设置。 首先,用户可能没有对该文件添加可执行权限。这时候应该用chmod命令来修改权限,比如chmod +x加上文件名。不过,我需要确认用户是否正确使用了命令,路径是否正确。可能用户所在的当前目录不是android-cts下,或者文件路径有误,不过错误提示显示的是正确的路径,所以可能不是路径问题。 另外,用户是否有权限访问该文件?如果是系统权限问题,可能需要sudo,但使用sudo可能不太安全,尤其是CTS测试可能需要特定环境。所以建议用户先尝试修改文件权限,而不是直接使用sudo。 接下来,我需要考虑是否有其他可能的原因。比如文件是否是损坏的,或者是不是正确的可执行文件。有时候文件可能没有正确的shebang行,或者格式不对,但这种情况比较少见。用户可能需要检查文件类型,用file命令看看是否是脚本或者二进制文件。 还有,整个tools目录的权限如何?如果父目录没有执行权限,用户可能也无法访问其中的文件。这时候需要检查目录的权限,用ls -l查看,并可能需要chmod修改目录权限。 总结下来,解决方案步骤应该是:检查文件权限,用chmod添加执行权限,确认路径正确,检查文件完整性,最后考虑目录权限。同时提醒用户谨慎使用sudo,以免引发安全问题。</think>你遇到的错误 `./android-cts/tools/cts-tradefed: 权限不够` 是典型的 **Linux/Unix 系统权限问题**,以下是分步分析和解决方案: --- ### **1. 问题原因** - **文件缺少执行权限**:Linux系统中,若文件未设置“可执行”权限(`x` 权限),则无法直接通过路径执行。 - **用户权限不足**:当前用户可能不属于文件所有者或所属用户组,且未分配执行权限。 --- ### **2. 验证文件权限** 在终端输入以下命令,查看文件权限: ```bash ls -l ./android-cts/tools/cts-tradefed ``` 输出示例: ``` -rw-r--r-- 1 user group 12345 Jan 1 12:34 ./android-cts/tools/cts-tradefed ``` - **关键字段**:第一列的 `-rw-r--r--` 表示: - 所有者(user)有读写权限(`rw-`) - 所属组(group)和其他用户只有读权限(`r--`) - **缺少执行权限**(没有 `x`)。 --- ### **3. 添加执行权限** 为文件添加执行权限: ```bash chmod +x ./android-cts/tools/cts-tradefed ``` - `chmod`:修改权限的命令 - `+x`:为所有者、组和其他用户添加执行权限 - 再次运行 `ls -l` 确认权限已更新为 `-rwxr-xr-x` --- ### **4. 检查文件路径和完整性** - **路径是否正确**:确保当前目录是 `android-cts` 的父目录。若路径错误,需调整命令: ```bash cd /path/to/android-cts # 进入正确目录 ./tools/cts-tradefed ``` - **文件是否完整**:若文件损坏或未下载完整,可重新下载 [Android CTS 测试套件](https://source.android.com/docs/compatibility/cts/downloads)。 --- ### **5. 高级场景(可选)** - **使用 `sudo`(谨慎操作)**:若文件属于其他用户(如 `root`),可尝试: ```bash sudo ./android-cts/tools/cts-tradefed ``` - ⚠️ 注意:CTS测试通常无需 `sudo`,过度使用可能导致环境异常。 - **修改文件所有权**:若文件属于其他用户: ```bash sudo chown $USER:$USER ./android-cts/tools/cts-tradefed ``` --- ### **6. 验证是否解决** 重新执行命令: ```bash ./android-cts/tools/cts-tradefed ``` 若仍报错,请检查终端输出是否有其他错误信息(如Java依赖缺失等)。 --- ### **总结** | 步骤 | 操作 | 命令示例 | |------|------|----------| | 1 | 检查权限 | `ls -l ./android-cts/tools/cts-tradefed` | | 2 | 添加执行权限 | `chmod +x ./android-cts/tools/cts-tradefed` | | 3 | 重新执行 | `./android-cts/tools/cts-tradefed` | 若问题持续,请提供完整的终端输出以进一步排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值