Android开发之通过apksigner对apk进行v2签名

Android开发之通过apksigner对apk进行v2签名,第1张

在 Android 70 Nougat 中引入了全新的 APK Signature Scheme v2签名方式,美团也推出相应的 Android渠道包生成工具Walle 。
360加固后需要重新签名,借助360官方提供的 签名工具qihoo apk signer ,是采用的70以前的v1签名,这时再通过walle打渠道包,是无法成功往apk写入渠道号的。这时我们就必须借助 Android SDK提供的apksigner 工具对已经打包好的apk进行v2签名。

Android官方文档已经对 apksigner的使用 有比较详细的解释。下面说说实际的 *** 作步骤:

zip对齐,因为APK包的本质是一个zip压缩文档,经过边界对齐方式优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗 ,通过空间换时间的方式提高执行效率(zipalign后的apk包体积增大了100KB左右)。
打开cmd,把目录切换到SDK的build-tools目录下(例如 E:\SDK\build-tools\2502\ ),执行:

zipalign命令选项不多:
-f : 输出文件覆盖源文件
-v : 详细的输出log
-p : outfilezip should use the same page alignment for all shared object files within infilezip
-c : 检查当前APK是否已经执行过Align优化。
另外上面的数字4是代表按照4字节(32位)边界对齐。

这个工具位于SDK目录的build-tools目录下。必须说明的是,v2签名方式时在Android70后才推出的,所以只有 版本>25 的SDK\build-tools\中才能找到apksignerjar。
打开cmd,把目录切到SDK\build-tools\版本号\lib下(例如 E:\SDK\build-tools\2502\lib ),执行:

示例:

apksigner还支持另外的一些选项, 详情点击这里 。包括指定min-sdk版本、max-sdk版本、输出详细信息、检查apk是否已经签名等等。
例如检查apk是否已经签名:

zipalign + apksigner,两步走完成对apk包的v2签名。且以上工具位于AndroidSDK目录的build-tools中。

不建议刷机,刷机有以下风险:
1、刷机后,手机可能无法达到最佳工作状态,部分功能可能无法正常运行。同时由于第三方固件未经充分测试可能会存在兼容性不好、系统易受病毒入侵等问题。
2、刷机会带来无法预料的负面影响,请谨慎 *** 作。如果设备不能正常使用,并且无法恢复,需要自行承担风险。
3、对由刷机引起的软硬件故障,华为售后维修网点可以按非保修处理,并按普通的保外软件维修进行收费。
建议使用在线升级。

 想要odex系统首先必须先处理/system/framework/下面的jar文件,其次才是/system/app下面的apk和jar等。
