在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