android修改RAM和ROM在设置中的显示

所有存储设备约定成俗,实际容量会比显示容量小。比如,1TB厂商会以1000GB计算,而不是1024GB,所以显示的是1000/1024=976GB。
android设备也是如此,对外规格有1+8和2+16,故客户希望显示实际的值。

RAM
android RAM是直接读取/proc/meminfo里的数值,修改的接口是在framework层,仅需在此修改即可解决设置中显示的数值。
这里需要注意的是,无法针对第三方检测软件,因为第三方无需root也能直接读取/proc/meminfo的值。

P2000L:/ $ cat /proc/meminfo
MemTotal:        1930740 kB
MemFree:          212328 kB
Buffers:           31960 kB
Cached:           808864 kB
SwapCached:            0 kB
Active:           786688 kB
Inactive:         500180 kB
Active(anon):     446392 kB
Inactive(anon):     1124 kB
Active(file):     340296 kB
Inactive(file):   499056 kB
Unevictable:         256 kB
Mlocked:             256 kB
SwapTotal:        524284 kB
SwapFree:         524284 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        446340 kB
Mapped:           279252 kB
Shmem:              1488 kB
Slab:             255676 kB
SReclaimable:      40900 kB
SUnreclaim:       214776 kB
KernelStack:       21264 kB
PageTables:        29404 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1489652 kB
Committed_AS:   40764468 kB
VmallocTotal:   251658176 kB
VmallocUsed:      103424 kB
VmallocChunk:   251454644 kB

通过指令可以获取MemTotal、MemFree等数值,上层在读取之后构建数组分别存储这些数值。
在存储时做特殊的修改即可。
这里需要注意,只要是系统直接读取/proc/meminfo的地方都需要修改,目前作者在测试的协助下找到2处。

Index: frameworks/base/core/jni/android_os_Debug.cpp
===================================================================
--- frameworks/base/core/jni/android_os_Debug.cpp	(版本 491)
+++ frameworks/base/core/jni/android_os_Debug.cpp	(工作副本)
@@ -737,6 +737,11 @@
     };
     long mem[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
+    // @ + for BUG # {
+    static const long RAM_1G = 1048576L;
+    static const long RAM_2G = 2097152L;
+    // @ + for BUG # }
+
     char* p = buffer;
     while (*p && numFound < (sizeof(tagsLen) / sizeof(tagsLen[0]))) {
         int i = 0;
@@ -751,6 +756,15 @@
                     p++;
                 }
                 mem[i] = atoll(num);
+                // @ + for BUG # {
+                if (i == 0) {
+                    if (mem[i] < RAM_1G) {
+                        mem[i] = RAM_1G;
+                    } else if (mem[i] > RAM_1G && mem[i] < RAM_2G) {
+                        mem[i] = RAM_2G;
+                    }
+                }
+                // @ + for BUG # }
                 numFound++;
                 break;
             }
Index: frameworks/base/core/jni/android_util_Process.cpp
===================================================================
--- frameworks/base/core/jni/android_util_Process.cpp	(版本 491)
+++ frameworks/base/core/jni/android_util_Process.cpp	(工作副本)
@@ -609,6 +609,11 @@
 
     size_t numFound = 0;
     jlong mem = 0;
+    
+    // @ + for BUG # {
+    static const long RAM_1G = 1048576L * 1024;
+    static const long RAM_2G = 2097152L * 1024;
+    // @ + for BUG # }
 
     char* p = buffer;
     while (*p && numFound < num) {
@@ -625,6 +630,15 @@
                     if (*p == 0) p--;
                 }
                 mem += atoll(num) * 1024;
+                // @ + for BUG # {
+                if (i == 0) {
+                    if (mem < RAM_1G) {
+                        mem = RAM_1G;
+                    } else if (mem > RAM_1G && mem < RAM_2G) {
+                        mem = RAM_2G;
+                    }
+                }
+                // @ + for BUG # }
                 numFound++;
                 break;
             }

ROM
android rom实现的机制没有深究,在android N之前的该法:

Index: frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
===================================================================
--- frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java	(版本 495)
+++ frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java	(工作副本)
@@ -222,9 +222,15 @@
 
             try {
                 final StructStatVfs stat = Os.statvfs(path);
-                final long totalSize = stat.f_blocks * stat.f_bsize;
-                final long availSize = stat.f_bavail * stat.f_bsize;
-                return new long[] { totalSize, availSize };
+                if ("/data".equals(path)) { // @  +  
+                    final long totalSize = 8589934592L; // set totalSize (ROM) to 8Gb.
+                    final long availSize = stat.f_bavail * stat.f_bsize;
+                    return new long[] { totalSize, availSize };
+                } else {
+                    final long totalSize = stat.f_blocks * stat.f_bsize;
+                    final long availSize = stat.f_bavail * stat.f_bsize;
+                    return new long[] { totalSize, availSize };
+                }
             } catch (ErrnoException e) {
                 throw new IllegalStateException(e);
             }

android N之后的该法:

Index: frameworks/base/core/java/android/os/storage/StorageManager.java
===================================================================
--- frameworks/base/core/java/android/os/storage/StorageManager.java	(版本 495)
+++ frameworks/base/core/java/android/os/storage/StorageManager.java	(工作副本)
@@ -142,11 +142,8 @@
     };
     private static final int INTERNAL_STORAGE_SECTOR_SIZE = 512;
 
-    // @ + for BUG # {
-    private static final long TOTAL_8G = 8589934592L;
-    private static final long TOTAL_16G = 17179869184L;
-    // @ + for BUG # }
 
+
     private final Context mContext;
     private final ContentResolver mResolver;
 
@@ -939,14 +936,6 @@
         for (String path : INTERNAL_STORAGE_SIZE_PATHS) {
             final long numberBlocks = readLong(path);
             if (numberBlocks > 0) {
-                // @ + for BUG # {
-                if (numberBlocks * INTERNAL_STORAGE_SECTOR_SIZE < TOTAL_8G) {
-                    return TOTAL_8G;
-                } else if (numberBlocks * INTERNAL_STORAGE_SECTOR_SIZE > TOTAL_8G &&
-                    numberBlocks * INTERNAL_STORAGE_SECTOR_SIZE < TOTAL_16G) {
-                    return TOTAL_16G;
-                }
-                // @ +- for BUG # }
                 return numberBlocks * INTERNAL_STORAGE_SECTOR_SIZE;
             }
         }
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 修改 RAM,也就是修改 Android 设备的内存大小,是一项非常复杂的任务,需要有深厚的技术和经验支持。对 RAM 进行操作,需要了解如何访问系统的内核源代码、硬件构架和底层操作系统等技术。一般情况下,在普通的设备上,这种修改都是不可行或者是极其困难的。 RAMAndroid 设备运行应用程序所使用的内存,它对于设备的性能和稳定性非常重要。许多设备的 RAM 大小是固定的,但有些设备可以通过更换硬件或软件升级来扩展 RAM 大小。然而,这些操作并非简单易行,需要有专业技术人员协助完成。 如果你想修改 Android 设备的 RAM,我们建议你找到可信赖的专业技术人员或维修商。即使你可以找到相关资料和教程,我们还是强烈建议不要尝试自行操作,否则可能会导致设备损坏或者系统崩溃。安全最重要,保护好你的设备和自己的安全是最重要的事情。 ### 回答2: RAMAndroid设备重要的硬件组件,用于存储临时数据以及应用程序的运行环境。虽然Android设备越来越发达,RAM的容量也越来越大,但如果不注意管理,会出现内存不足等问题。因此,有时候需要对Android设备的RAM进行修改修改RAM的方法比较多,可以使用软件或者手动修改部分配置文件。其,软件修改RAM的方式最为常见,主要是通过清理垃圾、关闭系统自启动、强制结束后台进程等方式来释放内存空间。这些软件一般在Google Play上可以找到,比如著名的"Clean Master"和"360安全心"等。 另外,手动修改系统配置文件也可以实现修改RAM的效果。不过这种方式需要对系统有一定的了解才能有效操作,不对系统不熟悉的用户不建议尝试。具体步骤如下: 1.进入Android设备的recovery模式(不同品牌机型进入方式不同,需要自行查找)。 2.选择"Advanced",然后进入"Memory management"选项。 3.选择"Extra Free Kbytes"选项,然后输入需要释放的内存大小。 4.最后选择"Reboot system now"重启设备即可完成修改RAM的操作。 总之,无论使用软件还是手动修改配置文件,修改RAM的方法都需要谨慎行事,避免误操作导致系统崩溃或数据丢失。同时,在平时的使用过程,也要注意合理管理内存空间,及时清理不必要的数据和进程,保证设备的运行速度和稳定性。 ### 回答3: RAM(内存)是Android系统非常关键的一个部分,影响着手机的性能和稳定性。如果您想修改RAM,需要考虑以下几个方面: 1. Root您的手机: 要修改RAM,首先您需要Root您的Android手机。Root会提供许多特权,并让您能够修改系统文件,包括调整内存分配。请注意,Root您的手机可能会失去保证,因为会影响系统的安全和稳定性。 2. 使用应用程序: 很多应用程序可以帮助您调整内存分配。例如,Clean Master,它可以清除您手机上的一些进程和文件,以释放内存。还有一些类似于Memory Booster的应用程序,可以将内存配置文件调整到最佳设置。 3. 修改Build.prop: Build.prop是Android系统的一个系统文件,记录了手机内置属性和系统信息。因为它是一个系统文件,所以您需要Root手机才能够更改它。在Build.prop文件,您可以修改Dalvik heapsize和PAGESIZE属性,以更改RAM的分配。但是,不正确的修改可能会导致系统出现故障。 4. 修改内核(kernel): 大多数Android手机都安装的是Linux内核,而内核会影响到系统的性能和功能。通过修改内核参数,您可以更改系统的内存分配。但是,这需要技术和经验,如果您不确定自己的操作,不要尝试此方法。 总的来说,修改RAM需要专业的技术和经验,尝试这些操作前,务必备份您的数据以及建立好手机的恢复系统,以防止出现风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值