Android Studio 中创建配置签名,代码混淆以及打包中常见的问题

今天给自己的项目进行打包更新的时候出现了很多问题。
本次针对的是Android Studio 3.4版本。
今天从签名部分从头开始写一些每一步骤和会出现的问题。
首先先Build签名打包
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第1张图片
照常选择APK
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第2张图片
接着Create new
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第3张图片

接着填写信息,看下面翻译慢慢填,个人觉得随意填,只要记住密码就行。

Key store path : 签名文件路径
Password : 签名密码
Confirm : 确认密码
Alias : 别名
Validity ( years ) : 有限期 (年)
First and Last Name : 全名
Organizational Unit : 组织单位
Organization : 组织
City or Locality : 城市或地方
State or Province : 州或省
Country Code(XX) : 国家代码
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第4张图片
接着OK之后就会跳回刚才的窗口,点击记住密码,方便下一次打包,跳转到
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第5张图片
这个页面之后记得V1 和V2都要选择,因为V1是适配了Android7.0以下的安全,对于7.0以上没作用,但是V2又是对于7.0以上有作用,在7.0一下无法安装。所以两者都要选择。
至于上面的debug和release现在还没有在gradle中配置,选哪个都行。而我选择关闭这个窗口~~

到现在签名的申请已经完成了,接下来就是签名的配置,我就拿我的举例吧。
先在local.properties中添加你的key信息
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第6张图片
其次在你app的build.gradle中添加如下代码

android {
    compileSdkVersion 28

    //加载资源
    Properties properties = new Properties()
    InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream()
    properties.load(inputStream)
    //读取文件
    def sdkDir = properties.getProperty('key.file')
    //读取字段
    def keyfile =file(sdkDir)
    def key_keyAlias = properties.getProperty('keyAlias')
    def key_keyPassword = properties.getProperty('keyPassword')
    def key_storePassword = properties.getProperty('storePassword')

    defaultConfig {
        ...
        ...
    }


    signingConfigs {
        release{
            storeFile keyfile
            storePassword key_storePassword
            keyAlias key_keyAlias
            keyPassword key_keyPassword
        }
            debug{
            storeFile keyfile
            storePassword key_storePassword
            keyAlias key_keyAlias
            keyPassword key_keyPassword
        }

    }

    buildTypes {
        release {
            debuggable false
            jniDebuggable false
            //代码混淆
            minifyEnabled true
            //压缩对齐生成的apk包
            zipAlignEnabled true
            //移除无用的资源文件
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            if (keyfile.exists()) {
                signingConfig signingConfigs.release
            }
        }
        debug{
            debuggable true
            jniDebuggable true
            zipAlignEnabled true //zipAlign优化
            minifyEnabled false //是否混淆
            shrinkResources false //是否去除无效的资源文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            if (keyfile.exists()) {
                signingConfig signingConfigs.debug
            }
        }
    }
}

dependencies {
  ...
  ...
}

切记把signingConfigs和buildTypes 的上下顺序放好,不然会报错而且半天还找不到问题。。。
我的这个做法是有助于jks的信息保护。因为当项目绑定仓库的时候,会默认自动忽略local.properties文件,所以你的密码和信息不会被一起上传上去。心大的或者对这个无所谓的可以直接写到build.gradle中的signingConfigs里面也是可以的。
到这里或许还会报找不到文件错误,你先自己看看报错的日志,在build中查看,很多都是路径地址呀,代码符号呀,混淆什么的出现了问题,如果自己最后还是没看出来的话,就百度谷歌
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第7张图片网上的解决办法千千万,除了上述的问题意外,有时候出现的问题,可以尝试修改gradle插件版本来解决。
对于代码混淆的问题,常见的第三方混淆代码在app的proguard-rules.pro中添加。
这里有一个链接是专门针对第三方的代码混淆规则实例。贴一个链接
Android常用第三方库混淆规则集合
如果说都写上了那些规则和还是不行的话那就去第三方的官网Api去查看混淆规则。
如果说完了还是出现了报错的问题,这里我再贴一个链接
代码混淆后如何快速定位错误

总之就是有问题就有解决的办法,如果说你最后还是没有成功的跑起来,大不了不混淆了就完事儿了,多大点事,一个false解决的事儿,这里还有个问题值得一提,当你想破罐子破摔去关闭正式版的混淆功能是,这时你的shrinkResources对象如果还是true的话还是会报错。。。这尼玛简直是坑爹。shrinkResources这个东西true的前提是minifyEnabled是true,如果minifyEnabled是flase,shrinkResources填true就会报错。。。

如果你不放弃,等整个项目都没问题了的话,现在就去开开心心的验证你的签名吧~~

有两个方法
第一种,也是比较帅气的,就是双击屏幕右上角的gradle中的signingReport,
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第8张图片
不出意外,你就会弹出这个页面
Android Studio 中创建配置签名,代码混淆以及打包中常见的问题_第9张图片
第二种就是在底部的Terminal栏中直接输入 keytool -list -v -keystore X:\XX\XX\XXX.jks
后面填写你的jks全路径点击回车,完了就会让你输入密码,你闭着眼睛输入,点完回车后再睁眼睛,别问我为什么。问就是帅~
到这里app的签名创建和配置就算大功告成了。整个过程看来就就这一篇文章,但是每一个节点往深处挖都能拓展很多知识,所以我这边文章大部分是个人总结作用,如果有人因为缘分看到了这篇文章,如若觉得不错,记得点个关注,如若看不懂,希望直接指出,我会改正,争取写出来的东西老少皆宜~~哈哈哈
最后就是一个问题,当你直接用As跑的时候项目没问题,但是打成release包之后安装到手机上就给闪退了。看看debug和release的区别入手,个人看来八成是代码混淆造成的。这里只需要看一个闪退的报错,找到报错的地方,进行更改混淆规则即可。

你可能感兴趣的:(Android,个人小结)