在Android中,对应用签名,让其获取系统权限,有几种方式:
方法一
直接把应用源码放在源码/package/app/目录下进行编译,这种方式,需要拥有源码编译环境。
以系统Launcher为例,需要在Project目录下创建一个Android.mk文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := android-common android-support-v4
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Launcher
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_PACKAGE_NAME)
LOCAL_CERTIFICATE := shared
LOCAL_PROGUARD_ENABLED := full
LOCAL_PROGUARD_FLAG_FILES := proguard.cfg
include $(BUILD_PACKAGE)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := android-support-v4:libs/android-support-v4.jar
include $(call all-makefiles-under,$(LOCAL_PATH))
需要注意的是,如果需要系统权限,需要修改LOCAL_CERTIFICATE := shared为LOCAL_CERTIFICATE := platform。
同时,需要在AndroidManifest.xml文件中修改如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settings"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="android.uid.system" >
即需要添加android:sharedUserId="android.uid.system"
修改完毕后,进入到\packages\apps\Launcher目录下,使用mm编译,编译完成后,apk生成在\out\target\product\Hi3796MV100\system\app下,然后通过cp拷贝到设备/system/app下即可。
方法二
没有源码环境怎么让应用拥有平台签名?方法很简单,需要三个文件即可。
./prebuilts/sdk/tools/lib/signapk.jar
./build/target/product/security/platform.x509.pem
./build/target/product/security/platform.pk8
拥有这三个文件就可以在Linux环境下对应用进行签名了。
具体怎么做呢?步骤如下:
①建立一个文件夹,例如signature。
②将上面的三个文件放入signature,同时放入要签名的apk。
③cd到文件夹signature下,敲入如下命令:
> java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk
其中input.apk是将要被签名的apk,output.apk是签名后的apk。
是不是很简单呢?
方法三
在IDE中签名,比如Eclipse,将下面三个文件拷贝到一个目录:
./prebuilts/sdk/tools/lib/signapk.jar
./build/target/product/security/platform.x509.pem
./build/target/product/security/platform.pk8
然后执行
①openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt //生成shared.priv.pem
②openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey//生成pkcs12
③Enter Export Password: (默认是android,自己制作的key,输入对应的密码)
④Verifying - Enter Export Password:(输入密码android)
⑤生成debug.keystore
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
⑥去Eclipse的Windows/Preferences/Android/Build中设置”Custom debug keystore”为上面生成的keystore,运行调试即可。以上做完后就不再需要使用signapk.jar去签名,如Java -jar signapk.jar platform.x509.pem platform.pk8 .apk *.apk