[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-genkeypair [-v] [-protected]
[-alias <别名>]
[-keyalg ] [-keysize <密钥大小>]
[-sigalg ] [-dname ]
[-validity ] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-genseckey [-v] [-protected]
[-alias <别名>] [-keypass <密钥库口令>]
[-keyalg ] [-keysize <密钥大小>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <别名>]
[-file <认证文件>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-importkeystore [-v]
[-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]
[-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]
[-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名称>]
[-destprovidername <目标提供方名称>]
[-srcalias <源别名> [-destalias <目标别名>]
[-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]
[-noprompt]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-keypasswd [-v] [-alias <别名>]
[-keypass <旧密钥库口令>] [-new <新密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-list [-v | -rfc] [-protected]
[-alias <别名>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
-printcert [-v] [-file <认证文件>]
-storepasswd [-v] [-new <新存储库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] …
[-providerpath <路径列表>]
jarsigner用法 :
[选项] jar 文件别名
jarsigner -verify [选项] jar 文件
[-keystore ] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 专用密钥的口令(如果不同)
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose] 签名/验证时输出详细信息
[-certs] 输出详细信息和验证时显示证书
[-tsa ] 时间戳机构的位置
[-tsacert <别名>] 时间戳机构的公共密钥证书
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库已保护验证路径
[-providerName <名称>] 提供者名称
[-providerClass <类> 加密服务提供者的名称
[-providerArg <参数>]] … 主类文件和构造函数参数
************************************************************************************************************************************************************
C:\Users\Pauson>cd C:\Program Files\Java\jdk1.6.0_01\bin
C:\Program Files\Java\jdk1.6.0_01\bin>keytool -genkey -v -keystore my.keystore -alias key_name -keyalg RSA -validity 50000
输入keystore密码:paulson
再次输入新密码: paulson
您的名字与姓氏是什么?
[Unknown]: yan
您的组织单位名称是什么?
[Unknown]: 上海典酷信息有限公司
您的组织名称是什么?
[Unknown]: 典酷
您所在的城市或区域名称是什么?
[Unknown]: 上海
您所在的州或省份名称是什么?
[Unknown]: 上海
该单位的两字母国家代码是什么
[Unknown]: 86
CN=yan, OU=上海典酷信息有限公司, O=典酷, L=上海, ST=上海, C=86 正确吗?
[否]: 是
正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 50,00
0 天):
CN=yan, OU=上海典酷信息有限公司, O=典酷, L=上海, ST=上海, C=86
输入<key_name>的主密码
(如果和 keystore 密码相同,按回车):paulson
[正在存储 my.keystore]
完成签名:
jarsigner -verbose -keystore my.keystore pedometer.apk key_name
C:\Program Files\Java\jdk1.6.0_01\bin>jarsigner -keystore my.keystore D:\Pedometer.apk key_name
输入密钥库的口令短语:
C:\Program Files\Java\jdk1.6.0_01\bin>
jarsigner -keystore E:\android\my01.keystore E:\android\lotterygift(android).apk key_name01
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.第二种方法:使用Eclipse完成签名
Eclipse直接能导出带签名的最终apk,非常方便,推荐使用,步骤如下:
第一步:导出。
第二步:创建密钥库keystore,输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到。
第三步:填写密钥库信息,填写一些apk文件的密码,使用期限和组织单位的信息。
第四步:生成带签名的apk文件,到此就结束了。
第五步:如果下次发布版本的时候,使用前面生成的keystore再签名。
第六步:Next,Next,结束!
3.签名之后,用zipalign(压缩对齐)优化你的APK文件。
未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools目录下)工具对其优化:
Java代码
1. D:\>zipalign -v 4 demo_signed.apk final .apk
D:\>zipalign -v 4 demo_signed.apk final.apk
如上,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值),这样android系统就可以使用mmap()(请自行查阅这个函数的用途)函数读取文件,可以在读取资源上获得较高的性能,
PS:1.在4个字节边界上对齐的意思就是,一般来说,是指编译器吧4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效、快速的访问(较之前不对齐)。
2.对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用"对齐"进一步优化,但是大小一般会有所增加。
4.签名对你的App的影响。
谷歌建议你把你所有的APP都使用同一个签名证书。
使用你自己的同一个签名证书,就没有人能够覆盖你的应用程序,即使包名相同,影响有:
-
App升级。 使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。
-
App模块化。android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。
-
允许代码和数据共享。android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如下:
Java代码
1. AndroidManifest.xml:
AndroidManifest.xml:
其中protectionLevel标签有4种值:normal(缺省值),dangerous, signature,signatureOrSystem。简单来说,normal是低风险的,所有的App不能访问和共享此App。dangerous是高风险的,所有的App都能访问和共享此App。signature是指具有相同签名的App可以访问和共享此App。signatureOrSystem是指系统image中App和具有相同签名的App可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了,一般这个许可会被用在在一个image中需要共享一些特定的功能的情况下。
-----------------------------------------------------------------------------------以下为转载---------------------------------------------------
Android编译、打包的步骤: |
--------------------------------------------------------------------------------------------以下内容为转载---------------------
----------------build.xml-------------------
<?xml** version\="1.0"**?>
-
<project name=“TestProject” default=“all” basedir=“.” description=“test_project”>
-
<property name=“src.dir” value=“src” />
-
<property name=“classes.dir” value=“WEB-INF/classes” />
-
<property name=“lib.dir” value=“WEB-INF/lib” />
-
<property name=“temp.dir” value=“ j a v a . i o . t m p d i r / {java.io.tmpdir}/ java.io.tmpdir/{ant.project.name}” />
-
<property name=“target.dir” value=“target” />
-
-
<path id=“master-classpath”>
-
<fileset file=“${lib.dir}/*.jar” />
-
<pathelement path=“${classes.dir}” />
-
</path>
-
<target name=“clean”>
-
<delete dir=“${classes.dir}” />
-
<delete dir=“${temp.dir}” />
-
<delete file=“ t a r g e t . d i r / {target.dir}/ target.dir/{ant.project.name}.jar”/>
-
<delete file=“ t a r g e t . d i r / {target.dir}/ target.dir/{ant.project.name}.war”/>
-
<delete dir=“${target.dir}” />
-
</target>
-
<target name=“init” depends=“clean”>
-
<mkdir dir=“${target.dir}” />
-
<mkdir dir=“${temp.dir}” />
-
<mkdir dir=“${classes.dir}” />
-
</target>
-
<target name=“compile” depends=“init” description=“compile the source files”>
-
<javac srcdir=“ s r c . d i r " d e s t d i r " ˉ {src.dir}" destdir\=" src.dir" destdir"ˉ{classes.dir}” debug=“true” encoding=“GB2312”>
-
<classpath refid=“master-classpath” />
-
</javac>
-
<copy todir=“${classes.dir}” overwrite=“true”>
-
<fileset dir=“${src.dir}”>
-
<include name=“**/*.xml” />
-
<include name=“**/*.properties” />
-
</fileset>
-
</copy>
-
</target>
-
<target name=“jar” depends=“compile”>
-
<jar jarfile=“ t a r g e t . d i r / {target.dir}/ target.dir/{ant.project.name}.jar”>
-
<fileset dir=“${classes.dir}”>
-
<include name=“**/*” />
-
</fileset>
-
</jar>
-
</target>
-
<target name=“preWar” depends=“jar”>
-
<copy todir=“${temp.dir}/WEB-INF/lib” overwrite=“true”>
-
<fileset dir=“${target.dir}”>
-
<include name=“${ant.project.name}.jar”/>
-
</fileset>
-
</copy>
-
<copy todir=“${temp.dir}” overwrite=“true”>
-
<fileset dir=“${basedir}”>
-
<include name=“${lib.dir}/*.jar” />
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/297d91a4fa9afa50954edb395f50f7a2.jpeg)
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
[外链图片转存中…(img-xMfc2Gcu-1713248334235)]
【算法合集】
[外链图片转存中…(img-1BOPJ2pM-1713248334235)]
【延伸Android必备知识点】
[外链图片转存中…(img-b1n9aiIa-1713248334236)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!