【问题标题】:How can I overcome the property length limitation of the "adb shell setprop"如何克服“adb shell setprop”的属性长度限制
【发布时间】:2011-02-21 16:13:24
【问题描述】:

当我尝试为名称 >= 32 个字符的属性设置值时出现错误

adb shell setprop 01234567890123456789012345678901 VALUE

错误:

could not set property

这很好用

adb shell setprop 0123456789012345678901234567890 VALUE
adb shell getprop 0123456789012345678901234567890
VALUE

有什么方法可以设置名称更长的属性吗?

【问题讨论】:

    标签: android properties


    【解决方案1】:

    看起来没有办法绕过这个限制。我在 android java 源代码中看到了相同的规则。

    public class SystemProperties
    {
        public static final int PROP_NAME_MAX = 31;
        public static final int PROP_VALUE_MAX = 91;
    
        ...
    }
    

    【讨论】:

    • [叹气] 是的,Android 操作系统喜欢在没有充分理由的情况下设置随机限制。
    • 在 Android 上的 Java VM 内部使用的 Android NDK 的 C 代码中,您可以在 usr/include/sys/system_properties.h 标头中找到它:gist.github.com/mnemonicflow/…#define PROP_NAME_MAX 32 #define PROP_VALUE_MAX 92 在 C 中附加字节用于以 '\0' 结束字符串
    【解决方案2】:

    我也遇到了同样的问题。正如上面提到的答案,不可能使用超过 31 的名称。 所以我将包名称更改为短于 31 并且现在可以使用。

    【讨论】:

      【解决方案3】:

      更新:Android O 中取消了系统属性名称 32 个字符的限制。您现在可以随意使用更长的名称。

      public class SystemProperties {
          /**
           * Android O removed the property name length limit, but com.amazon.kindle 7.8.1.5
           * uses reflection to read this whenever text is selected (http://b/36095274).
           */
          public static final int PROP_NAME_MAX = Integer.MAX_VALUE;
          public static final int PROP_VALUE_MAX = 91;
          ...
      }
      

      【讨论】:

        【解决方案4】:

        也许使用重定向?

        设置保存conf文件文件名的小属性:

        setprop confFileName "myConf.yml"
        

        在那个 conf 文件中有你所有的大属性名称和值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-03-30
          • 2015-11-13
          • 2014-10-02
          • 1970-01-01
          • 2014-04-25
          • 2010-12-02
          • 1970-01-01
          相关资源
          最近更新 更多