Android 簽名方法設置步驟

APK爲什麼需要簽名

有時候在開發某些功能的時候需要擁有系統(System)權限或者root權限才能夠正確的調用某些函數,獲得想要的功能。

所以當程序想要獲取系統權限時,通常是將android:SharedUserId 屬性設置爲**”android.uid.system"**,可以讓程序運行在系統進程中,能夠實現系統時間的修改。 但是隻是設置sharedUserId並不能夠實現去獲取系統權限,想要獲取系統權限還必須要有相應的簽名。
否則將會面臨一個無法安裝APK到設備(或手機)中,提示如下錯誤:

Session ‘app’: Installation did not succeed.
The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

[Retry]

出現這樣的問題就是告訴開發者需要給apk正確的簽名纔可以安裝使用。

注: 網上有很多說法是把在AndroidManifest.xml中添加的android:sharedUserId="android.uid.system"這個屬性移除掉就可以了。 在這裏只想說將它移除了雖然可以正常安裝,但它已經失去了獲取權限的意義。很容易誤導新同學,我們加它的目的就是要獲取權限。

APK簽名的幾種方式

1.Android源碼中編譯APK

這種方法適用於能夠自行編譯Android SDK源碼,可以自行生成固件的開發者,比如framework人員。
可以直接通過make打包到系統固件中。 這種對於使用IDE開發的同學可能會有些麻煩。

2.Android Studio中編譯APK

這個方法可能相對麻煩一些,但是對於只會IDE開發的小夥伴來說免去了開虛擬機在Linux壞境下進行make操作了。只是做一些前期環境設置就可以了。

3. 單獨簽名APK文件

這種是對已經生成了的apk文件進行簽名,然後再導入的設備運行。

Android源碼編譯APK簽名步驟

  • 首先在AndroidManifest.xml中增加SharedUserId屬性
    在manifest節點中增加:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.runoob.broadcastreceiverdy"
    android:sharedUserId="android.uid.system">

<!-- other options  -->

</manifest>
  • 修改Android.mk文件指定簽名屬性
    在該文件中加入LOCAL_CERTIFICATE := platform這一行;
    platform 就是 指 用 platform.pk8和platform.x509.pem兩個文件 來 簽名。用這兩個key簽名後apk才真正可以放入系統進程中;
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files) \
                   src/com/mediatek/factorymode/flowVideo/IFloatView.aidl
LOCAL_PACKAGE_NAME := BroadcastReceiver
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

  • 編譯,生成apk
    以上設置完成後就可以進行編譯產生apk了。可以使用mmm單獨編譯這個模塊,然後adb install到設備中。
    也可以直接make這個sdk然後燒錄新的固件到設備。反正憑自己喜好操作即可。

Android Studio的簽名步驟

下面是IDE中如何加入簽名信息,當前使用的是Android Studio 3.5.3版本。 如果版本不一致可能略有差異,主要是導航路徑的差異。 如果IDE是eclipse的話方法也是大同小異,有興趣的小夥伴可以自己搜索設置啦。
下面是針對自己環境設置的方法如下:

  • 1.找到平臺簽名文件“platform.pk8”和“platform.x509.pem”
    該文件通常置於如下位置:
AOSP/build/target/product/security/
  • 2.把pkcs8格式的私鑰轉化成pkcs12格式
# 執行如下命令:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
  • 3.把x509.pem公鑰轉換成pkcs12格式
# 執行如下命令, 並且將會提示輸入密碼,在此我們設置密碼爲android
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
  • 4.生成platform.keystore
# 執行如下命令將生成我們需要的keystore文件
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore platform.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
  • 5.Eclipse添加證書
    將生成的platform.keystore導入Eclipse。
    在eclipse下Windows/preferences/Android/build中設置“Custom debug keystore”爲剛纔生成的platform.keystore即可。展示如下:
    在這裏插入圖片描述
    調試apk時直接點擊Debug As —> Android Application即使用系統簽名簽名了該apk
    1. Android Studio 3.5.3添加證書
      File->Project Structure->Modules->Signing Configs
      在這裏插入圖片描述
      然後調試apk到設備中將成功安裝並執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章