总存储大小计算原理:
 系统获取存储大小是通过获取”/system”和”/data” 两个Directory 的和来计算的,即Environment.getDataDirectory().getTotalSpace()
 + Environment.getRootDirectory().getTotalSpace()
问题一 :实际存储大小大于等于16G,设置-存储 存储总大小显示不正确
 问题分析:
 USERDATAIMAGE 大小配置不正确,导致系统获取的总存储大小异常;
 USERDATAIMAGE配置规则和方法:
 
修改的代码及路径:
 对应项目工程的BoardConfig.mk,将BOARD_USERDATAIMAGE_PARTITION_SIZE修改成上面计算的大小值
 如:sc126\qcm2290-iot-spf-2.0\fibo\projects\SN129-13-00-00\LA.UM.9.15.2
 device\qcom\sc126_32go\BoardConfig.mk
 BOARD_USERDATAIMAGE_PARTITION_SIZE := 24000000000
 问题二:实际存储大小为8G,设置-存储 存储总大小显示不正确
 问题分析:
 存储大小为8G,查看各分区占用情况发现super分区占用在2.7G左右,userdata分区占用2.8G左右;系统打印的getTotalBytes只有1.9G; 无法通过配置userdata大小使getTotalBytes 达到4G以上来向上取到8G内存;
 问题根本原因是系统总内存太小,导致super占用内存比例太大导致。
 解决思路:
 通过获取系统内存节点来获取总内存大小"sys/class/block/mmcblk0/size";但不同平台对应的节点存在差异,所以移植到其它平台时,需查找平台对应的内存大小的节点
 修改的代码及路径:
a/fibo/common/LA.QSSI.12.0.r1/frameworks/base/services/usage/java/com/android/server/usage/StorageStatsService.java
+++ b/fibo/common/LA.QSSI.12.0.r1/frameworks/base/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -86,7 +86,11 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Consumer;
-
+//[JIRA:MC0350-218] Modified by luoyalong for memory display error in Settings 2023-8-25 start
+import android.util.Log;
+import java.io.BufferedReader;
+import java.io.FileReader;
+//[JIRA:MC0350-218] Modified by luoyalong for memory display error in Settings 2023-8-25 end
 public class StorageStatsService extends IStorageStatsManager.Stub {
     private static final String TAG = "StorageStatsService";
 
@@ -217,9 +221,23 @@ public class StorageStatsService extends IStorageStatsManager.Stub {
     @Override
     public long getTotalBytes(String volumeUuid, String callingPackage) {
         // NOTE: No permissions required
-
+        //[JIRA:MC0350-218] Modified by luoyalong for memory display error in Settings 2023-8-25 start
+        //romInfo,Different platforms correspond to different nodes
+        String romInfo = "sys/class/block/mmcblk0/size";
+        int cutSize = 2;
+        int unit = 1000;
         if (volumeUuid == StorageManager.UUID_PRIVATE_INTERNAL) {
-            return FileUtils.roundStorageSize(mStorage.getPrimaryStorageSize());
+            String romSize = readCmd(romInfo);
+            double totalRom = Math.ceil(Double.parseDouble(romSize)/cutSize/unit/unit);
+            Log.e(TAG, "totalROM = " + totalRom);
+            if (totalRom < 16  && totalRom > 0) {
+                long totalBytes = new Double(totalRom).longValue() * unit * unit * unit; 
+                Log.e(TAG, "totalBytes = " + totalBytes);
+                return totalBytes;
+            }else{
+                return FileUtils.roundStorageSize(mStorage.getPrimaryStorageSize());
+            }
+        //[JIRA:MC0350-218] Modified by luoyalong for memory display error in Settings 2023-8-25 end   
         } else {
             final VolumeInfo vol = mStorage.findVolumeByUuid(volumeUuid);
             if (vol == null) {
@@ -229,7 +247,29 @@ public class StorageStatsService extends IStorageStatsManager.Stub {
             return FileUtils.roundStorageSize(vol.disk.size);
         }
     }
-
+    //[JIRA:MC0350-218] Modified by luoyalong for memory display error in Settings 2023-8-25 start
+    public String readCmd(String sys_path) {
+        String prop = "waiting";
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new FileReader(sys_path));
+            prop = reader.readLine();
+        } catch (IOException e) {
+            e.printStackTrace();
+            Log.e(TAG, " ***ERROR*** " + e.getMessage());
+        } finally {
+            if(reader != null){
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        Log.e(TAG, "readFile cmd from "+sys_path + ",data"+" -> prop = "+prop);
+        return prop;
+    }
+    //[JIRA:MC0350-218] Modified by luoyalong for memory display error in Settings 2023-8-25 end
     @Override
     public long getFreeBytes(String volumeUuid, String callingPackage) {
         // NOTE: No permissions required
                


















