Android11.0(R) MTK user版本打开MtkLog功能

MTKLog 功能很好用,在 userdebug 和 eng 版本中可以帮助我们分析问题。
今天来搞一下,在 User 版本中也启用这个功能。

修改清单

device/mediatek/system/common/mtklog/mtklog-config-bsp-eng.prop
device/mediatek/system/common/mtklog/mtklog-config-bsp-user.prop
device/mediatek/system/common/device.mk
device/mediatek/vendor/common/device.mk
vendor/mediatek/proprietary/packages/apps/EngineerMode/AndroidManifest.xml
vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/EngineerModeReceiver.java
vendor/mediatek/proprietary/packages/apps/MTKLogger/Android.mk
vendor/mediatek/proprietary/packages/apps/MTKLogger/src/com/debug/loggerui/utils/Utils.java
vendor/mediatek/proprietary/external/NetworkLogD/netdiag/commandlistening.cpp

device/mediatek/system/common/mtklog/mtklog-config-bsp-eng.prop
device/mediatek/system/common/mtklog/mtklog-config-bsp-user.prop

@@ -1,5 +1,5 @@
 # mtk log path can be set as system_data or device_storage or portable_storage
-mtklog_path = system_data
+mtklog_path = internal_sd
 com.mediatek.log.mobile.customer = MTK_Internal
 com.mediatek.log.mobile.AllMode = true

device/mediatek/system/common/device.mk

@@ -672,13 +672,13 @@ $(call inherit-product-if-exists, vendor/mediatek/common/device-vendor.mk)
 
 # mtklog config
 ifeq ($(strip $(MTK_BASIC_PACKAGE)), yes)
-  ifeq ($(TARGET_BUILD_VARIANT),eng)
+  ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug user),)
     PRODUCT_COPY_FILES += $(LOCAL_PATH)/mtklog/mtklog-config-basic-eng.prop:system/etc/mtklog-config.prop:mtk
   else
     PRODUCT_COPY_FILES += $(LOCAL_PATH)/mtklog/mtklog-config-basic-user.prop:system/etc/mtklog-config.prop:mtk
   endif
 else
-  ifeq ($(TARGET_BUILD_VARIANT),eng)
+  ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug user),)
     PRODUCT_COPY_FILES += $(LOCAL_PATH)/mtklog/mtklog-config-bsp-eng.prop:system/etc/mtklog-config.prop:mtk
   else
     PRODUCT_COPY_FILES += $(LOCAL_PATH)/mtklog/mtklog-config-bsp-user.prop:system/etc/mtklog-config.prop:mtk
@@ -2433,7 +2433,7 @@ ifneq ($(wildcard vendor/mediatek/internal/mtklog_enable),)
     MSSI_HAVE_AEE_FEATURE = no
   endif
 # Case: Customer eng/userdebug load
-else ifneq ($(strip $(TARGET_BUILD_VARIANT)),user)
+else ifneq ($(strip $(TARGET_BUILD_VARIANT)),eng  userdebug user)
   PRODUCT_PACKAGES += log-handler
   PRODUCT_PACKAGES += loghidlsysservice
 
@@ -3656,7 +3656,7 @@ ifeq ($(strip $(MSSI_MTK_ENGINEERMODE_APP)), yes)
     PRODUCT_PACKAGES += libem_wifi_jni
     PRODUCT_PACKAGES += libem_audio_jni
   else
-    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug),)
+    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug user),)
       PRODUCT_PACKAGES += EngineerMode
       PRODUCT_PACKAGES += libem_suppo

device/mediatek/vendor/common/device.mk

+++ b/alps/device/mediatek/vendor/common/device.mk
@@ -779,7 +779,7 @@ ifeq ($(strip $(MTK_ENGINEERMODE_APP)),yes)
     DEVICE_MANIFEST_FILE += $(LOCAL_PATH)/project_manifest/manifest_em.xml
     PRODUCT_PACKAGES += em_hidl
   else
-    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug),)
+    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug user),)
       DEVICE_MANIFEST_FILE += $(LOCAL_PATH)/project_manifest/manifest_em.xml
       PRODUCT_PACKAGES += em_hidl
     endif

配置暗码进入 MTKLog app 界面
vendor/mediatek/proprietary/packages/apps/EngineerMode/AndroidManifest.xml

                 <data
                     android:host="3646633"
                     android:scheme="android_secret_code" />
+
+                 <data
+                    android:host="9527686"
+                    android:scheme="android_secret_code" />
+                    
             </intent-filter>

vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/EngineerModeReceiver.java

