`

Android怎样修改系统时间?(转)

阅读更多
Android中如何修改系统时间(应用程序获得系统权限)

在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要root权限或者运行与系统进程中才可以用。

本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。

   第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:

   1. 在应用程序的AndroidManifest.xml中的manifest节点中加入
      android:sharedUserId="android.uid.system"这个属性。
   2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
   3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。

   第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:

   1. 同上,加入android:sharedUserId="android.uid.system"这个属性。
   2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
   3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。
   4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,
      首先找到密钥文件,在我的Android源码目录中的位置
      是"build\target\product\security",下面的platform.pk8和platform.x509.pem
      两个文件。
      然后用Android提供的Signapk工具来签名,signapk的源代码是
      在"build\tools\signapk"下,
      用法为"signapk platform.x509.pem platform.pk8 input.apk output.apk",
      文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。

      这样最后得到的apk和第一个方法是一样的。

最后解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。

只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。

这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到platform.pk8和platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package ... has no signatures that match those in shared user android.uid.system",这样也是保护了系统的安全。

最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。

分享到:
评论

相关推荐

    Android中如何修改系统时间(两种方法)

    在Android系统中,修改系统时间通常涉及到安全性和应用程序的正确运行。系统时间是操作系统的核心组件之一,用于跟踪日期和时间,对于同步、日志记录和其他关键功能至关重要。下面将详细介绍两种在Android中修改系统...

    Android应用获取系统权限,修改系统时间

    然而,某些高级功能,如修改系统时间,需要更高的权限,通常被称为系统权限。在Android系统中,这些权限是严格控制的,一般的应用程序无法直接获取。但通过特定的技术手段,开发者可以尝试在未root的设备上实现这些...

    Android修改系统时间

    Android系统时间分为两种:系统时间和RTC(Real-Time Clock)时间。系统时间是Android应用看到的时间,它可以在设备开机或休眠状态下被改变。RTC时间则存储在硬件RTC芯片中,通常在设备关机后仍能保持。在大多数情况...

    转载:Android中如何修改系统时间(应用程序获得系统权限)

    总结,修改Android系统时间需要在Manifest中声明`CHANGE_SYSTEM_TIME`权限,并可能需要在运行时动态请求。在API 26以上,系统对此有更严格的限制。同时,了解和正确使用签名工具对发布应用至关重要。在实际开发中,...

    修改Android系统日期

    在Android系统中,修改系统日期通常涉及到操作系统的底层权限,因为这涉及到系统核心服务的运行。只有当设备已经获得Root权限后,我们才能通过编程方式直接修改系统时间。Root是Android系统的一种超级用户权限,允许...

    android通过访问网络获取网络时间,并修改系统时间

    此外,由于安全性和隐私考虑,Google在Android 10及以上版本中对`WRITE_SETTINGS`权限进行了更严格的限制,普通应用可能无法直接修改系统时间,除非用户手动开启“允许自定义系统时间”选项。 以上就是Android通过...

    android系统修改系统时间和日期源码

    在 Android 平台上,修改系统时间和日期的功能通常受到严格的限制,以防止恶意应用程序篡改系统时间。然而,在某些特定的应用场景下(例如时区调整工具或特殊调试应用),开发者可能需要实现这一功能。本文将基于...

    android修改系统时间

    Android修改系统时间(应用程序获得系统权限)!!!对你有所帮助

    Android修改系统时间资料源码打包

    总结来说,修改Android系统时间是一个涉及权限控制、反射技术以及系统服务交互的过程。正确地理解和运用这些知识点,可以帮助开发者在必要时进行系统时间的调整,同时也需要注意潜在的安全风险和对其他应用的影响。

    android设置系统时间 源代码 步骤说明

    首先,Android系统时间的修改需要`WRITE_SETTINGS`权限。在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_SETTINGS" /> ``` 自Android 6.0(API级别...

    android修改系统时间(附详细使用说明)

    首先,我们来了解Android系统时间的类型: 1. **系统时间**:这是手机显示的时间,分为自动和手动两种模式。自动模式下,系统会通过网络服务(如GPS、移动网络或Wi-Fi)获取准确的全球标准时间。手动模式则允许用户...

    Android ndk下获取系统使用时间

    你可以读取这个文件并解析它的内容来获取CPU的用户时间(usertime)和系统时间(systemtime)。以下是一个简单的例子: ```c++ #include #include std::string readProcStat() { std::ifstream file("/proc...

    Android系统时间同步服务

    下面我们将深入探讨Android系统时间同步服务的工作原理及相关知识点。 首先,Android系统中的时间同步主要通过`SystemServer`进程中的`SystemTimeService`类来实现。这个服务与网络时间服务器进行交互,通常使用NTP...

    Android下获取开机时间

    在Android开发中,有时我们需要获取设备的开机时间,这不仅可以用于统计设备的运行状态,还可以帮助我们实现某些特定的功能需求,比如应用启动时长监测、系统稳定性评估等。 #### 实现思路 为了实现这一功能,可以...

    android自定义时间控件实现系统时间修改

    首先,我们需要了解Android系统时间的访问权限。在Android 6.0(API级别23)及更高版本中,修改系统时间需要请求`SYSTEM_TIME_WRITE`权限。在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission ...

    android修改时间日期程序以及源码

    在Android系统中,修改设备的时间和日期通常涉及到系统的安全性和稳定性,因此,一般情况下,非系统应用是无法直接更改系统时间的。但是,对于开发者来说,有时为了测试或特定功能的实现,可能需要进行时间的模拟...

    Android 9.0增加系统同步时间戳接口,同步本机时间

    1. **系统时间同步**:Android系统以往已有与网络时间服务器同步时间的功能,如NTP(Network Time Protocol)。但在Android 9.0中,可能进一步强化了这一功能,提供了更便捷的API接口,允许应用程序或系统服务直接...

    不刷root权限修改系统时间

    在不刷root权限的情况下,如果想在应用层修改系统时间是比较复杂的。本资源是通过android:sharedUserId="android.uid.system",先打包apk,然后用压缩文件打开apk,删除META-INF文件夹下的CERT.SF和CERT.RSA,然后运行...

    android 获取当前系统时间

    在Android开发中,获取当前系统时间和日期是一项基本操作,这对于许多功能实现至关重要,例如日志记录、用户交互、定时任务等。以下将详细介绍如何在Android中获取系统时间,并提供一个适用于初级开发者的示例代码。...

Global site tag (gtag.js) - Google Analytics