换种说法:
如果framework下面的文件没有odex化,都是单独的jar文件,那么系统中其他地方比如/system/app下即使存在odex文件也应该是无效的。
如果framework下的文件已经odex化,那么其他地方的apk和jar可以odex化也可以不odex都可以正常运行。
0901的包初始是deodex的,也就是所有apk都是合并好的没有odex文件存在。想要odex系统可以执行那个包解压后的odexbat来达到目的。
odexbat主要是调用/system/xbin/odex_framework和/system/xbin/odex_app这两个脚本。(直接在手机端用终端模拟器来执行这两个脚本应该也行,也就是说odex化的过程应该可以不依赖电脑)
odex_framework和odex_app要用到busybox、dexopt-wrapper、zip、zipalign等命令,因此需要事先将这些工具准备妥当。(0901包里面这些第三方的命令行工具基本都在/system/xbin目录下,busybox最好使用相关软件来安装,其他命令复制好后改好权限就行。)
下面直接看/system/xbin/odex_framework这个脚本,它负责odex化framework下的文件,内容如下,###开头的行都是我写的说明:
#!/system/bin/sh
### 挂载system分区为可读写,并将目录切换到/system/framework。
busybox mount -o rw,remount /system
cd /system/framework
### dexopt-wrapper这个命令直接用来生成odex文件。比如dexopt-wrapper /system/framework/corejar /system/framework/coreodex就是由corejar生成coreodex。
### 另外framework下面的文件odex有顺序要求,具体的顺序可见手机根目录下的initrc这个文件,在这个initrc里面查找BOOTCLASSPATH这行,这行后面会列出一些jar文件,那么我们这里odex的顺序就要照着那个列出的顺序来进行。各机型各版本这个顺序可能有区别,因此这里必须照实际情况排好顺序,否则生成了odex也多半是启动不了的。
### 一行处理一个文件,依次按顺序执行。
dexopt-wrapper /system/framework/corejar /system/framework/coreodex
dexopt-wrapper /system/framework/core-junitjar /system/framework/core-junitodex
dexopt-wrapper /system/framework/bouncycastlejar /system/framework/bouncycastleodex
dexopt-wrapper /system/framework/extjar /system/framework/extodex
dexopt-wrapper /system/framework/frameworkjar /system/framework/frameworkodex
dexopt-wrapper /system/framework/androidpolicyjar /system/framework/androidpolicyodex
dexopt-wrapper /system/framework/servicesjar /system/framework/servicesodex
dexopt-wrapper /system/framework/apache-xmljar /system/framework/apache-xmlodex
dexopt-wrapper /system/framework/filterfwjar /system/framework/filterfwodex
### 需要按顺序处理的文件处理完成后,其他的文件就不用在意顺序了,直接用个for语句来统一处理。
for j in /system/framework/jar
do
odexj=`echo $j | sed -e 's/jar/odex/g'`
if [ -f $odexj ]; then
echo "++++++++++++"
echo "$odexj already exists, skipping"
echo "++++++++++++"
else
echo "dexopt-wrapper $j $odex"
dexopt-wrapper $j $odexj
fi
done
### 到此时所有的文件都已经生成了相应的odex文件,下面的步骤是删除掉原始jar文件里面的classesdex以及对文件zipalign优化,这一步应该不是必须的但推荐也处理一下。同样也是for语句来统一处理。zip命令负责删除classesdex打包,zipalign命令负责zipalign优化。
for filename in `find -name 'jar'`
do
# step 1 - did we succesfully odex
if [ -f `echo $filename | sed 's/\(\\)jar/\1odex/'` ]
then
# step 2 - remove the classesdex from the jar
zip -d $filename classesdex
# step 3 - zipalign, just in case
zipalign -f -v 4 $filename $filenamenew
mv $filenamenew $filename
fi
done
### 单独对framework-resapk进行zipalign优化,因为上面的语句只是针对jar文件。并且framework-resapk中没有classesdex文件因此它不需要odex处理。
zipalign -f -v 4 framework-resapk framework-resapknew
mv framework-resapknew framework-resapk
### 改好framework下面所有文件的权限。
chmod 644 /system/framework/
### 清空系统的dalvik缓存然后退出脚本。
busybox rm -f /data/dalvik-cache/
exit 0
通过上面的脚本framework下的文件都已经odex化,接下来可以处理/system/app下面的文件,当然不处理app下的文件应该也是可以正常运行的。
odex_app就是处理app下的文件的,格式与odex_framework类似并且要简单些,因为里面的文件都没有顺序的要求。

给apk文件签名主要分三步:
1、创建证书
2、签名
3、优化(可选)
1)使用jdk的keytool工具生成签名用的证书> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERTkeystore 创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERTkeystore ---- 证书保存的文件名 CERT ---- 证书的别名 10000 ---- 10000天的有效期 2048 ---- 默认为1024 bits,Android 建议使用2048 bits或更高其他的详细信息可以使用keytool -help查看帮助 证书生成后使用如下命令可以查看证书的信息:> keytool -list -alias CERT -keystore CERTkeystore
2)使用jdk的jarsigner工具对apk文件签名> jarsigner -verbose -keystore CERTkeystore to_signapk CERT 签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERTkeystore ---- 证书保存的文件名 CERT ---- 证书的别名 待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。如果不想创建过程输出太多信息,可以删除“-verbose” 。上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signedakp,只需将 to_signapk 改为 -signedjar to_signapk signedakp 即可。签名后可以使用如下命令验证是否签名成功: > jarsigner -verify to_signapk 如果需要查看更详细的验证信息,可修改为:> jarsigner -certs -verbose -verify to_signapk
3)使用android sdk的zipalign工具优化已签名的apk文件> zipalign -v 4 unalignedapk alignedapk 注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalignexe。

