安卓应用签名那些事

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/alex01550/article/details/82177724

安卓应用签名平常不怎么使用,容易遗忘,特记录下来。有些文章讲的很多,但觉的不够清晰,没能指出几种方式的异同,何时使用何种方式,下面说说我自己的理解。


为什么应用需要签名?

Android应用以它的包名作为唯一标识。如果在同一部手机上安装两个包名相同的应用,后面安装的应用就会覆盖前面安装的应用。为了避免这种情况的发生,Android要求对作为产品发布的应用进行签名。比如此时有两个包名一样的应用,但是签名不同,后进行安装的应用会无法进行安装(除非卸载前者),如果两个应用包名和签名都一致,那么后者会对前者进行覆盖。

如何进行签名?

我们知道安卓studio打包应用有两种模式:1.debug,2.release。

平时在开发调试阶段,都是运行在debug模式,此时默认签名在:C:\Users\<用户名>\.Android\debug.keystore,如果不存在Android studio会自动创建它。默认信息如下:

debug签名我们不需要管它,但是当我们自己上线应用时就必须有自己的release签名了。

1.首先创建一个签名

扫描二维码关注公众号,回复: 4645979 查看本文章

点击OK后,一路next,直到图4的Finish

Finish之后,会在app文件夹下生成release文件夹,release文件夹中既是刚签名的apk文件

以上是在生成签名文件的同时,直接生成了签名过后的apk文件,也算是签名的一种方式,但更重要的是生成了签名文件。

2.签名的第二种方式(这才是真正的方式)

打开project Structure面板,创建两个签名配置,见标识②,需要指定刚创建的签名文件的路径,然后点开BuildTypes,

主要是Signing Config选项,release一般对应于release配置,debug对应于debug配置,但在开发调试某些第三方API时,必须使用release签名,这时就可以将debug的Signing Config设置成release,方便我们调试

点击OK后,会在app的build文件中生成如下代码:

signingConfigs {
        release {
            keyAlias 'key0'
            keyPassword '123456'
            storeFile file('E:/my_demo_workspace/TakePhotoDemo/keystore.jks')
            storePassword '123456'
        }
        debug {
        }
    }

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release  // 签名新生成的代码
        }
        debug {
            signingConfig signingConfigs.debug // 签名新生成的代码
        }
    }

所以,你也可以直接手写这些代码。

当然,为了提高安全性,我们还可以把那四个属性作为变量配置在主工程的gradle.propreties,然后在build.gradle引用变量就可以了。如下:

接下来是进行打包:

看上图,选择assembleRelease,即打release包,生成文件目录见下图:

 在app>>build>>outputs>>apk下,可以看到dubug文件夹和release文件夹,既是对应的debug和release apk版本,如果release版本没签名,会显示app-release-unsigned文件名。这样打release包就方便多了。

3.如何直接在调试的时候运行release包?

首先要知道release包和release签名是两个不同的概念,不要搞混了。见下图:

在build的时候直接release模式构建,然后直接点击运行就可以了。当我们构建多个渠道版本进行调试的时候,也是在这里选择不同的渠道进行调试的。需要注意的一点:如果一个项目有多个module,主module可以选择debug或者是release,编译时被依赖的 Module 默认会提供 Release 版给其他 Module 或工程使用,如果你在依赖的module中使用BuildConfig.Debug判断输出log会出现问题。解决办法参见:https://blog.csdn.net/j236027367/article/details/78751281

猜你喜欢

转载自blog.csdn.net/alex01550/article/details/82177724
今日推荐