在 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运行在一个进程中,这样可以共享数据,应该会很有用的。
博主补充:
signapk编译结束后在 android目录下/out/host/linux-x86/framework/signapk.jar
使用方法:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk test_signed.apk
实践证明,第二种方法不需要删掉META-INF目录下的CERT.SF和CERT.RSA两个文件,直接signapk就可以。
分享到:
相关推荐
本文将详细介绍如何在Android应用中获取系统权限并修改系统时间。 首先,理解Android权限系统至关重要。Android权限分为正常权限和危险权限。正常权限对用户隐私和设备安全的影响较小,应用在安装时会自动获得。而...
总结来说,Android应用程序的权限管理是系统安全的重要组成部分。开发者需要明确声明和合理使用权限,同时尊重用户的隐私。通过`PackageManager`和日志记录,我们可以有效地获取和分析应用的权限列表,以便于调试和...
本篇文章将深入探讨如何在Android应用程序中获取修改系统时间的权限,并提供相关源码分析。 首先,我们需要理解Android权限系统。Android采用的是基于权限的访问控制模型,每个应用都有自己的沙箱环境,互不干扰。...
本文将详细介绍如何使用`platform.x509.pem`、`platform.pk8`以及`signapk.jar`这三个文件来为Android应用获取系统签名权限。 `platform.x509.pem`是一个X.509证书文件,它包含了公钥信息。在Android系统中,这个...
5. **风险与安全**:尽管这种方法可以让APK获取系统权限,但请注意,滥用系统权限可能导致安全问题,例如隐私泄露或恶意操作。此外,非官方签名可能会导致系统不稳定,且可能违反Android的政策,因此不建议在生产...
在Android系统中,权限签名是一项至关重要的安全机制,它确保应用程序的合法性和完整性。这个工具,源自Android的源代码,允许开发者为他们的应用程序添加系统权限的签名,从而使其能够访问和操作那些通常需要更高...
系统权限则属于更高级别的权限,包括修改系统设置、读取系统日志、访问硬件等,这些权限仅能由系统应用或获得特定签名权限的应用获取。 1. **签名机制**:Android应用在安装时会进行签名验证,签名用于确认应用的...
在Android系统中,权限管理是应用安全的重要组成部分。Android自定义权限允许开发者为自己的应用程序创建特定的权限,以便更好地控制用户访问敏感数据或执行特定操作。这篇博客将深入探讨如何在Android项目中实现...
标题"android应用获得执行root权限动作__socket_service"表明我们要讨论如何在Android应用中通过Socket服务来实现root权限的获取。这种方式通常涉及到创建一个在系统层面运行的服务,该服务具有root权限,并通过...
在Android应用中,通过JNI可以调用C/C++原生代码,实现一些Java无法直接完成的功能,如高效计算或者需要root权限的操作。在本例中,应用通过JNI启动在init.rc中定义的service。 4. **Root权限**:在Android系统中,...
总结来说,获取Android应用的权限列表是通过`PackageManager`服务实现的,它可以提供关于应用权限的全面信息。了解并正确使用这些功能对于开发者来说是至关重要的,以确保应用的合规性和用户隐私的保护。同时,对于...
这个系统的变化显著加强了用户的隐私控制,使得应用程序需要在运行时请求敏感权限,而不是在安装时一次性获取所有权限。这被称为“运行时权限”模型。以下是关于Android 6.0系统中权限问题调用的关键知识点: 1. **...
- 在Android 6.0之前,应用在安装时会一次性获得所有在Manifest中声明的权限,用户无法在安装后对单个权限进行控制。 - Android 6.0引入了运行时权限,对于危险权限(如访问联系人、位置、相机等),应用必须在...
总的来说,"Android apk获得系统权限签名工具"是开发者或系统管理员用来签署APK以获取更高权限的实用工具,但正确和安全地使用这些工具需要对Android系统有深入的理解,且必须遵守相关的法律和政策,避免滥用权限...
### Android应用程序请求root权限代码详解 #### 一、概述 在Android开发中,有时需要对系统进行更深层次的操作,例如修改系统文件或访问特定的硬件资源等,这就需要使用到root权限。root权限通常被视为超级用户...
在深入探讨Android应用权限之前,我们首先应当理解其核心概念:Android权限系统是基于权限声明和权限检查的机制,旨在确保应用程序的安全性和用户数据的隐私。Android应用在运行时需要请求特定权限才能访问设备的...
Android 应用高危权限 Android 应用程序中存在一些高危权限,保护程序的安全是非常重要的。在 Android 应用程序中,有些权限被认为是高危权限,需要特别注意。这些权限包括 INSTALL_PACKAGES、DELETE_PACKAGES、...
首先,获取 root 权限可以让用户获得更多的控制权和自由度,例如可以卸载系统应用程序,修改系统设置等等。其次,获取 root 权限可以让用户安装一些需要root权限的应用程序,例如一些游戏和工具等等。 那么,谁需要...
在Android 8.1的全志R311平台上,如果需要让APP获取`su`权限,可以按照以下步骤操作: 1. **检查ro.adb.secure和ro.secure属性**: 在某些版本的Android中,这两个属性可能会影响`su`命令的使用。但在R311-Android...
在Android系统中,应用程序需要获取特定的权限才能访问或操作敏感数据或系统资源。这些权限在安装应用时或运行时由用户决定是否授予。然而,根据提供的标题和描述,这里介绍了一个方法,可以用于在Android 8.1(API...