在 Android Studio使用教程(一)中简要介绍了Android Studio的基本使用,包括安装、新建工程、工程结构以及主题设置。今天接着讲第二篇,主要包括如下内容:
从Eclipse导入工程到Android Studio
Eclipse工程与Android Studio的区别
真机运行以及常用快捷键
需要重申一下,我所有的 *** 作与版本是基于Mac系统,在Windows上的同学基本类似(作为一个技术人员,这些应该都不是问题大笑),下面就分主题开始吧:
一、从Eclipse导入工程到Android Studio
根据官方的介绍,Android Studio可以兼容Eclipse的现有工程,但需要做一些 *** 作:
首先升级ADT到最新版本,目前为版本号为22(注意和ADT相关的组件最好一并升级,避免后期可能出现的错误)
选择需要从Eclipse导出的工程,右键选择Export并选择Android下的Generate Gradle Build Files(如下图):
选择完毕后并不会导出到其他地方,而是在本地工程生成了一个buildgradle文件,在Eclipse工程中也可以看到,这个文件是Android Studio识别的,如下图:
3随后进入Android Studio并选择Import Project,可以看到刚刚在Eclipse中的项目图标变成了一个Android机器人图标,说明转换成功,这时候选择工程导入即可:
至此,就完成了从Eclipse导入现有Android工程到Android Studio,现在可以开始对工程进行 *** 作了!
二、Eclipse工程与Android Studio的区别
Eclipse工程可以导入Android Studio运行,而反过来在Android Studio建立的工程不能在Eclipse中运行;
二者的工程结构不一样,在Eclipse中一个Project就代表一个项目工程,而在Android Studio中就和Intellij一样,一个Project代表一个工作空间,相当于Eclipse中的workspace,而在Android Studio中一个Module就相当于Eclipse中的一个Project,这个概念需要弄明白,不要混了或觉得糊涂了。
在编辑 *** 作上,在Eclipse中编辑修改后必须手动command+s保存文件,而在Android Studio中就和Intellij一样是自动保存的,这一点和第二点和Xcode也是类似的。
工程目录上的区别,在Eclipse中src部分一般是java文件,res部分是资源文件,包括布局文件和多媒体资源等。在Android Studio中,可以看下图的目录结构:
包括java文件和资源文件全部放到了src目录下,src目录下包括一个main文件夹,再下面就是java文件夹和res文件夹,其实这里,java文件夹就相当于Eclipse中的src,res还是那个res,这里想起了本山老师的小品“src已经不是那个src了,res还是那个res”大笑
三、真机运行以及常用快捷键
在Android Studio中点击界面下方的Android选项卡可以看到Device信息和Logcat,连上设备后打开Android选项卡会检测真机,成功后会显示在Device中,点击顶部的绿色小箭头就可以开始运行工程了。有一点需要注意的是,运行时可以选择模拟器也可以选择真机,由于在Android Studio中运行工程的时候有一个Device优先级选择,如果不设置的话可能会出现只运行在模拟器上的现象,我们可以自行设置一下:先点击Run菜单选择Run Configuration,并选择你想选择的目标设备,可以是模拟器和真机,也可以在运行选由用户选择:
快捷键大家可以对照官方文档进行熟悉,如下表,也可以自己修改配置选项进行自定义:
个人觉得Android Studio还是有一定的前景的,这里就需要Google不断进行完善和改进了,赶紧把大家从Eclipse中解救出来吧。另外,在此期间,大家其实可以尝试使用一下Intellij IDEA,这个默认也是集成Android开发环境的。Android Studio是基于前者改进而来,二者在使用上差不多,也是Eclipse的一个不错的替代者。后期有时间我会记录一篇专门使用Intellij IDEA开发Android的文章!

可以的,看这里。 MT 文件管理器声称要超越re等文件管理器
软件信息
软件名称: MT管理器
软件版本: 140210
软件大小: 657kb
软件语言: 中文
资费提示: 免费
适用系统: android23以上
资源来源: >

1Android运行环境的搭建

进行安卓系统的软件设计,那么JDK的开发环境搭建必须是首要的。我们选择Windows10 64位 *** 作系统。同时在JDK版本的选择中选用Windows x64版本的Java SE Development Kit 8u5,该版本稳定,应用广泛而且开源免费,获取方便。在安装的过程中要注意不要重复安装,应安装完毕后立即删除安装包,否则如果不小心再次点到安装包,该安装包会立刻删除所安装的程序并询问是否重新安装。在JDK的安装过程中,要注意开发工具,源代码,公共JRE三项都要选中,而且要安装到C盘默认目录下,同时将其附带的JRE同样安装到相同目录下,同时硬盘至少应该留有2G的空间。

选择好JDK的版本并进行安装后,我们的JAVA环境就安装好了,众所周知,安卓系统是由JAVA语言架构的,所以在搭建安卓运行环境之前必须要先安装JAVA环境。安装完JAVA环境之后,我们进行安卓开发环境的搭建。我们就要进行Android SDK版本的选择。我们这里选择android-sdk_r2441-windows版本。这个版本是与安卓80同时发布的,同时它的发布时间也在我们的安卓测试机红米NOTE5A型号之后,可以完美兼容我们的安卓测试机所运行的安卓712版本。

图1 Android运行环境的搭建

Fig1 Setup of the Android operating environment

