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_sdcom.mediatek.log.mobile.customer = MTK_Internalcom.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 configifeq ($(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:mtkelsePRODUCT_COPY_FILES += $(LOCAL_PATH)/mtklog/mtklog-config-basic-user.prop:system/etc/mtklog-config.prop:mtkendifelse
-  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:mtkelsePRODUCT_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 = noendif# Case: Customer eng/userdebug load
-else ifneq ($(strip $(TARGET_BUILD_VARIANT)),user)
+else ifneq ($(strip $(TARGET_BUILD_VARIANT)),eng  userdebug user)PRODUCT_PACKAGES += log-handlerPRODUCT_PACKAGES += loghidlsysservice@@ -3656,7 +3656,7 @@ ifeq ($(strip $(MSSI_MTK_ENGINEERMODE_APP)), yes)PRODUCT_PACKAGES += libem_wifi_jniPRODUCT_PACKAGES += libem_audio_jnielse
-    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug),)
+    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug user),)PRODUCT_PACKAGES += EngineerModePRODUCT_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.xmlPRODUCT_PACKAGES += em_hidlelse
-    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug),)
+    ifneq ($(filter $(TARGET_BUILD_VARIANT),eng userdebug user),)DEVICE_MANIFEST_FILE += $(LOCAL_PATH)/project_manifest/manifest_em.xmlPRODUCT_PACKAGES += em_hidlendif

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

                 <dataandroid: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");
+@Overridepublic 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.apkinclude $(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
+#endifLOCAL_MODULE_TAGS := optionalLOCAL_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;*/}

Android11.0(R) MTK user版本打开MtkLog功能相关推荐

  1. Android11.0(R) MTK平台添加新分区

    mtk 平台增加一个新分区test,修改文件列表如下 modified: device/mediatek/mt6765/init.mt6765.rcmodified: device/mediatek/ ...

  2. Android11.0(R) MTK 预置可卸载app恢复出厂不恢复(仿RK方案)

    常规的预置可卸载 apk 并且恢复出厂不恢复,都是放到 data 目录下,也就是打包到 userdata.img 中. 这里列举几个缺点, 1.从 Q 开始谷歌默认不建议这样做了,所以在不修改源码情况 ...

  3. Android11.0(R) MTK6771 user版本关闭 SELinux

    开始我们先来跟一下 selinux 的初始化过程 system\core\init\main.cpp int main(int argc, char** argv) {#if __has_featur ...

  4. Android11.0(R) framework 新增类 lint 编码检查问题

    从 10.0 移植了几个类过来,没想到一编译出来几十个 errors,这就很离谱,明明是现成的代码. 后来仔细看了错误 log 提示,Your API changes are triggering A ...

  5. android11.0(R) data分区节点加密控制分析

    前情提要 androidQ(10.0) 预装集成apk到data分区 Android O.P.Q 版本如何预装 APK 遇到问题 当然是和之前一样啦,开机并不能正常启动,而是 自动进入了 recove ...

  6. Android11.0(R) 预置 wifi 信息自动连接

    在系统中预置一个 wifi 的 ssid 和 pwd,这样在系统烧写启动完成后开机打开 wifi 就能 自动连接指定 ssid. 1.获取 WifiConfigStore.xml R 版本此文件路径位 ...

  7. Android11.0(R) 预留清空锁屏密码接口

    前言 出厂的设备有些客户喜欢设置锁屏密码,无奈记性不好,忘记密码后就只能恢复出厂或者重新刷机了,啊这客户肯定不接受的. 为了防止客户逼逼赖赖,我们就未雨绸缪,给它加个清除接口. 先说结论,系统锁屏密码 ...

  8. Android11.0(R) 华为充电动画

    根据系统原有的无线充电动画流程,新增有线充电气泡动画. 效果图 修改文件清单 vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/an ...

  9. Android11.0(R) HAL 相机集成水印算法+多帧算法

    一.写在前面 上网

  10. android10.0(Q) root MTK 6765 user版本打开root权限(adb root权限和 apk root权限)

    前言 everybody,好久不见,我胡汉三又回来了,android10.0 root 安排!!! 相比较 Android8.1.9.0 而言,Q 版本 的 root变得相当麻烦,10.0 中引入了动 ...

最新文章

  1. Python可视化(matplotlib)图像自定义图例(Legend)
  2. PCB电路设计10大基本原则
  3. ASP.NET根路径的获取和将Web站点下的绝对路径转换为虚拟路径的两种方案
  4. shell脚本学习(一):shell脚本开发的基本规范和习惯
  5. java有password_hash吗,java 实现 PHP password_hash() password_verify() 单向验证
  6. nvcc找不到的问题(Ubuntu16.04 CUDA 8.0)
  7. ubuntu安装mysql报错_解决Ubuntu 12.04中更改MySQL默认编码报错
  8. 1000道Python题库系列分享17(17道判断题)
  9. 程序员遇到什么样的工作状态应该果断跳槽走人?
  10. IO流-设置输出字符编码格式
  11. VS2012 Npcap使用
  12. bootmgr快速修复win7_【win7共享软件下载】win7共享软件(局域网共享)下载 v7.2.8 免费版...
  13. Python之MRO
  14. 计算机组成原理__第6章之硬盘存储器
  15. Java代码计算2019新个税
  16. 库存数量控制中储备定额方法的改进与实现
  17. YOLO v2 学习与研究
  18. Airtest双11领喵币代码
  19. stanza和DBPedia的安装与使用
  20. 74HC595 芯片详细介绍

热门文章

  1. VM虚拟机 自定义(高级)安装win 7系统史上超详细图文教程(附win7 iso镜像资源)
  2. 一步一步超级详细的zabbix安装教程
  3. 计算机信息检索自考知识点,计算机信息检索02139自考资料.docx
  4. ubuntu窗口排列和分屏工具
  5. Excel 公式学习笔记:数组用法
  6. EXCEL数组公式(3)---数组公式的基础应用,理解数组公式
  7. paper pass论文查重很好用
  8. java基础-异或运算
  9. (转)74系列芯片使用汇总
  10. yml格式(list)