Android 签名配置

最近这段时间,在做公司的游戏SDK的时候,碰到一个蛋疼的问题。因为SDK集成了微信支付的功能,但是在使用微信支付的时候,会校验App所使用的签名文件,而我们在开发的时候使用:Run----->Android Application 的方式话,用的是默认的签名文件,这个默认的签名文件可以通过:Window---->Preferences----->Android----->Build找到。我起初的解决办法是,每次都使用eclipse的Export功能来打包,然后在dos环境下使用:adb install xxx.apk来运行,但是这样太影响效率了。其实可以把默认的签名文件替换成我们需要的签名文件,在Window---->Preferences----->Android----->Build中我们可以找到Custome debug keystore,如果我们配置了这个,那么在Run----->Android Application的时候使用的就是我们配置的签名文件。

 

但是在配置这个签名文件的时候出现了问题,总是提示:Keystore was tampered with, or password was incorrect.这句话的意思是我们在配置自定义的签名文件的时候,需要保证自定义的签名文件和默认的签名文件是一样的密码、一样的别名、一样的别名密码。

 

所以,一般情况下,我们需要修改自定义签名文件的密码、别名、别名密码。如何修改呢?

默认签名文件的信息如下:

Keystore name: “debug.keystore”
Keystore password: “android”
Key alias: “androiddebugkey”
Key password: “android”
CN: “CN=Android Debug,O=Android,C=US”

 

1. 首先当然是先复制一份正式证书出来作为要修改为的临时调试证书。

2. 修改keystore密码的命令(keytool为JDK带的命令行工具,只要java环境变量配置正确了,使用这个工具就没有问题),DOS环境下进入签名文件所在目录:

    keytool -storepasswd -keystore my.keystore

其中,my.keystore是复制出来的证书文件,执行后会提示输入证书的当前密码,和新密码以及重复新密码确认。这一步需要将密码改为android。

3. 修改keystore的alias:

    keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey

这一步中,my_name是证书中当前的alias,-destalias指定的是要修改为的alias,这里按规矩来,改为androiddebugkey!这个命令会先后提示输入keystore的密码和当前alias的密码。

4. 修改alias的密码:

    keytool -keypasswd -keystore my.keystore -alias androiddebugkey

这一步执行后会提示输入keystore密码,alias密码,然后提示输入新的alias密码,同样,按规矩来,改为android!

 

经过以上步骤,签名文件的密码、别名、别名密码就改好了,我们就可以在Custome debug keystore中配置这个签名文件。配好签名文件后,之后我们每次通过Run------>Android Application运行程序的时候使用的就是我们自己的签名文件了。

AbdroidStudio

我们可以新建一个项目,然后生成一个新的签名文件。 
一般来说,经过这些操作之后,我们便可以通过点击左上角的Build->Generate Signed APK->Next,然后选择对应的Build Type进行打包。

那对一些人来说,这样也太麻烦了,每次都得输入相关信息,还得进行选择,这怎么能忍! 
那么有更简单快捷的方法吗?答案是有的。

我们可以在项目的app目录下的build.gradle中进行签名的配置。 
首先我们找到build.gradle下的android{},默认配置如下所示
è¿éåå¾çæè¿°

 

接下来呢,我们可以把项目的预览模式调成Project,不调也行,只需把刚才生成的签名文件放至到对应的目录下即可。我的做法是直接放至到项目下,如图所示

è¿éåå¾çæè¿°

然后,回到app下的build.gradle,在里面增加这段代码

signingConfigs {
        debug {
            storeFile file('../test.jks')//签名文件路径
            storePassword "123456"
            keyAlias "test"
            keyPassword "123456"  //签名密码
            println("====== signingConfigs.debug ======")
        }
        release {
            storeFile file('../test.jks')//签名文件路径
            storePassword "123456"
            keyAlias "test"
            keyPassword "123456"  //签名密码
            println("====== signingConfigs.release ======")
        }
    }
 

我来解释一下,storeFile file对应的就是签名文件key的路径,我们的签名放在项目的直接子路径下,而build.gradle在test/app下,所以我们要用 .. 找到项目的根路径,再通过 / 找到对应的签名文件所在路径。当然,你也可以自己配置签名文件的地址,只要能找到即可
è¿éåå¾çæè¿°

此时,我们在项目路径下的app/build/outputs可以看到我们打包的apk,从名字可以看出,该APK是已经签名的。那么就是说,用代码配置,可以达到和使用图形界面一样的效果。

对了,这里有一点需要注意,就是signingConfigs代码块一定要写在buildTypes前面,否则会报下面这种错: Could not find property ‘debugConfig’ on SigningConfig container.

至此,我们的buildTypes的配置可以这样:buildTypes {
        debug {
            println("====== buildTypes.debug ======")
            signingConfig signingConfigs.debug
        }
        release {
            //是否混淆
            minifyEnabled false
            //是否移除无用资源
            zipAlignEnabled true
            println("====== buildTypes.release ======")
            signingConfig signingConfigs.release
            //混淆的配置文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

大家现在便可以通过命令行进行任意操纵,或者进行多渠道打包。 
不过,上述的配置虽然配置简单,但是存在不安全性,假如你的项目是开源的,你把签名文件的配置密码之类的信息用明文写在build.gradle里面,那是不是很不安全呢?

所以,我们可以这么做。在项目路径下新建一个.properties的文件,或者直接local.properties下直接添加相关信息即可。

我们可以直接在该文件下添加:(填写相关信息)

keystore.path=../test.jks              //替换成自己的签名路径
keystore.password=123456        
keystore.alias=test
keystore.alias_password=123456

那么,在build.gradle下面,为了不用明文显示,我们首先要获得key的相关配置,所以我们可以在app的build.gradle下面新增该代码

def keystoreFilepath = ''
def keystorePSW = ''
def keystoreAlias = ''
def keystoreAliasPSW = ''
// default keystore file, PLZ config file path in local.properties
def keyfile = file('s.keystore.temp')

Properties properties = new Properties()
// local.properties file in the root director
properties.load(project.rootProject.file('local.properties').newDataInputStream())
keystoreFilepath = properties.getProperty("keystore.path")

if (keystoreFilepath) {
    keystorePSW = properties.getProperty("keystore.password")
    keystoreAlias = properties.getProperty("keystore.alias")
    keystoreAliasPSW = properties.getProperty("keystore.alias_password")
    keyfile = file(keystoreFilepath)
}
首先,便是给key赋默认值,然后根据Properties的配置文件,然后根据我们在local.properties下的配置参数keystore.password等获取签名文件的配置信息。

这里有一点需要强调,在git版本控制的项目中,我们可以看到我们项目下有一个.gitignore的文件,里面的配置大概如下所示
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值