2 Windows10系统环境变量的配置

环境变量是在 *** 作系统中的一个对象,该对象具有特定的名字,用来指定 *** 作系统在运行时的一些参数。在电脑属性的高级系统属性中进行环境变量的编辑。首先新增两个系统变量,变量名称分别为%JAVA_HOME%和%ANDROID_HOME%,变量值分别为各自安装目录。然后修改系统变量中的PATH变量,我们这里采用的是Windows10系统,修改PATH变量相对于Windows7来说更为方便快捷,在PATH环境变量中新建四条属性,如图2所示。

图2系统环境变量配置

Fig2 System environment variable configuration

3 SDK的下载与安装

配置完系统的环境变量后进行SDK的下载与安装。上文提到了我们选择的版本为android-sdk_r2441-windows版本,将其下载好的压缩包进行解压缩,然后打开Android SDK安装目录下的SDK MANAGER程序,在TOOLS目录下安装Android SDK Tools 2441、Android SDK Platform-tools 2701、Android SDK Build-tools 2703,系统提示的版本是否升级我们选择否选项,因为该版本与我们相应的JDK80以及安卓测试机运行版本都能够相匹配,如果选择更新到最新版本可能会导致一系列因为兼容性或者不匹配性所导致的错误。

API方面选则从API15到API27,即Android401到Android 810,API(Application Programming Interface)是应用程序编程接口,其工作原理是是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。在Windows10运行环境下我们自然需要相应的API进行安卓软件的开发。在Extras目录下安装Google Play services和Google USB Driver,Google Play services和IOS系统下的GameCenter的作用是相同的。

当我们打开游戏软件应用时就会出现在主屏上。可以使用谷歌的账号登录,然后创建一个昵称,可以添加一个电子邮件地址,以便与好友联系。当用户登录一个已有的谷歌账号或者注册一个新账号时,载有服务条款的界面即会呈现给用户。此时使用者可新建一个独一无二的游戏账号,而昵称和其他一些信息则用于接收其他玩家向你发出的好友邀请,当然其他游戏玩家也可以通过电子邮件来查找你。除此之外,只需点击该服务中相应的链接即可下载游戏。我们可以使用它玩相应的类似《部落战争》的游戏。

至于Google USB Driver,则使我们的安卓系统开发具有利用USB接口传输数据的能力,可以让我们所开发的软件可以通过USB接口进行相应的输入和输出。USB即插即用、支持热插拔、传输速度快、可通过扩展连接多达127个 USB 设备,不用担心 USB 加密锁与打印机等外设的冲突,极大的提高的我们所开发软件的适应性与传播性。

在相应的Build tools,API,Extras服务都安装完毕后,我们的安卓SDK就可以正常运行了,不过在此之前需检查安装目录下的tools文件夹是否存在zipalign文件,如果不存在的话将会无法运行接下来的步骤。我们需要手动将安装目录下的build-tools文件夹中的相应版本的zipalign文件复制到tools对应文件夹下。从Android 16 SDK版本开始,SDK中就包含了一个用于优化APK的新工具zipalign。

它提高了优化后的Applications与Android系统的交互效率,从而可以使整个系统的运行速度有了较大的提升。Android小组强烈建议开发者在发布新Apps之前使 用zipalign优化工具,而且对于已经发布但不受限于系统版本的Apps,建议用优化后的APK替换现有的版本。使用zipalign工具,会提升我们的APP性能,降低内存使用率,降低手机发热程度,这对于我们的由小米手机厂商开发的红米NOTE5A手机来说是“至关重要”的。使用cmd命令符进行zipalign优化如图3所示。

图3 zipalign优化

Fig3 the optimization of zipalign

4 Android SDK接口的设置及APK的生成

手机屏幕尺寸在主视窗口Game模块下将Free Aspect修改为16:10 LandScape屏幕比例,以适应大部分安卓手机。

SDK与JDK的接口设置:在unity编译器中选择SDK,JDK安装目录进行环境配置,安卓API选择Android50版本,并更新项目名称,将SDK版本升级到Sdk18以上。在Build Setting中将设置修改为安卓50。

5 总结

本次主要介绍了系统软件环境的搭建与生成,从Android运行环境的搭建,Windows系统环境变量设置,Android SDK的配置, SDK接口和APK生成几个方面分别介绍了具体步骤,让我们了解了本文安卓系统软件开发的环境配置。

以上就是安卓环境和下载和安装啦,按步骤来 *** 作对小白来说也是相对简单的,只要注意一些文中说明的细节,现在就开始行动起来一起学unity吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13102087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存