@@ -39,6 +39,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.content.ComponentName;
 
 /**
  * Broadcast receiver for EM start secret code.
@@ -50,6 +51,11 @@ public final class EngineerModeReceiver extends BroadcastReceiver {
     private static final String SECRET_CODE_ACTION
                                  = "android.provider.Telephony.SECRET_CODE";
 
+    // process *#*#3646633#*#*
+    private final Uri mEmUri = Uri.parse("android_secret_code://05023646633");
+    // process *#*#9527686#*#* mtklog
+    private final Uri mMtklogUri1 = Uri.parse("android_secret_code://9527686");
+
     @Override
     public void onReceive(Context context, Intent intent) {
         if (intent.getAction() == null) {
@@ -57,10 +63,24 @@ public final class EngineerModeReceiver extends BroadcastReceiver {
             return;
         }
         if (intent.getAction().equals(SECRET_CODE_ACTION)) {
-            Elog.i(TAG, "Receive secret code intent");
-            Intent intentEm = new Intent(context, EngineerMode.class);
-            intentEm.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            context.startActivity(intentEm);
+            Uri uri = intent.getData();
+            Elog.i(TAG, "Receive secret code intent and uri is " + uri);
+                       if (uri.equals(mEmUri))
+                       {
+               Intent intentEm = new Intent(context, EngineerMode.class);
+               intentEm.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+               context.startActivity(intentEm);
+                       }
+                       else if(uri.equals(mMtklogUri1))
+                       {
+                               String packageName = "com.debug.loggerui";
+                               String className = "com.debug.loggerui.MainActivity";
+                               Intent intentEm = new Intent(Intent.ACTION_MAIN);
+                               intentEm.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                               ComponentName cn = new ComponentName(packageName, className);
+                               intentEm.setComponent(cn);
+                               context.startActivity(intentEm);
+                       }
         }
     }
 }

vendor/mediatek/proprietary/packages/apps/MTKLogger/Android.mk

@@ -3,9 +3,9 @@ LOCAL_PATH:= $(call my-dir)
 # Build DebugLoggerUI.apk
 include $(CLEAR_VARS)
 
-ifeq ($(TARGET_BUILD_VARIANT), user)
-LOCAL_MANIFEST_FILE := user/AndroidManifest.xml
-endif
+#ifeq ($(TARGET_BUILD_VARIANT), user)
+#LOCAL_MANIFEST_FILE := user/AndroidManifest.xml
+#endif
 
 LOCAL_MODULE_TAGS := optional
 LOCAL_AAPT_INCLUDE_ALL_RESOURCES := true

修改 app 界面显示保存路径为 /sdcard
vendor/mediatek/proprietary/packages/apps/MTKLogger/src/com/debug/loggerui/utils/Utils.java

@@ -591,7 +591,7 @@ public class Utils {
     public static final String LOG_PATH_TYPE_SYSTEM_DATA = "system_data";
     public static final String LOG_PATH_TYPE_DEVICE_STORAGE = "device_storage";
     public static final String LOG_PATH_TYPE_PORTABLE_STORAGE = "portable_storage";
-    public static final String LOG_PATH_TYPE_DEFAULT = LOG_PATH_TYPE_SYSTEM_DATA;
+    public static final String LOG_PATH_TYPE_DEFAULT = LOG_PATH_TYPE_DEVICE_STORAGE;
 
     public static final Map<String, Integer> LOG_PATH_TYPE_STRING_MAPS =
             new HashMap<String, Integer>();

将 netlog 保存路径 /data 修改为 /sdcard
vendor/mediatek/proprietary/external/NetworkLogD/netdiag/commandlistening.cpp

@@ -179,7 +179,7 @@ bool commandlistening::isCustomerUserLoad() {
     property_get("ro.build.type", buildtype, "user");
     if (0 == strncmp("0",internal,strlen("0"))
         && 0 == strncmp("user",buildtype,strlen("userdebug"))) {
-        result = true;
+        //result = true;//cczheng annotation
     }
     LOGD("isCustomerUserLoad()? %d,internal = %s,buildtype =%s",
          result, internal, buildtype );

将 mobilelog 保存路径 /data 修改为 /sdcard
vendor/mediatek/proprietary/external/mobile_log_d/config.c

@@ -795,10 +795,11 @@ int update_sd_context(const char* path) {
 }
 
 int load_type() {
-    char build_type[BUFFER_SIZE_128] = {0};
+    return 0;//cczheng annotation
+    /*char build_type[BUFFER_SIZE_128] = {0};
     char internal_prpject[BUFFER_SIZE_128] = {0};
     property_get("ro.build.type", build_type, "");
     property_get("ro.vendor.mtklog_internal", internal_prpject, "");
     if (strcmp(build_type, "user") != 0 || strcmp(internal_prpject, "1") == 0) return 0;
-    return 1;
+    return 1;*/
 }
### MTKLog的定义 MTKLog 是针对联发科(MediaTek, MTK)平台设计的日志记录工具集,旨在帮助开发者收集、解析和调试设备运行期间产生的各类日志信息[^1]。 ### 使用场景 MTKLog 主要应用于以下几个方面: - **内核级问题排查**:通过捕获 kernel log 来追踪系统启动过程中的异常情况以及硬件初始化失败等问题。 - **无线通信模块诊断**:可以获取到射频相关的日志,包括 SIM 卡操作、STK 命令响应及 modem 处理 AT command 的交互详情[^2]。 - **Wi-Fi 功能验证**:当 Wi-Fi 被激活时,能够跟踪其内部工作流,特别是对于 vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/ 下组件的行为分析非常有用[^3]。 ### 如何使用 为了有效地利用 MTKLog 进行开发或维护活动,通常会结合 `adb` 工具执行特定命令来实现不同目的的日志采集。例如,如果想要捕捉带有指定关键词的关键级别日志,则可以通过如下指令完成设置并开始监听: ```bash adb shell setprop log.tag.<TAG> <LEVEL> ``` 其中 `<TAG>` 表示自定义标签名称,而 `<LEVEL>` 则指定了最低显示等级(如 VERBOSE、DEBUG 等)。另外一种常见做法是直接运用 `grep` 结合正则表达式筛选感兴趣的内容,像这样就可以持续监控含有 “ASD” 字符串的信息输出[^4]: ```bash adb logcat -G 30M && adb logcat -c && adb logcat | grep -iE "ASD" ``` 此命令序列首先调整环形缓冲区大小至 30MB 并清空现有缓存,接着按照时间戳格式化输出符合条件的日志条目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cczhengv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值