赞
踩
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
//腾讯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
包路径
c
h
a
n
n
e
l
C
o
n
f
i
g
P
a
t
h
:
"
{project.rootDir}/jiagu/360jiagubao/jiagu/jiagu.jar", //执行命令的jar包路径 channelConfigPath: "
project.rootDir/jiagu/360jiagubao/jiagu/jiagu.jar",//执行命令的jar包路径channelConfigPath:"{project.rootDir}/jiagu/Channel.txt”, //加固多渠道
jiagubao_mac : “https://down.360safe.com/360Jiagu/360jiagubao_mac.zip”, //加固mac下载地址
jiagubao_windows : “https://down.360safe.com/360Jiagu/360jiagubao_windows_64.zip” //加固widnows下载地址
]
apply from: “${project.rootDir}/packers.gradle”
def dest = “A”
使用ext扩展块,一次扩展多个属性
ext {
account = “XXXX”
password = “XXXXX”
}
单引号不支持插值
def name = ‘张三’
双引号支持插值
def name = “我是${‘张三’}”
三个单引号支持换行
def name = “”"
张三
李四
“”"
// 这两种写法等价
println(‘A’)
println ‘A’
repositories {
println “A”
}
repositories() { println “A” }
repositories({println “A” })
task B {
// TaskB依赖TaskA,故会先执行TaskA
dependsOn A
//其次执行packersRelease
doLast {
println “B”
}
}
//taskB必须总是在 taskA 之后运行, 无论 taskA 和 taskB 是否将要运行
taskB.mustRunAfter(taskA)
//没有msut那么严格
taskB.shouldRunAfter (taskA)
// 使用一个相对路径
File configFile = file(‘src/config.xml’)
// 使用一个绝对路径
configFile = file(configFile.absolutePath)
// 使用一个项目路径的文件对象
configFile = file(new File(‘src/config.xml’))`
// 对文件集合进行迭代
collection.each {File file ->
println file.name
}
copy {
from 源文件地址
into 目标目录地址
rename(“原文件名”, “新文件名字”)
}
这个功能准备在下篇文章更新,我们可以通过curl命令上传到自己的服务器,如果你在测试阶段可以上传到蒲公英或者fir.im托管平台,目前他们都提供了相关的操作方式,这样基本上整个自动化的目的就完成了,当然你也可以选择Jenknis自动化构建、打包及上传。
方式一:fir-CLI 命令行工具上传
$ fir p path/to/application -T YOUR_FIR_TOKEN
方式二:API 上传
通过curl命令调用相关的api
1.获取凭证
curl -X “POST” “http://api.bq04.com/apps”
-H “Content-Type: application/json”
-d “{“type”:“android”, “bundle_id”:“xx.x”, “api_token”:“aa”}”
2.上传apk
curl -F “key=xxxxxx”
-F “token=xxxxx”
-F “file=@aa.apk”
-F “x:name=aaaa”
-F “x:version=a.b.c”
-F “x:build=1”
-F “x:release_type=Adhoc” \ #type=ios 使用
-F “x:changelog=first”
https://up.qbox.me
curl -F “file=@/tmp/example.ipa” -F “uKey=” -F “_api_key=” https://upload.pgyer.com/apiv1/app/upload
我们的需求是需要打两批包,用于老后台与新后台,老后台的包必须加上app-前缀,所以有三个任务packersNewRelease
执行正常的加固打包用于新后台,packersOldRelease
用于打包加前缀app-名称用于老后台,packersRelease
这个任务用于一键同时打包成老后台与新后台。
同时可以在gradle控制台查看打包任务的输出日志,如下:
为了能够让大家尝试自动化gradle脚本带来的便利之处,下面我贡献上自己的整个gradle源码,需要的可以拿走去研究,如存在问题也希望多多交流。
/**
// 把敏感信息存放到自定义的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
包路径
c
h
a
n
n
e
l
C
o
n
f
i
g
P
a
t
h
:
"
{project.rootDir}/jiagu/360jiagubao/jiagu/jiagu.jar", //执行命令的jar包路径 channelConfigPath: "
project.rootDir/jiagu/360jiagubao/jiagu/jiagu.jar",//执行命令的jar包路径channelConfigPath:"{project.rootDir}/jiagu/Channel.txt”, //加固多渠道
jiagubao_mac : “https://down.360safe.com/360Jiagu/360jiagubao_mac.zip”, //加固mac下载地址
jiagubao_windows : “https://down.360safe.com/360Jiagu/360jiagubao_windows_64.zip” //加固widnows下载地址
]
}
/**
/**
/**
/**
/**
/**
/**
/**
当你打算跳槽的时候,应该把“跳槽成功后,我能学到什么东西?对我的未来发展有什么好处”放在第一位。这些东西才是真正引导你的关键。在跳槽之前尽量“物尽其用”,把手头上的工作做好,最好是完成了某个项目或是得到提升之后再走。跳槽不是目的,而是为了达到最终职业目标的手段
最后祝大家工作升职加薪,面试拿到心仪Offer
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
你的关键。在跳槽之前尽量“物尽其用”,把手头上的工作做好,最好是完成了某个项目或是得到提升之后再走。跳槽不是目的,而是为了达到最终职业目标的手段**
最后祝大家工作升职加薪,面试拿到心仪Offer
[外链图片转存中…(img-x6kZCaSR-1715803434756)]
[外链图片转存中…(img-K1bNaHAF-1715803434757)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。