Android-Gradle-自动化多渠道打包,阿里巴巴国际站面试题及答案,一次违反常规的安卓大厂面试经历

69 阅读2分钟

zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk

  • 使用你的私钥为apk签名

apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk

  • 验证apk是否已经被签名

apksigner verify my-app-release.apk

基于加固Apk自动实现多渠道

关于多渠道打包,我们之前项目一直使用的是腾讯的VasDolly,故我们此次是采取VasDolly命令,但是需要先下载VasDolly.jar,至于放在什么位置没有要求,只需要gradle配置好路径即可,我直接是放在项目根目录。也可以使用360的多渠道加固,实际上整套都可以使用360加固提供的命令。

/**

  • 腾讯channel重新构建渠道包
    */
    def reBuildChannel() {
    File channelFile = file(“app[channelPath]/new)if(!channelFile.exists())channelFile.mkdirs()defcmd=javajar{app[“channelPath”]}/new”) if (!channelFile.exists()) { channelFile.mkdirs() } def cmd = “java -jar {app[“vasDollyPath”]} put -c /channel.txt"{”…/channel.txt"} {outputpackersApk()} ${channelFile.absolutePath}"
    println cmd
    cmd.execute().waitForProcessOutput(System.out, System.err)
    println ‘packers===excute VasDolly reBuildChannel’
    }

敏感信息存取

我们都知道,签名需要签名文件,密码、别名等等文件,360加固需要配置账号与密码,这些都属于敏感信息,google官方不建议直接放在gradle中,它是以纯文本记录在gradle中的,建议存储在properties文件中。

// 把敏感信息存放到自定义的properties文件中
def propertiesFile = rootProject.file(“release.properties”)
def properties = new Properties()
properties.load(new FileInputStream(propertiesFile))

ext {
// 签名配置
signing = [keyAlias : properties[‘RELEASE_KEY_ALIAS’],
keyPassword : properties[‘RELEASE_KEY_PASSWORD’],
storeFile : properties[‘RELEASE_KEYSTORE_PATH’],
storePassword: properties[‘RELEASE_STORE_PASSWORD’]
]

// app相关的配置
app = [
//默认release apk的文件路径,因为加固是基于release包的
releasePath : “

p

r

o

j

e

c

t

.

b

u

i

l

d

D

i

r

/

o

u

t

p

u

t

s

/

a

p

k

/

r

e

l

e

a

s

e

"

,

/

/

r

e

l

e

a

s

e

a

p

k

加固后产生的加固

a

p

k

地址

p

a

c

k

e

r

s

P

a

t

h

:

"

{project.buildDir}/outputs/apk/release", //对release apk 加固后产生的加固apk地址 packersPath : "

project.buildDir/outputs/apk/release",//对releaseapk加固后产生的加固apk地址packersPath:"{project.buildDir}/outputs/packers”,
//加固后进行腾讯多渠道打包的地址
channelPath : “${project.buildDir}/outputs/channels”,
//腾讯VasDolly多渠道打包jar包地址
vasDollyPath: “…/VasDolly.jar”
]

// 360加固配置
packers = [account : properties[‘ACCOUNT360’], //账号
password : properties[‘PASSWORD360’], //密码
zipPath : “

p

r

o

j

e

c

t

.

r

o

o

t

D

i

r

/

j

i

a

g

u

/

360

j

i

a

g

u

.

z

i

p

"

,

/

/

加固压缩包路径

u

n

z

i

p

P

a

t

h

:

"

{project.rootDir}/jiagu/360jiagu.zip", //加固压缩包路径 unzipPath : "

project.rootDir/jiagu/360jiagu.zip",//加固压缩包路径unzipPath:"{project.rootDir}/jiagu/360jiagubao/”, //加固解压路径
jarPath : “

p

r

o

j

e

c

t

.

r

o

o

t

D

i

r

/

j

i

a

g

u

/

360

j

i

a

g

u

b

a

o

/

j

i

a

g

u

/

j

i

a

g

u

.

j

a

r

"

,

/

/

执行命令的

j

a

r

包路径

最后

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。 由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的点击这里>Android IOC架构设计免费获取。 群内还有免费的高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

image