談談大家都是怎麼開發調試系統應用的
我們都知道在開發調試android 系統應用例如,setting,SystemUI,本地媒體,方案商app,等app的時候。因爲這些應用都依賴系統的一些的API或者方案商的一些獨有的API。所以我們一般開發調試都有會以下幾種情況:
1.使用 sublime 或者Source Insight 來開發,然後編寫mk文件,在android 系統源碼中mm單獨編譯。然後push到真機上進行驗證調試。
2.(大神使用)直接在有android 源碼的服務器上使用vim 編輯,然後mm編譯運行,再push到真機上進行驗證調試。(這種大神真是屌炸天了)
3.將系統app源碼導入到android studio上,然後進行編輯,然後再將寫好的部分代碼拷貝到系統app源碼中。然後再mm編譯,然後再push
4.直接將需要調試開發的系統app配成android studio 模式的。然後直接使用android studio 開發調試運行run
顯而易見,前兩種開發編輯時都是不能自動導包的,後面兩種藉助android studio都是可以自動導包的。這裏估計使用方式最多的估計是: 1》3》2》4 。當然大的手機公司,應該4會更普遍一些。
1.對於將以mk方式編譯的系統app配成以gradle在android studio上編譯
其實最主要的就是要將app中依賴的那些包以源碼moudle或者jar包的方式導入到android studio上就行。具體看下mk中有依賴那些東西,然後再去全編的android 系統的out 目錄下將這些包拷進去,一般都在以下的目錄。其中基本肯定都需要先到framework.jar的
out\target\common\obj\JAVA_LIBRARIES
2. 其次的話,就是需要將系統簽名也導入到android studio 中。
1.android 源碼生成apk系統簽名文件
首先在 Android 源碼目錄執行如下命令,切到 security 目錄:
cd build/target/product/security/
然後執行 ls -la
可以查看目錄下的文件:
build/target/product/security$ ls -al
總用量 80
drwxr-xr-x 2 4096 12月 23 21:23 .
drwxr-xr-x 4 4096 12月 23 11:55 ..
-rw-r--r-- 1 656 12月 23 11:55 Android.mk
-rw-r--r-- 1 1216 12月 23 11:55 media.pk8
-rw-r--r-- 1 1675 12月 23 11:55 media.x509.pem
-rw-r--r-- 1 2375 12月 23 11:55 networkstack.pk8
-rw-r--r-- 1 2094 12月 23 11:55 networkstack.x509.pem
-rw-r--r-- 1 2926 12月 23 21:23 platform.jks
-rw-r--r-- 1 2892 12月 23 21:23 platform.p12
-rw-r--r-- 1 1704 12月 23 21:22 platform.pem
-rw-r--r-- 1 1216 12月 23 11:55 platform.pk8
-rw-r--r-- 1 1675 12月 23 11:55 platform.x509.pem
-rw-r--r-- 1 3128 12月 23 11:55 README
-rw-r--r-- 1 1218 12月 23 11:55 shared.pk8
-rw-r--r-- 1 1675 12月 23 11:55 shared.x509.pem
-rw-r--r-- 1 1217 12月 23 11:55 testkey.pk8
-rw-r--r-- 1 1675 12月 23 11:55 testkey.x509.pem
-rw-r--r-- 1 524 12月 23 11:55 verity_key
-rw-r--r-- 1 1219 12月 23 11:55 verity.pk8
-rw-r--r-- 1 1444 12月 23 11:55 verity.x509.pem
其中的 platform.pk8 是製作系統簽名需要的文件。
詳細步驟
1、在 security 目錄下,執行命令:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
此時會在當前目錄生成臨時文件 platform.pem 。
2、接着執行如下命令,將在目錄下生成 platform.p12 文件,它本質上應該就是一個數字證書。
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name androiddebugkey
這裏的 android (storePassword,keyPassword)和 androiddebugkey (keyAlias)可以自行替換,但爲了方便IDE識別,我們儘量將這兩個參數與 IDE 默認的簽名文件內容保持一致。
3、然後再執行如下命令:
keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android
這裏執行後會有如下提示信息:
root:/....../build/target/product/security(master)$ keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android
Entry for alias androiddebugkey successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
1 個成功,0 個失敗或取消,說明命令執行成功,已經在當前目錄下生成了 platform.jks 文件,而這個文件就是可以用在 Android Studio 裏面的簽名文件了。
命令裏面的
platform.jks
對應的就是生成的簽名文件的名稱,這個名字可以自行修改,而且後綴也可以換成 .keystore,例如 debug.keystore。
4、然後將這個 platform.jks 拷貝到自己的目錄下,並在IDE中使用這個簽名文件簽名
apk,或者直接將 IDE 默認的簽名文件替換掉,AS 也可以修改編譯腳本。
5、此時IDE打包的 apk 就可以直接安裝到擁有相同platform簽名的機器中了。
build.gradle文件:
signingConfigs {
signing_q {
storeFile file("platform.jks")
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.signing_q //然後在這裏引入
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.signing // 然後在這裏引入
}
}