固件UserDebug转User

概述

Android固件在调试的时候一般会使用userdebug版本,这样可以直接root,而且有非常多的log信息帮助调试.但是正式发布的时候就需要使用User版本.

User版本

关闭调试log信息.

User版本除了必要的打印信息和报错信息外,应该关掉多余的调试信息.

  1. menuconfig中关掉相应的调试配置.
  2. 驱动文件中关闭自定义的调试宏
  3. 对于使用printk打印的信息根据实际情况注释掉.

关闭adb

adb及root配置的属性如下表所示:

1.png

当lunch选择user版本时,ro.secure一般都为0,即关闭root.adb相关选项可以根据自己的需求开关.

adb指纹认证


diff --git a/core/main.mk b/core/main.mk
index b0207be..060b0ec 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -429,7 +429,7 @@ ifeq (true,$(strip $(enable_target_debugging)))
   INCLUDE_TEST_OTA_KEYS := true
 else # !enable_target_debugging
   # Target is less debuggable and adbd is off by default
-  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
+  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
 endif # !enable_target_debugging

ro.adb.secure

#for cts requirement
ifeq ($(TARGET_BUILD_VARIANT),user)
PRODUCT_PROPERTY_OVERRIDES += \
    ro.adb.secure=0 \
    persist.sys.usb.config=mtp
else
PRODUCT_PROPERTY_OVERRIDES += \
    ro.adb.secure=0 \
    persist.sys.usb.config=mtp,adb
endif

RK中还有一个地方影响persist.sys.usb.config参数

device/rockchip/common

ifeq ($(strip $(BUILD_WITH_UMS)),true)
PRODUCT_PROPERTY_OVERRIDES +=               \
    ro.factory.hasUMS=true                  \
    persist.sys.usb.config=mass_storage,adb

PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/init.rockchip.hasUMS.true.rc:root/init.$(TARGET_BOARD_HARDWARE).environment.rc
else
ifeq ($(strip $(BUILD_WITH_CDROM)),true)
PRODUCT_PROPERTY_OVERRIDES +=                 \
    ro.factory.hasUMS=cdrom                   \
    ro.factory.cdrom=$(BUILD_WITH_CDROM_PATH) \
    persist.sys.usb.config=mass_storage,adb

PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/init.rockchip.hasCDROM.true.rc:root/init.$(TARGET_BOARD_HARDWARE).environment.rc
else
PRODUCT_PROPERTY_OVERRIDES +=       \
    ro.factory.hasUMS=false         \
    persist.sys.usb.config=mtp,adb  \
    testing.mediascanner.skiplist = /mnt/shell/emulated/Android/

PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/init.rockchip.hasUMS.false.rc:root/init.$(TARGET_BOARD_HARDWARE).environment.rc
endif
endif

使用platform key签名

调试的时候使用的是testkey,这个是通用的,我们需要生成自己的platform key为固件签名.

签名方法请参考:

Android系统制作自定义签名

对于内置apk,如果想要给他们系统权限,可以使用系统签名.

方法参考:

Apk 使用系统签名

编译时报错

error: ro.build.fingerprint cannot exceed 91 bytes

需要增大PROP_VALUE_MAX参数的值

--- a/libc/include/sys/system_properties.h
+++ b/libc/include/sys/system_properties.h
@@ -36,7 +36,8 @@ __BEGIN_DECLS
 typedef struct prop_info prop_info;

 #define PROP_NAME_MAX   32
-#define PROP_VALUE_MAX  92
+//#define PROP_VALUE_MAX  92
+#define PROP_VALUE_MAX  128
--- a/cmds/installd/installd_deps.h
+++ b/cmds/installd/installd_deps.h
@@ -34,7 +34,7 @@ extern int get_property(const char *key,
                         const char *default_value);
 // Size constants. Should be checked to be equal to the cutils requirements.
 constexpr size_t kPropertyKeyMax = 32u;
-constexpr size_t kPropertyValueMax = 92u;
+constexpr size_t kPropertyValueMax = 128u;
--- a/tools/post_process_props.py
+++ b/tools/post_process_props.py
@@ -23,7 +23,8 @@ import sys
 # The constants in system_properties.h includes the termination NUL,
 # so we decrease the values by 1 here.
 PROP_NAME_MAX = 31
-PROP_VALUE_MAX = 91
+#PROP_VALUE_MAX = 91
+PROP_VALUE_MAX = 128
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容