【问题标题】:How to recognize that CyanogenMod is on a board?如何识别 CyanogenMod 在板上?
【发布时间】:2017-01-14 16:40:15
【问题描述】:

我检查了http://developer.android.com/reference/android/os/Build.html 的很多字段。

但是我无法清楚地获得特定设备使用 CyanogenMod 的信息。

这是我得到的:

NETWORK_TYPE="0"
SDK_INT="10"
CODENAME="REL"
INCREMENTAL="eng.android.20110308.014205"
RELEASE="2.3.3"
SDK="10"
Build.BOARD=bravo
BOOTLOADER=0.93.0001
BRAND=htc_wwe
CPU_ABI=armeabi-v7a
CPU_ABI2=armeabi
DEVICE=bravo
DISPLAY=GRI40
FINGERPRINT=htc_wwe/htc_bravo/bravo/bravo:2.2/FRF91/226611:user/release-keys
HARDWARE=bravo
HOST=giulio-desktop
ID=FRF91
MANUFACTURER=HTC
MODEL=HTC Desire
PRODUCT=htc_bravo
RADIO=unknown
TAGS=release-keys
TIME=0
TYPE=userdebug
USER=android

NETWORK_TYPE="0"
SDK_INT="10"
CODENAME="REL"
INCREMENTAL="eng.shade.20110307.195429"
RELEASE="2.3.3"
SDK="10"
Build.BOARD=mahimahi
BOOTLOADER=0.35.0017
BRAND=google
CPU_ABI=armeabi-v7a
CPU_ABI2=armeabi
DEVICE=passion
DISPLAY=GRI40
FINGERPRINT=google/passion/passion:2.3.3/GRI40/102588:user/release-keys
HARDWARE=mahimahi
HOST=toxygene
ID=GRI40
MANUFACTURER=HTC
MODEL=Nexus One
PRODUCT=passion
RADIO=unknown
TAGS=test-keys
TIME=0
TYPE=user
USER=shade

【问题讨论】:

    标签: android firmware cyanogenmod


    【解决方案1】:

    PackageManager.hasSystemFeature("com.cyanogenmod.android") 会更加一致。

    【讨论】:

    • 您从哪里听说这是最一致的方法?
    • “系统特征”是一个具有确切含义的唯一名称,因此不太可能无意更改。
    【解决方案2】:

    从系统属性中读取要容易得多:

    String version = System.getProperty("os.version");
    if (version.contains("cyanogenmod")) {
        isCyanogenMode = true;
    }
    

    在我的设备上,os.version2.6.37.6-cyanogenmod-01509-g8913be8

    或者,您也可以依赖Build.USER 常量,它带有组装构建的人的姓名。对于 CyanogenMod,这通常是“阴影”(Steve Kondik aka Cyanogen 的另一个昵称)。

    还有一个特殊属性ro.modversion,但据我所知,您需要访问SystemProperties 内部类才能以编程方式读取它。

    【讨论】:

    • 这对我不起作用。我得到System.getProperty("os.version") 给我3.4.0-g9c0baa9
    【解决方案3】:

    在我的设备上,System.getProperty("os.version") 类似于3.0.64-CM-g9d16c8a。检查版本号中的cyanogenmod 不再起作用。我在post 中添加了更多详细信息。

    【讨论】:

      【解决方案4】:

      我发现最简单的方法是读取文件 /proc/version,其中包含有关内核版本的信息。

      带有 cyanogenmod 的手机会给出如下信息:

      Linux version 2.6.37.2-cyanogenmod-01149-g8cdf03e
      

      读取此文件不需要 root 权限(runnung uname -r 需要)。

      【讨论】:

      • 这不是最可靠的答案,因为任何人都可以更改他们的内核,这会导致此答案失败。
      • 当我尝试在 Android 9 上读取 /proc/version 时出现此错误:java.io.FileNotFoundException: /proc/version (Permission denied)
      【解决方案5】:

      内核一直被最终用户换出,因此使用 System.getProperty("os.version") 或从 /proc/version 读取并不能很好地指示设备是否正在运行 cyanogenmod。让我换个说法,仅将它们用作指标并不是一个好主意。您需要使用多种方法的组合。正如@kakopappa 在他阅读 os.version 和 /proc/version 的另一篇文章中指出的那样,您还应该检查

      android.os.Build.HOST
      

      根据我的经验,10 次中有 9 次在其中包含 cyanogenmod。为了安全起见,您也需要使用其他方法,因为可以通过 build.prop -> ro.build 更改 HOST 变量.host

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 2016-02-27
        相关资源
        最近更新 更多