Android开发之Gradle笔记整理2

在使用gradle命令执行打包apk时,需要在build文件中配置签名,

 signingConfigs {       //签名,这里的文件名和密码是错的,后面还会有从外部导入的语句
        debug {
            storeFile file("./MyApplication5.jks")  //签名文件
            storePassword "bihansheng"                       //密码
            keyAlias "MyApplication "
            keyPassword "bihansheng"
        }
    }

但是这样直接写在gradle中是不安全(把密码暴露在了代码中,项目被反编译时就会被发现)的,

网上大部分文章都说可以用一下方式,将gradle文件中配置签名文件的代码,这样在命令 执行 命令时,就会被要求输入密码。


signingConfigs { //gradle assembleRelease  
    myConfig {  
        storeFile file("<span style="font-family: Arial;">./MyApplication5.jks</span>")  
        storePassword System.console().readLine("\nKeystore password: ")  
        keyAlias "<span style="font-family: Arial;">MyApplication </span>"  
        keyPassword System.console().readLine("\nKey password: ")  
    }  
}  


但是在实际使用,会报错:



网上有解决方法是,使用命令行打包,(这个错误是因为androidStudio中认为这个方法是非法的)

但是这样的的话使用androidStudio不能运行项目,因为有没有解决的bug。


为了解决这个问题,在网上找到一种解决方法,主要思想是引入一种被androidStudio认可的语言,来代替这种不被认可的方法。


在gradle文件最上面加入 

import groovy.swing.SwingBuilder

引入新的包。并在文件中加入下面的代码(需要根据具体的情况修改相关的配置)


    gradle.taskGraph.whenReady { taskGraph ->
        if(taskGraph.hasTask(':app:assembleRelease') || taskGraph.hasTask(':app:assemble_360Release') ) {//注意,这里只针对“assembleRelease”和“assemble_360Release”命令,如果要求其他命令也执行输入密码操作,需要在这里添加“||”判断
            def storePass = ''
            def keyPass = ''
            if(System.console() == null) {
                new SwingBuilder().edt {
                    dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
                        vbox { // Put everything below each other
                            label(text: "Please enter store passphrase:")
                            def input1 = passwordField()
                            label(text: "Please enter key passphrase:")
                            def input2 = passwordField()
                            button(defaultButton: true, text: 'OK', actionPerformed: {
                                storePass = input1.password;
                                keyPass = input2.password;
                                dispose();
                            })
                        }
                    }
                }
            } else {
                storePass = System.console().readPassword("\nPlease enter store passphrase: ")
                keyPass = System.console().readPassword("\nPlease enter key passphrase: ")
            }

            if(storePass.size() <= 0 || keyPass.size() <= 0) {
                throw new InvalidUserDataException("You must enter the passwords to proceed.")
            }

            storePass = new String(storePass)
            keyPass = new String(keyPass)

            android.signingConfigs.debug.storePassword = storePass//用输入的密码代替配置中的storePassword
            android.signingConfigs.debug.keyPassword = keyPass
        }
    }
 

注意:1、这里的“ android.signingConfigs.debug.storePassword”,是配置清单signingConfigs中的参数,

2、在执行命令后,控制台中会显示“Please enter store passphrase:”,当你敲击键盘输入密码时,控制台中是不会显示你输入的密码的,不要惊慌,按“enter”键继续,输入完两个密码之后,会继续执行打包操作。(这个问题也浪费了我不少时间,当时还以为是哪个地方出错了)





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值