3 # Copyright (C) 2009 The Android Open Source Project
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
19 # See PROP_VALUE_MAX system_properties.h.
20 # PROP_VALUE_MAX in system_properties.h includes the termination NUL,
21 # so we decrease it by 1 here.
24 # Put the modifications that you need to make into the /system/build.prop into this
25 # function. The prop object has get(name) and put(name,value) methods.
26 def mangle_build_prop(prop):
29 # Put the modifications that you need to make into the /default.prop into this
30 # function. The prop object has get(name) and put(name,value) methods.
31 def mangle_default_prop(prop):
32 # If ro.debuggable is 1, then enable adb on USB by default
33 # (this is for userdebug builds)
34 if prop.get("ro.debuggable") == "1":
35 val = prop.get("persist.sys.usb.config")
40 prop.put("persist.sys.usb.config", val)
41 # UsbDeviceManager expects a value here. If it doesn't get it, it will
42 # default to "adb". That might not the right policy there, but it's better
44 if not prop.get("persist.sys.usb.config"):
45 prop.put("persist.sys.usb.config", "none");
48 """Validate the properties.
51 True if nothing is wrong.
54 buildprops = prop.to_dict()
55 dev_build = buildprops.get("ro.build.version.incremental",
57 for key, value in buildprops.iteritems():
58 # Check build properties' length.
59 if len(value) > PROP_VALUE_MAX:
60 # If dev build, show a warning message, otherwise fail the
61 # build with error message
63 sys.stderr.write("warning: %s exceeds %d bytes: " %
64 (key, PROP_VALUE_MAX))
65 sys.stderr.write("%s (%d)\n" % (value, len(value)))
66 sys.stderr.write("warning: This will cause the %s " % key)
67 sys.stderr.write("property return as empty at runtime\n")
70 sys.stderr.write("error: %s cannot exceed %d bytes: " %
71 (key, PROP_VALUE_MAX))
72 sys.stderr.write("%s (%d)\n" % (value, len(value)))
77 def __init__(self, lines):
78 self.lines = [s.strip() for s in lines]
82 for line in self.lines:
83 if not line or line.startswith("#"):
85 key, value = line.split("=", 1)
91 for line in self.lines:
92 if line.startswith(key):
93 return line[len(key):]
96 def put(self, name, value):
98 for i in range(0,len(self.lines)):
99 if self.lines[i].startswith(key):
100 self.lines[i] = key + value
102 self.lines.append(key + value)
105 f.write("\n".join(self.lines))
111 lines = f.readlines()
114 properties = PropFile(lines)
116 if filename.endswith("/build.prop"):
117 mangle_build_prop(properties)
118 elif filename.endswith("/default.prop"):
119 mangle_default_prop(properties)
121 sys.stderr.write("bad command line: " + str(argv) + "\n")
124 if not validate(properties):
127 f = open(filename, 'w+')
131 if __name__ == "__main__":