android apk的簽名和許可權問題
一. android apk的簽名問題(http://blog.csdn.net/lyq8479/article/details/6401093)
1.為什麼要給Android應用程式簽名?
如果只能用一句簡單的話語來回答這個問題的話,我會說:“這是Android系統所要求的”。
Android系統要求每一個Android應用程式必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程式沒有經過數字簽名,是沒有辦法安裝到系統中的!Android通過數字簽名來標識應用程式的作者和在應用程式之間建立信任關係,不是用來決定終端使用者可以安裝哪些應用程式。這個數字簽名由應用程式的作者完成,並不需要權威的數字證書籤名機構認證,它只是用來讓應用程式包自我認證的。
2、為什麼我開發的Android應用程式沒有做什麼簽名也能在模擬器和手機上執行?
你沒有給Android應用程式簽名並不代表Android應用程式沒有被簽名。為了方便我們開發除錯程式,ADT會自動的使用debug金鑰為應用程式簽名。debug金鑰?它在哪?debug金鑰是一個名為debug.keystore的檔案,它的位置:
系統碟符:/Documents and Settings/liufeng/.android/debug.keystore
“liufeng”對應於你自己的windows作業系統使用者名稱,怎麼樣,是不是已經找到它了。這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬於自己的金鑰檔案(*.keystore)。
3、Android應用程式簽名步驟
1)準備工作
apk的簽名工作可以通過兩種方式來完成:
1)通過ADT提供的圖形化介面完成apk簽名;
2)完全通過DOS命令來完成apk簽名
我比較喜歡第2)種方式,所以下面將講解如何通過命令的方式完成apk簽名。
給apk簽名一共要用到3個工具,或者說3個命令,分別是:keytool、jarsigner和zipalign,下面是對這3個工具的簡單介紹:
1)keytool:生成數字證書,即金鑰,也就是上面說到的副檔名為.keystore的那類檔案;
2)jarsigner:使用數字證書給apk檔案簽名;
3)zipalign:對簽名後的apk進行優化,提高與Android系統互動的效率(Android SDK1.6版本開始包含此工具)
從這3個工具的作用也可以看出,這3個工具的使用順序。通常我們自己所開發的所有應用程式,都是使用同樣的簽名,即使用同一個數字證書,這就意味著:如果你是第一次做Android應用程式簽名,上面的3個工具都將用到;但如果你已經有數字證書了,以後再給其它apk簽名時,只需要用到jarsigner和zipalign就可以完成。
為了方便使用上面3個命令,首先需要將上面3個工具所在路徑新增到環境變數path中(我說的是為了方便使用,沒有說必須要這麼做)。怎麼配置環境變數就不在此講解了,這裡需要說一下這3個工具預設所在的路徑:
1)keytool:該工具位於jdk安裝路徑的bin目錄下;
2)jarsigner:該工具位於jdk安裝路徑的bin目錄下;
3)zipalign:該工具位於android-sdk-windows/tools/目錄下
不知道大家是否注意到keytool和jarsigner兩個工具是jdk自帶的,也就意味著生成數字證書和檔案簽名不是Android的專利;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar檔案簽名的。
2)生成未經簽名的apk檔案
既然我們要自己對apk進行簽名,就不再需要ADT預設幫我們簽名了。如何得到一個未經簽名的apk檔案呢?開啟Eclipse,在Android工程名稱上點選右鍵,依次選擇“Android Tools” - “Export Unsigned Application Package ...”,然後選擇一個儲存位置儲存即可。這樣就得到了一個未經簽名的apk檔案。
3)使用keytool工具生成數字證書
keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
說明:
1)keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細資訊打印出來,顯示在dos視窗中;
2)-keystore liufeng.keystore 表示生成的數字證書的檔名為“liufeng.keystore”;
3)-alias liufeng.keystore 表示證書的別名為“liufeng.keystore”,當然可以不和上面的檔名一樣;
4)-keyalg RSA 表示生成金鑰檔案所採用的演算法為RSA;
5)-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效
在執行上面的命令生成數字證書檔案時,會提示你輸入一些資訊,包括證書的密碼,示例如下:
4)使用jarsigner工具為Android應用程式簽名
jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore
說明:
1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細資訊打印出來,顯示在dos視窗中;
2)-keystore liufeng.keystore 表示簽名所使用的數字證書所在位置,這裡沒有寫路徑,表示在當前目錄下;
3)-signedjar notepad_signed.apk notepad.apk 表示給notepad.apk檔案簽名,簽名後的檔名稱為notepad_signed.apk;
4)最後面的liufeng.keystore 表示證書的別名,對應於生成數字證書時-alias引數後面的名稱
5)使用zipalign工具優化已簽名的apk(非必須但建議這麼做)
zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk
說明:
1)zipalign是工具名稱,-v表示在DOS視窗打印出詳細的優化資訊;
2)notepad_signed.apk notepad_signed_aligned.apk 表示對已簽名檔案notepad_signed.apk進行優化,優化後的檔名為notepad_signed_aligned.apk
說明:如果你以前的程式是採用預設簽名的方式(即debug簽名),一旦換了新的簽名應用將不能覆蓋安裝,必須將原先的程式解除安裝掉,才能安裝上。因為程式覆蓋安裝主要檢查兩點:
1)兩個程式的入口Activity是否相同。兩個程式如果包名不一樣,即使其它所有程式碼完全一樣,也不會被視為同一個程式的不同版本;
2)兩個程式所採用的簽名是否相同。如果兩個程式所採用的簽名不同,即使包名相同,也不會被視為同一個程式的不同版本,不能覆蓋安裝。
另外,可能有人可能會認為反正debug簽名的應用程式也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應用程式有這樣兩個限制,或者說風險:
1)debug簽名的應用程式不能在Android Market上架銷售,它會強制你使用自己的簽名;
2)debug.keystore在不同的機器上所生成的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那麼將會出現上面那種程式不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程式只有你自己使用,當然無所謂,解除安裝再安裝就可以了。但要是你的軟體有很多使用客戶,這就是大問題了,就相當於軟體不具備升級功能!
二.android apk的許可權(http://blog.csdn.net/superkris/article/details/7709504)
Android系統是執行在Linux核心上的,Android與Linux分別有自己的一套嚴格的安全及許可權機制,
Android系統許可權相關的內容,
(一)linux檔案系統上的許可權
-rwxr-x--x system system 4156 2012-06-30 16:12 test.apk.
代表的是相應的使用者/使用者組及其他人對此檔案的訪問許可權,與此檔案執行起來具有的許可權完全不相關比如上面的例子只能說明system使用者擁有對此檔案的讀寫執行許可權;system組的使用者對此檔案擁有讀、執行許可權;其他人對此檔案只具有執行許可權。而test.apk執行起來後可以幹哪些事情,跟這個就不相關了。
千萬不要看apk檔案系統上屬於system/system使用者及使用者組,或者root/root使用者及使用者組,就認為apk具有system或root許可權。apk程式是執行在虛擬機器上的,對應的是Android獨特的許可權機制,只有體現到檔案系統上時才使用linux的許可權設定。
(二)Android的許可權規則
(1)Android中的apk必須簽名
這種簽名不是基於權威證書的,不會決定某個應用允不允許安裝,而是一種自簽名證書。
重要的是,android系統有的許可權是基於簽名的。比如:system等級的許可權有專門對應的簽名,簽名不對,許可權也就獲取不到。
預設生成的APK檔案是debug簽名的。獲取system許可權時用到的簽名見後面描述
(2)基於UserID的程序級別的安全機制
程序有獨立的地址空間,程序與程序間預設是不能互相訪問的,Android通過為每一個apk分配唯一的linux userID來實現,名稱為"app_"加一個數字,比如app_43不同的UserID,執行在不同的程序,所以apk之間預設便不能相互訪問。
Android提供瞭如下的一種機制,可以使兩個apk打破前面講的這種壁壘。
在AndroidManifest.xml中利用sharedUserId屬性給不同的package分配相同的userID,通過這樣做,兩個package可以被當做同一個程式,
系統會分配給兩個程式相同的UserID。當然,基於安全考慮,兩個apk需要相同的簽名,否則沒有驗證也就沒有意義了。
(3)預設apk生成的資料對外是不可見的
實現方法是:Android會為程式儲存的資料分配該程式的UserID。
藉助於Linux嚴格的檔案系統訪問許可權,便實現了apk之間不能相互訪問似有資料的機制。
例:我的應用建立的一個檔案,預設許可權如下,可以看到只有UserID為app_21的程式才能讀寫該檔案。
-rw------- app_21 app_21 87650 2000-01-01 09:48 test.txt
如何對外開放?
<1> 使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE標記。
When creating a new file with getSharedPreferences(String, int), openFileOutput(String, int), or openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory), you can use the MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE flags to allow any other package
to read/write the file. When setting these flags, the file is still owned by your application, but its global read and/or write permissions have been set appropriately so any other application can see it.
(4)AndroidManifest.xml中的顯式許可權宣告
Android預設應用是沒有任何許可權去操作其他應用或系統相關特性的,應用在進行某些操作時都需要顯式地去申請相應的許可權。
一般以下動作時都需要申請相應的許可權:
A particular permission may be enforced at a number of places during your program's operation:
At the time of a call into the system, to prevent an application from executing certain functions.When starting an activity, to prevent applications from launching activities of other applications.Both sending and receiving broadcasts, to control who can receive your broadcast or who can send a broadcast to you.When accessing and operating on a content provider.Binding or starting a service.
在應用安裝的時候,package installer會檢測該應用請求的許可權,根據該應用的簽名或者提示使用者來分配相應的許可權。
在程式執行期間是不檢測許可權的。如果安裝時許可權獲取失敗,那執行就會出錯,不會提示使用者許可權不夠。
大多數情況下,許可權不足導致的失敗會引發一個 SecurityException,會在系統log(system log)中有相關記錄。
(5)許可權繼承/UserID繼承
當我們遇到apk許可權不足時,我們有時會考慮寫一個linux程式,然後由apk呼叫它去完成某個它沒有許可權完成的事情,很遺憾,這種方法是行不通的。
前面講過,android許可權是在程序層面的,也就是說一個apk應用啟動的子程序的許可權不可能超越其父程序的許可權(即apk的許可權),
即使單獨執行某個應用有許可權做某事,但如果它是由一個apk呼叫的,那許可權就會被限制。
實際上,android是通過給子程序分配父程序的UserID實現這一機制的。
(三)常見許可權不足問題分析
首先要知道,普通apk程式是執行在非root、非system層級的,也就是說看要訪問的檔案的許可權時,看的是最後三位。
另外,通過system/app安裝的apk的許可權一般比直接安裝或adb install安裝的apk的許可權要高一些。
言歸正傳,執行一個android應用程式過程中遇到許可權不足,一般分為兩種情況:
(1)Log中可明顯看到許可權不足的提示。
此種情況一般是AndroidManifest.xml中缺少相應的許可權設定,好好查詢一番許可權列表,應該就可解決,是最易處理的情況。
有時許可權都加上了,但還是報許可權不足,是什麼情況呢?
Android系統有一些API及許可權是需要apk具有一定的等級才能執行的。
比如 SystemClock.setCurrentTimeMillis()修改系統時間,WRITE_SECURE_SETTINGS許可權好像都是需要有system級的許可權才行。
也就是說UserID是system.
(2)Log裡沒有報許可權不足,而是一些其他Exception的提示,這也有可能是許可權不足造成的。
比如:我們常會想讀/寫一個配置檔案或其他一些不是自己建立的檔案,常會報java.io.FileNotFoundException錯誤。
系統認為比較重要的檔案一般許可權設定的也會比較嚴格,特別是一些很重要的(配置)檔案或目錄。
如
-r--r----- bluetooth bluetooth 935 2010-07-09 20:21 dbus.conf
drwxrwx--x system system 2010-07-07 02:05 data
dbus.conf好像是藍芽的配置檔案,從許可權上來看,根本就不可能改動,非bluetooth使用者連讀的權利都沒有。
/data目錄下存的是所有程式的私有資料,預設情況下android是不允許普通apk訪問/data目錄下內容的,通過data目錄的許可權設定可知,其他使用者沒有讀的許可權。
所以adb普通許可權下在data目錄下敲ls命令,會得到opendir failed, Permission denied的錯誤,通過程式碼file.listfiles()也無法獲得data目錄下的內容。
上面兩種情況,一般都需要提升apk的許可權,目前我所知的apk能提升到的許可權就是system(具體方法見:如何使Android應用程式獲取系統許可權)
怎樣使android apk 獲取system許可權
1.一般許可權的新增
一般情況下,設定apk的許可權,可在AndroidManifest.xml中新增android:sharedUserId="android.uid.xxx>
例如: 給apk新增system許可權
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
... ...
android:sharedUserId="android.uid.system">
同時還需要在對應的Android.mk中新增LOCAL_CERTIFICATE := platform這一項。即用系統的簽名,通過這種方式只能使apk的許可權升級到system級別,系統中要求root許可權才能訪問的檔案,apk還是不能訪問。
比如在android 的API中有提供 SystemClock.setCurrentTimeMillis()函式來修改系統時間,這個函式需要root許可權或者執行與系統程序中才可以用。
第一個方法簡單點,不過需要在Android系統原始碼的環境下用make來編譯:
1. 在應用程式的AndroidManifest.xml中的manifest節點中加入android:sharedUserId="android.uid.system"這個屬性。
2. 修改Android.mk檔案,加入LOCAL_CERTIFICATE := platform這一行
3. 使用mm命令來編譯,生成的apk就有修改系統時間的許可權了。
第二個方法是直接把eclipse編出來的apk用系統的簽名檔案簽名
1. 加入android:sharedUserId="android.uid.system"這個屬性。
2. 使用eclipse編譯出apk檔案。
3. 使用目標系統的platform金鑰來重新給apk檔案簽名。首先找到金鑰檔案,在我ndroid原始碼目錄中的位置是"build/target/product/security",下面的platform.pk8和platform.x509.pem兩個檔案。然後用Android提供的Signapk工具來簽名,signapk的原始碼是在"build/tools/signapk"下,編譯後在out/host/linux-x86/framework下,用法為java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.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 apk 獲取root許可權
一般linux 獲取root許可權是通過執行su命令,那能不能在apk程式中也同樣執行一下該命令呢,我們知道在linux程式設計中,有exec函式族:
int execl(cONst char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char *const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execve(const char *path, char *const argv[], char *const envp[]);
在java中我們可以藉助 Runtime.getRuntime().exec(String command)訪問底層Linux下的程式或指令碼,這樣就能執行su命令,使apk具有root許可權,能夠訪問系統中需要root許可權才能執行的程式或指令碼了,具體例子:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class VisitRootfileActivity extends Activity { private static final String TAG = "VisitRootfileActivity"; Process process = null; Process process1 = null; DataOutputStream os = null; DataInputStream is = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { process = Runtime.getRuntime().exec("/system/xbin/su"); /*這裡可能需要修改su 的原始碼 (注掉 if (myuid != AID_ROOT && myuid != AID_SHELL) {*/ os = new DataOutputStream(process.getOutputStream()); is = new DataInputStream(process.getInputStream()); os.writeBytes("/system/bin/ls" + " \n"); //這裡可以執行具有root 許可權的程式了 os.writeBytes(" exit \n"); os.flush(); process.waitFor(); } catch (Exception e) { Log.e(TAG, "Unexpected error - Here is what I know:" + e.getMessage()); } finally { try { if (os != null) { os.close(); } if (is != null) { is.close(); } process.destroy(); } catch (Exception e) { } }// get the root privileges } }
APK在AndroidManifest.xml常用許可權
android.permission.ACCESS_CHECKIN_PROPERTIES //允許讀寫訪問”properties”表在checkin資料庫中,改值可以修改上傳 android.permission.ACCESS_COARSE_LOCATION //允許一個程式訪問CellID或WiFi熱點來獲取粗略的位置 android.permission.ACCESS_FINE_LOCATION //允許一個程式訪問精良位置(如GPS) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS //允許應用程式訪問額外的位置提供命令 android.permission.ACCESS_MOCK_LOCATION //允許程式建立模擬位置提供用於測試 android.permission.ACCESS_NETWORK_STATE //允許程式訪問有關GSM網路資訊 android.permission.ACCESS_SURFACE_FLINGER //允許程式使用SurfaceFlinger底層特性 android.permission.ACCESS_WIFI_STATE //允許程式訪問Wi-Fi網路狀態資訊 android.permission.ADD_SYSTEM_SERVICE //允許程式釋出系統級服務 android.permission.BATTERY_STATS //允許程式更新手機電池統計資訊 android.permission.BLUETOOTH //允許程式連線到已配對的藍芽裝置 android.permission.BLUETOOTH_ADMIN //允許程式發現和配對藍芽裝置 android.permission.BRICK //請求能夠禁用裝置(非常危險 android.permission.BROADCAST_PACKAGE_REMOVED //允許程式廣播一個提示訊息在一個應用程式包已經移除後 android.permission.BROADCAST_STICKY //允許一個程式廣播常用intents android.permission.CALL_PHONE //允許一個程式初始化一個電話撥號不需通過撥號使用者介面需要使用者確認 android.permission.CALL_PRIVILEGED //允許一個程式撥打任何號碼,包含緊急號碼無需通過撥號使用者介面需要使用者確認 android.permission.CAMERA //請求訪問使用照相裝置 android.permission.CHANGE_COMPONENT_ENABLED_STATE //允許一個程式是否改變一個元件或其他的啟用或禁用 android.permission.CHANGE_CONFIGURATION //允許一個程式修改當前設定,如本地化 android.permission.CHANGE_NETWORK_STATE //允許程式改變網路連線狀態 android.permission.CHANGE_WIFI_STATE //允許程式改變Wi-Fi連線狀態 android.permission.CLEAR_APP_CACHE //允許一個程式清楚快取從所有安裝的程式在裝置中 android.permission.CLEAR_APP_USER_DATA //允許一個程式清除使用者設定 android.permission.CONTROL_LOCATION_UPDATES //允許啟用禁止位置更新提示從無線模組 android.permission.DELETE_CACHE_FILES //允許程式刪除快取檔案 android.permission.DELETE_PACKAGES //允許一個程式刪除包 android.permission.DEVICE_POWER //允許訪問底層電源管理 android.permission.DIAGNOSTIC //允許程式RW診斷資源 android.permission.DISABLE_KEYGUARD //允許程式禁用鍵盤鎖 android.permission.DUMP //允許程式返回狀態抓取資訊從系統服務 android.permission.EXPAND_STATUS_BAR //允許一個程式擴充套件收縮在狀態列,android開發網提示應該是一個類似Windows Mobile中的托盤程式 android.permission.FACTORY_TEST //作為一個工廠測試程式,執行在root使用者 android.permission.FLASHLIGHT //訪問閃光燈,android開發網提示HTC Dream不包含閃光燈 android.permission.FORCE_BACK //允許程式強行一個後退操作是否在頂層activities android.permission.FOTA_UPDATE //暫時不瞭解這是做什麼使用的,android開發網分析可能是一個預留許可權. android.permission.GET_ACCOUNTS //訪問一個帳戶列表在Accounts Service中 android.permission.GET_PACKAGE_SIZE //允許一個程式獲取任何package佔用空間容量 android.permission.GET_TASKS //允許一個程式獲取資訊有關當前或最近執行的任務,一個縮略的任務狀態,是否活動等等 android.permission.HARDWARE_TEST //允許訪問硬體 android.permission.INJECT_EVENTS //允許一個程式截獲使用者事件如按鍵、觸控、軌跡球等等到一個時間流,android開發網提醒算是hook技術吧 android.permission.INSTALL_PACKAGES //允許一個程式安裝packages android.permission.INTERNAL_SYSTEM_WINDOW //允許開啟視窗使用系統使用者介面 android.permission.INTERNET //允許程式開啟網路套接字 android.permission.MANAGE_APP_TOKENS //允許程式管理(建立、催後、 z- order預設向z軸推移)程式引用在視窗管理器中 android.permission.MASTER_CLEAR //目前還沒有明確的解釋,android開發網分析可能是清除一切資料,類似硬格機 android.permission.MODIFY_AUDIO_SETTINGS //允許程式修改全域性音訊設定 android.permission.MODIFY_PHONE_STATE //允許修改話機狀態,如電源,人機介面等 android.permission.MOUNT_UNMOUNT_FILESYSTEMS //允許掛載和反掛載檔案系統可移動儲存 android.permission.PERSISTENT_ACTIVITY //允許一個程式設定他的activities顯示 android.permission.PROCESS_OUTGOING_CALLS //允許程式監視、修改有關播出電話 android.permission.READ_CALENDAR //允許程式讀取使用者日曆資料 android.permission.READ_CONTACTS //允許程式讀取使用者聯絡人資料 android.permission.READ_FRAME_BUFFER //允許程式螢幕波或和更多常規的訪問幀緩衝資料 android.permission.READ_INPUT_STATE //允許程式返回當前按鍵狀態 android.permission.READ_LOGS //允許程式讀取底層系統日誌檔案 android.permission.READ_OWNER_DATA //允許程式讀取所有者資料 android.permission.READ_SMS //允許程式讀取簡訊息 android.permission.READ_SYNC_SETTINGS //允許程式讀取同步設定 android.permission.READ_SYNC_STATS //允許程式讀取同步狀態 android.permission.REBOOT //請求能夠重新啟動裝置 android.permission.RECEIVE_BOOT_COMPLETED //允許一個程式接收到 android.permission.RECEIVE_MMS //允許一個程式監控將收到MMS彩信,記錄或處理 android.permission.RECEIVE_SMS //允許程式監控一個將收到簡訊息,記錄或處理 android.permission.RECEIVE_WAP_PUSH //允許程式監控將收到WAP PUSH資訊 android.permission.RECORD_AUDIO //允許程序錄制音訊 android.permission.REORDER_TASKS //允許程式改變Z軸排列任務 android.permission.RESTART_PACKAGES //允許程式重新啟動其他程式相關推薦
android apk的簽名和許可權問題
一. android apk的簽名問題(http://blog.csdn.net/lyq8479/article/details/6401093) 1.為什麼要給Android應用程式簽名? 如果只能用一句簡單的話語來回答這個問題的話,我會說:“這是Android系統所要求的”。
Android-APK簽名工具-jarsigner和apksigner
一.工具介紹 jarsigner是JDK提供的針對jar包簽名的通用工具, 位於JDK/bin/jarsigner.exe apksigner是Google官方提供的針對Android apk簽名及
android apk 簽名 之 在原始碼環境裡如何完成
假設Android原始碼路徑為 ProPath/ 且cd到此路徑下,之後執行 1. cp ./build/target/product/security/releasekey.x509.pem ./ 2. cp ./build/target/pr
android apk獲得系統許可權
android apk獲得系統許可權 按 Ctrl+C 複製程式碼 Android中如何修改系統時間(應用程式獲得系統許可權) 在android的API中有提供 SystemClock.setCurrentTimeMillis()函式來修改系統時間,可惜無論你怎麼呼叫這個函式都是沒用的,無
android apk獲取root許可權執行相應的操作 demo除錯
在apk中,有時候需要root許可權,例如通過apk更新系統庫等system的檔案等,避免升級韌體,或者在apk中需要直接訪問某些裝置等。下面是在apk中獲取root許可權的方法,前提是裝置已經root過了。 關鍵點在於下面這句,通過執行su產生一個具有roo
Android APK 簽名比對
Android APK 簽名比對 釋出過Android應用的朋友們應該都知道,Android APK的釋出是需要簽名的。簽名機制在Android應用和框架中有著十分重要的作用。 例如,Android系統禁止更新安裝簽名不一致的APK;如果應用需要使用system許可權,必須保證APK簽名與Framewor
Android apk 簽名及程式碼混淆、資原始檔混淆、加固整套流程
準備:*.ks proguard-android.txt', 'proguard-rules.pro(取一) 上述是簽名檔案及混淆檔案 通過AS進行混淆簽名打包apk 將該apk進行解壓可看出只是程式碼進行了混淆但是資原始檔沒有進行混淆 下面進行資原始檔進行混淆,也是通
android APK簽名過程之MANIFEST.MF分析
一、手工驗證 用winrar開啟簽名過的apk包,發現多了一個META-INF資料夾: 解壓縮後開啟META-INF目錄,有三個檔案:MANIFEST.MF,CERT.SF,CERT.RSA 本文只講解MANIFEST.MF的生成,用記事本開啟MA
檢視apk簽名 和 keystore 的資訊
1、檢視 keystore $ keytool -list -v -keystore debug.keystore $ keytool -list -v -keystore debug.keystore Enter keystore password:
解決Android應用簽名和系統不一致的問題
今天碰到一個簽名的問題,我負責的應用安裝時,會報錯: 安裝命令: adb install -r ApeFolio.apk 報錯資訊: Failed to install ApeFolio.apk: Failure [INSTALL_FAILED_SHAR
Android APP簽名和簽名等資訊檢視
最近在寫學校的創新專案,是一個基於定位的簽到系統,需要用到百度地圖,百度地圖SDK的使用需要申請身份,獲取key值等,過程中需要提供應用的簽名,下面介紹一下簽名的使用。 1. 為什麼要簽名? 傳送
Android 獲取簽名和android studio設定簽名
Generate Signed APK出錯:java.util.zip.ZipException: duplicate entry: android/support/annotation/IntegerRes.class 移除app目錄libs下面
as中apk簽名和多渠道打包
1.什麼是簽名: 數字簽名就是為你的程式打上一種標記,來作為你自己的標識,當別人看到簽名的時候會知道它是與你相關的 2.為什麼要簽名 防止盜版,app市場可以檢測簽名未簽名的apk無法安裝,也沒法釋出到應用市場包名相同,簽名不同的apk無法升級覆蓋 3.怎麼簽名 bu
Android中APK簽名工具之jarsigner和apksigner詳解
內容 value signature align light 文件簽名 item als release 一.工具介紹 jarsigner是JDK提供的針對jar包簽名的通用工具, 位於JDK/bin/jarsigner.exe apksigner是Google官方提
Mac Android顯示SHA1和MD5值並生成簽名檔案打包APK
導讀:這篇博文很簡單,圖文也講的也很詳細,只要你跟著我左手右手一個慢動作,右手左手慢動作操作。就能穩穩地走一波。一、首先,生成簽名檔案1.點選選單欄中的Build的。 2.彈出窗體,建立新的KeySto
Android 對apk進行重簽名和檢視簽名(window 和mac)及生成簽名
生成簽名檔案:其實是有很多工具可以做到,這裡不過是想用命令來生成 其命令如下:生成的簽名預設在c盤根目錄下 keytool -genkey -alias aaaa.keystore -keyalg RSA -validity 2000 -keystore new
Android APK的數字簽名的作用和意義
(1)有利於程序升級 當新版程式和舊版程式的數字證書相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數字證書不相同,則Android系統認為他們是不同的程式,併產生衝突,會要求新程式更改包名。 (2)有利於程式的模組化設計和開發。 Android系統允許擁有
Android Apk的反編譯和加密
打不開 源文件 資源 left 結果 blog 9.png 規則 找到 這幾天在上海出差,忙裏偷閑學習了一下Apk的反編譯工具的基本使用。下面就簡單介紹一下如何將我們從網上下載的Apk文件進行反編譯得到我們想要獲得的資源文件和源碼。 一、Apk文件組成 Androi
Android apk動態載入機制的研究(二) 資源載入和activity生命週期管理
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【Android】用apksigner驗證apk簽名
0x01 apksigner驗證簽名的方法 apksigner在android sdk中已經整合好了,驗證apk的簽名使用方法如下,更多使用方法參考[1]。 apksigner verify -v --print-certs xxx.apk 引數: -v, --verbos