Android开发之Gradle笔记整理2

news/2024/5/20 3:24:33 标签: android, gradle

在使用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”键继续,输入完两个密码之后,会继续执行打包操作。(这个问题也浪费了我不少时间,当时还以为是哪个地方出错了)






http://www.niftyadmin.cn/n/1678127.html

相关文章

IIS配置

步骤 &#xff1a; 安装和配置 Windows Server 2003。 1. 将\System32\cmd.exe转移到其他目录或更名&#xff1b; 2. 系统帐号尽量少&#xff0c;更改默认帐户名&#xff08;如Administrator&#xff09;和描述&#xff0c;密码尽量复杂&#xff1b; 3. 拒绝通过网络访问该计…

Hover伪类在IE6中的实现

鼠标滑过行&#xff0c;行改变颜色可以使用javascript写&#xff0c;onmouseover&#xff0c;onmouseout&#xff0c;也可以使用css2的伪类hover&#xff0c;但是ie6对伪类支持的不好&#xff0c;需要变换一下思路&#xff0c;要么使用javascript&#xff0c;onmouseover就变为…

GlassFish 3.1 正式版发布

Oracle 今天宣布了 GlassFish 3.1 正式版&#xff1a;如果谁还认为我们正在做一个儿童版的 GlassFish&#xff0c;那么 GlassFish 将会让你非常吃惊&#xff0c;完全的集群支持、中央集中管理、模块化设计以及开发人员友好的产品特性等等。 同时 Oracle 还发布了一个商业版本—…

decimal(numeric )、float 和 real 数据类型的区别

decimal(numeric ) 同义&#xff0c;用于精确存储数值float 和 real 不能精确存储数值decimal数据类型最多可存储 38 个数字&#xff0c;所有数字都能够放到小数点的右边。decimal数据类型存储了一个准确&#xff08;精确&#xff09;的数字表…

ExtJS 分页扩展

2019独角兽企业重金招聘Python工程师标准>>> 最近工作项目需要&#xff0c;我也来扩展一下 ExtJs 分页.网上有很多..但没有找到项目要求的. /** * author LDJ * date 2010-10-14 本分页组件提供 两个用户可以配置属性 * config everyPageCount 显示分页连接个数 默认…

[转载]html中DTD使用小结

原文链接&#xff1a;http://www.jb51.net/web/36856.htmlDTD 是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是html文件的验证机制,属于html文件组成的一部分。 DTD&#xff1a;三种文档类型&#xff1a;S&#xff08;Strict&#xff09;、T&#xff08;Transitional…

使用TextSwitcher 和ImageSwitcher实现平滑过渡

只需要以下几个简单步骤&#xff1a;1&#xff09; 通过findViewById() 方法获取TextSwitcher 对象的引用switcher&#xff0c;当然也可以直接在代码中构造该对象。2&#xff09; 通过switcher.setFactory() 方法指定TextSwitcher 的View-Factory。3&#xff09;通过switcher.s…

vfp中,远程的概念

远程是逻辑而非物理概念&#xff0c;凡需要借助外部驱动&#xff08;非vfp本身的数据引擎&#xff0c;例如 ODBC, ADO)来存取数据的方式&#xff0c;都统称远程转载于:https://blog.51cto.com/gzkhrh/508638