【移動應(yīng)用開發(fā)技術(shù)】為你的APK進(jìn)行數(shù)字簽名_第1頁
【移動應(yīng)用開發(fā)技術(shù)】為你的APK進(jìn)行數(shù)字簽名_第2頁
【移動應(yīng)用開發(fā)技術(shù)】為你的APK進(jìn)行數(shù)字簽名_第3頁
【移動應(yīng)用開發(fā)技術(shù)】為你的APK進(jìn)行數(shù)字簽名_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】為你的APK進(jìn)行數(shù)字簽名

摘要:

我們需要為APK進(jìn)行數(shù)字簽名,這樣才能發(fā)布到GooglePlay商店。解決方法很簡單,使用Java的keytool命令創(chuàng)建證書并在Gradle構(gòu)建文件的signingConfigs塊中使用就可以辦到。下面讓我們看看詳細(xì)討論。本文選自《巧用Gradle構(gòu)建Android應(yīng)用》。所有Android包(APK)文件在部署之前都需要被數(shù)字簽名,Android使用一個已有的密鑰簽發(fā)調(diào)試用的APK。你可以使用Java提供的keytool命令來查看。默認(rèn)情況下,調(diào)試用的密鑰存儲庫在你的用戶目錄下的.Android子目錄下面。默認(rèn)的名字叫作debug.keystore,并且其密碼是Android。下面示例顯示了怎么列舉默認(rèn)的證書。示例.列舉調(diào)試密鑰庫(MacOSx)>

cd

~/.android>

keytool

-list

-keystore

debug.keystore

Enter

keystore

password:

("android")

Keystore

type:

JKS

Keystore

provider:

SUN

Your

keystore

contains

1

entry

androiddebugkey,Feb

9,

2013,

PrivateKeyEntry,

Certificate

fingerprint

(SHA1):

B7:39:B5:80:BE:A0:0D:6C:84:4F:A1:1F:4B:A1:00:14:12:25:DA:14密鑰庫的類型是JKS,其代表(很自然的)JavaKeyStore,用于公鑰和私鑰。Java提供另一種類型叫作JCEKS(JavaCryptographyExtensionsKeyStore),其可以被用于共享密鑰,但是沒有被Android應(yīng)用程序使用。這個密鑰庫中有一個自簽名的證書,別名為Androiddebugkey,當(dāng)APK被部署到連接的設(shè)備或者模擬器上時,其被用于簽名調(diào)試用的APK。為了重設(shè)調(diào)試用的密鑰庫,簡單地刪除debug.keystore文件,下次部署app時會重新創(chuàng)建。你不能部署一個發(fā)布版本的app除非你對其簽名了,意味著生成一個發(fā)布用的密鑰。這也需要使用keytool工具。一次很簡單的運(yùn)行如下所示。示例.生成發(fā)布密鑰keytool

-genkey

-v

-keystore

myapp.keystore

-alias

my_alias

-keyalg

RSA

-keysize

2048

-validity

10000

(all

on

one

line)

Enter

keystore

password:

(probably

shouldn't

use

use

"password")

Re-enter

new

password:

(but

if

you

did,

type

it

again)

What

is

your

first

and

last

name?

[Unknown]:

Ken

Kousen

What

is

the

name

of

your

organizational

unit?

[Unknown]:

What

is

the

name

of

your

organization?

[Unknown]:

Kousen

IT,

Inc.

What

is

the

name

of

your

City

or

Locality?

What

is

the

name

of

your

State

or

Province?

What

is

the

two-letter

country

code

for

this

unit?

Is

CN=Ken

Kousen,

OU=Unknown,

O="Kousen

IT,

Inc.",

L=Marlborough,

ST=CT,

C=US

correct?

Generating

2,048

bit

RSA

key

pair

and

self-signed

certificate

(SHA256withRSA)

with

a

validity

of

10,000

days

for:

CN=Ken

Kousen,

OU=Unknown,

O="Kousen

IT,

Inc.",

L=Marlborough,

ST=CT,

C=US

Enter

key

password

for

<my_alias>

(RETURN

if

same

as

keystore

password):

[Storing

myapp.keystore]

What

is

the

two-letter

country

code

for

this

unit?

Is

CN=Ken

Kousen,

OU=Unknown,

O="Kousen

IT,

Inc.",

L=Marlborough,

ST=CT,

C=US

correct?

Generating

2,048

bit

RSA

key

pair

and

self-signed

certificate

(SHA256withRSA)

with

a

validity

of

10,000

days

for:

CN=Ken

Kousen,

OU=Unknown,

O="Kousen

IT,

Inc.",

L=Marlborough,

ST=CT,

C=US

Enter

key

password

for

<my_alias>

(RETURN

if

same

as

keystore

password):

[Storing

myapp.keystore]RSA算法被用于生成公私鑰對,大小為2KB,使用SHA256進(jìn)行簽名,10000(27年多)天有效期。你現(xiàn)在可以使用jarsigner和zipalign工具來為你的APK簽名了,但是讓Gradle來做會更容易。添加signingConfigs塊作為Android閉包的一個子塊,如下所示。示例.在模塊構(gòu)建文件中的signingCons塊android

{

//

...

other

sections

...

signingConfigs

{

release

{

keyAlias

'my_alias'

keyPassword

'password'

storeFile

file('/Users/kousen/keystores/myapp.keystore')

storePassword

'password'

}

}

}你可能不想將密碼硬編碼在構(gòu)建文件中。幸運(yùn)的是,你可以把它們放到perties文件中,或者從命令行指定。從DSL文檔中,signingConfigs塊委托給一個SigningConfig的類,其包含四個常用的屬性:keyAlias:當(dāng)簽發(fā)一個特定的密鑰時在keytool中被使用。keyPassword:在簽發(fā)過程中使用的一個特定密鑰的密碼。storeFile:包含密鑰和證書的磁盤文件,由keytool生成。storePassword:密鑰庫文件自身使用的密碼。還有一個storeType屬性(默認(rèn)為JKS,如示例2-29所示),但是這個屬性很少使用。為了使用新的配置,添加一個signingConfig屬性到release構(gòu)建類型。示例.在發(fā)布構(gòu)建中使用簽名配置android

{

//其他段buildTypes

{

release

{

//其他設(shè)置

signingConfig

signingConfigs.release

}

}

}當(dāng)你在Gradle中調(diào)用assembleRelease任務(wù)的時候,構(gòu)建為在app/build/outpu/apk目錄下生成一個發(fā)布版本的APK。示例.運(yùn)行assembleRelease任務(wù)>

./gradlew

assembleRelease

:app:preBuild

UP-TO-DATE

:app:preReleaseBuild

UP-TO-DATE

//...太多任務(wù):app:zipalignRelease

UP-TO-DATE

:app:assembleRelease

UP-TO-DATE

BUILD

SUCCESSFUL

kousen

at

krakatoa

in

~/Documents/AndroIDstudio/MyAndroidApp

>

ls

-l

app/build/outputs/apk

total

12088

-rw-r--r--1

kousen

staff

1275604

Aug

24

15:05

app-debug.apk

-rw-r--r--1

kousen

staff

1275481

Aug

26

21:04

app-release.apk注意——這很重要——不要丟失密鑰庫。如果丟了,你將不能發(fā)布任何關(guān)于你的app的更新,因為所有的版本都必須要用同樣的密鑰簽名。

本文選自《巧用Gradle構(gòu)建Android應(yīng)用》,點此鏈接可在博文視點官網(wǎng)查看。想及時獲得更多精彩文章,可在微信中搜索“博文視點”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論