精华内容
下载资源
问答
  • 2021-12-25 16:54:51

    Android 打包流程:

    image.png

    具体的打包步骤如下:

    1:生成R.java类文件:Eclipse中会自动生成R.java,ant和命令行使用androidSDK提供的aapt.exe程序生成R.java.

    2:将.aidl文件生成.java类文件:Eclipse中自动生成,ant和命令行使用androidSDK提供的aidl.exe生成.java文件。

    3:编译.java类文件生成class文件:Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件.

    4:将class文件打包生成classes.dex文件:Eclipse中自动生成,ant和命令行使用androidSDK提供的dx.bat命令行脚本生成classes.dex文件。

    5:打包资源文件(包括res、assets、androidmanifest.xml等):Eclipse中自动生成,ant和命令行使用AndroidSDK提供的aapt.exe生成资源包文件

    6:生成未签名的apk安装文件:Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用androidSDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。

    7:对未签名的apk进行签名生成签名后的android文件:

    8:对签名后的android文件进行字节对齐;

    更多相关内容
  • Android打包流程

    2021-05-26 06:05:15
    一、Apk组成关闭Android Instant Run热部署功能,正常打包的情况下,生成的Apk包含以下文件和目录。Apk组成1,res目录,存放资源文件,所有文件映射在R类资源id常量中,在代码中通过id直接访问。2,lib目录,C++库,...

    一、Apk组成

    关闭Android Instant Run热部署功能,正常打包的情况下,生成的Apk包含以下文件和目录。

    4b8206262991

    Apk组成

    1,res目录,存放资源文件,所有文件映射在R类资源id常量中,在代码中通过id直接访问。

    2,lib目录,C++库,so文件,根据Cpu架构区分文件夹,如arm-v7,x86,mips,不同目标设备根据当前架构加载对应目录下so文件。

    3,classes.dex文件,由class字节码文件通过dx工具转化,Dalvik虚拟机识别的执行文件。

    4,assets目录,存放任何文件或文件夹,一般存放WebView相关资源。

    和res目录的区别:不会在R类中映射资源id,在代码中通过AssetManager类访问,其他资源,包括raw资源,都会生成资源id。

    5,AndroidMainfest文件,应用配置,向Android系统注册该应用信息,四大组件,权限声明。

    6,resources.arsc文件,记录资源文件和资源id的映射关系,在代码中通过R类的资源id查找资源,运行时,需要根据id找到资源的路径。

    7,META-INF目录,签名和校验,验证Apk文件完整性,打包时,会计算内部所有文件摘要签名,保存在该目录下,安装时,根据该目录的相关文件校验完整性,确保Apk每个文件不被篡改,是官方正版Apk。

    二、打包流程

    Apk如何出来的?

    aapt(Android Asset Packaging Tool),资源打包工具,编译res目录下的资源文件,生成R文件,resources.arsc和res目录,R文件。

    4b8206262991

    屏幕快照 .png

    res目录是资源文件,比如layout,anim,drawable,menu,raw,xml目录下的文件,在R文件是静态内部类的静态变量,每个文件对应一个id。

    4b8206262991

    屏幕快照 .png

    value目录下的文件,比如attrs,colors,dimens,styles,strings文件,每个文件对应一个静态内部类,文件内的资源item是静态变量,每个项对应一个id。

    4b8206262991

    屏幕快照 .png

    资源id是4字节无符号,resources.arsc文件记录应用程序资源目录信息,包括每一个资源名称、类型、值、id以及所配置的维度信息,资源索引表,key是资源id。

    4b8206262991

    屏幕快照 .png

    res目录将文本格式的xml转换成二进制xml,文本编辑器打开是乱码的。

    4b8206262991

    屏幕快照 .png

    用As的Apk查看工具可以看到里面内容。二进制xml实现了字符串替换,将一些在资源使用id表示,解析更快,占用空间更小。

    aidl,处理aidl文件,编译成java文件。

    compile,javac工具编译所有java文件,包括R文件,aidl生成的java文件,java源文件和第三方java文件,生成class文件。

    dex,通过dex命令,处理class文件,包括第三方class文件,生成Delvik虚拟机可执行的classes.dex文件,在分包情况下生成多个dex文件。对多个class文件合并,重组,优化,可以减小体积,缩短运行时间。

    apkbuilder,将resources.arsc,res目录,Androidmanifest文件,dex文件,一些第三方的so文件,assets目录,通过apkbuilder工具生成未签名Apk包。

    注意,raw资源和assets直接打包进入Apk,其他资源编译处理,raw被映射到R文件,assets不会映射,需要Assetmanager类访问,raw目录内部不能再有目录结构,assets可以有。

    jarsigner,对Apk进行签名,debug使用默认签名。

    zipalign,对未压缩的数据,如图片,按4字节边界进行对齐,对齐后可以向读内存一样对普通文件操作,加快资源访问速度。

    参考

    任重而道远

    展开全文
  • 快速打包一个安卓包看这一篇就够

    快速入门安卓打包流程及常用设置

    步骤(跟着步骤自己实际操作一遍即可学会)

    1. 下载打开Unity Hub,在项目中点击安装,在对应的版本上点击三个点。然后选择添加模块,如果不能添加模块需要自己查询一下原因,下载Android Build Support以及下面的JDK,SDK和NDK,推荐都下载。如果自己电脑以及装了对应版本的,可以不选择下载,但是版本限制比较死,最好是在这个地方下载,可以自动对应上版本。
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述

    2. 打开unity,选择你要打包的项目,点击Build Setting。需要先切换到安卓打包。
      在这里插入图片描述

    3. 点击左下角的Player Settings进行游戏设置

      • 主栏设置的公司名,项目名,版本号,还有默认的图标。剩下2个安卓的不用写。
        在这里插入图片描述

      • 模块设置先点击安卓图标

      • Icon栏可以为不同分辨率手机设置不同精度的图标大小

      • 在Resolution and Presentation栏下

        • 设置Orientation,也就是屏幕旋转。Default Orientation为默认的旋转模式,如果需要固定就选你需要的那个,如果有多个选择就选Auto Rotation。然后在下面的Allowed Orientations for Auto Rotation里,可以取消勾选你不想要的旋转方向。
          在这里插入图片描述
      • 在SplashImage 栏下一般设置启动画面

        • 可以设置启动动画的类型,动画形式,logo,可以在Logos里添加自己想要的Logo进去,还可以改背景啥的。
        • 可以加入公司的logo,让美术设计一套漂亮的样式。
      • Other Settings

        • 在Identification栏下可以填写的Package Name 通常格式为com.公司名.项目名,Version版本号,和主栏设置的是一样的。还有BundleVersionCode代表的是内部查看的版本号,整数类型,值在版本迭代中需要越来越大。
        • 在Configuration栏下,可以修改Scripting Backend。可以改成IL2CPP模式,会将部分代码转化成c++,性能更快。但是打包时间会大幅度提升。
    4. 在Build Setting页面可以通过选中Export Project。这样导出的项目为一个Android项目而不是一个apk文件。

    5. 在设置好后,点击build,选择到一个文件夹就能打包成一个apk项目了。

    加载SDK

    步骤

    1. 把java代码生成的jar包导入到unity的Plugins文件夹中(自己创建)。

    2. 记住预处理指令

      #if UNITY_ANDROID
          // Update is called once per frame
          void Update()
          {
              
          }
      #endif
      
    3. 使用Unity提供了Android类

       //通过名字,获取一个java静态类
              AndroidJavaClass javaClass = new AndroidJavaClass("Test");
              //调用静态类里的静态方法
              javaClass.CallStatic("Test1","参数列表");
              //设置获取值
              javaClass.GetStatic<int>("test2");
              javaClass.SetStatic("test2",5);
              //获取java的一个对象
              AndroidJavaObject javaObj = javaClass.Get<AndroidJavaObject>("TestObj");
              //调用方法
              javaObj.Call("TestObjFun1", "参数列表");
              //设置获取值
              int a = javaObj.Get<int>("testObjValue");
              javaObj.Set("testObjVale", 5);
      
    4. 这样正常的使用jar里的东西就行了,需要注意的是必须要在安卓环境中才能执行,否则会报错,所以可以添加第二点的预处理指令进行操作。

    展开全文
  • Android 打包流程

    2020-04-04 21:27:44
    Android 打包流程 Ⅰ 起因 本来想好好琢磨琢磨写个开头,后来一想,做技术的哪来这么多讲究,直接开门见山。 和一些同行交流的过程中发现部分朋友实际上对 Android 打包流程基本没有比较清晰完整的概念,所以本文...

    Android 打包流程
    Ⅰ 起因

    本来想好好琢磨琢磨写个开头,后来一想,做技术的哪来这么多讲究,直接开门见山。 

    和一些同行交流的过程中发现部分朋友实际上对 Android 打包流程基本没有比较清晰完整的概念,所以本文主要聊一聊 Android 的打包流程,以及目前已有的或多或少可以与 Android 打包搭一点边的开源技术,互相学习。 

    更好的了解 Android 的打包流程,有助于我们做一些针对编译期的优化,包括但不限于提高打包速度(毕竟时间就是金钱,我的朋友),提高 Android 应用的 hack 难度增加安全性,减少 Android 安装包的体积,完成一些自动化的编码减少编码压力等。 

    以上这些在本文中,都会有简要的提及。希望可以对大家有一点帮助。 

    Ⅱ Apk 的组成结构

    本文脉络采用的是一个由结果反推至过程的流程。 在开始时,我们需要先弄明白,apk 文件也就是 Android 打包流程的产物,是一个什么类型的文件,它包含了一些什么内容。 弄清楚了这些,我们就可以带着目的性,去分析打包流程,可以更好的关注 apk 文件中的这些内容是在打包流程的哪个过程中产生,以及是如何产生的。

    众所周知,apk 文件本质上其实是一个 zip 包。想要知道其中包含了什么,改后缀直接解压便可以看到了。 这里笔者挑软柿子,解压了某个未经过加固或者其他手段加密的 Android 安装包文件,以下为结果截图:

    主要注意红色标注部分,这一些文件和文件夹是一个 Android 应用基本都具备的。而其他的一些文件和文件夹则是一些第三方库,或者是其他一些代码生成的。 接下来,依次大概介绍一下这些文件和文件夹的作用。

    2.1. AndroidManifest.xml

    这是 Android 应用的全局配置文件,它包含了这个应用的很多配置信息,例如包名、版本号、所需权限、注册的服务等。可以根据这个文件在相当程度上了解这个应用的一些信息。该文件目前状态是被编译为二进制的 XML 文件,可以通过一些工具(如 apktool)反编译后进行查看。 

    这里强烈安利大家升级一下 Android Studio 2.2 Preview,其新功能 Analyze apk是一个很不错的 apk 分析(~~hack 入门~~)工具。我们可以通过它直接反编译看到原始的 AndroidManifest.xml 文件,如下图。 

    2.2. assets 文件夹

    assets 文件夹用于保存需要保持原始文件的资源文件夹,开发过程中拖了什么到里面,打包完之后里面还是什么。一般用于存放音频,网页(帮助页面之类的),字体等文件。主要需要知道的点是,它与 res 文件夹的区分以及如何在应用中访问该文件夹的资源,如它可以有多级目录而 res 则只有两级。 

    2.3. dex 文件

    classes.dex 文件是 Android 系统运行于 Dalvik Virtual Machine 上的可执行文件,也是Android 应用程序的核心所在。项目工程中的 Java 源码通过 javac 生成 class 文件,再通过 dx 工具转换为 classes.dex,注意到我们这里有 classes2.dex 和 classes3.dex。这是方法数超过一个 dex 的上限,分 dex 的结果。分 dex 在 Android 5.0 之前需要开发者自行完成,5.0 后 dx 自带支持。dex 文件的数据结构不算复杂,如下图所示。目前一些热补丁有关的技术,主要便是对 dex 做各种处理。 

    2.4. lib 文件夹

    该目录存放着应用需要的 native 库文件。比如一些底层实现的图片处理、音视频处理、数据加密的库以 so 库的形式在该文件夹中。而该文件夹下有时会多一个层级,这是根据不同CPU 型号而划分的,如 ARM,ARM-v7a,x86等,如下图: 

    2.5. META-INF 文件夹

    该目录的主要作用是用于保证 APK 的完整性以及安全性。该文件夹下,主要有三个文件。如下图: 

    先说 MANIFEST.MF,这个文件保存了整个 apk 文件中所有文件的文件名 + SHA-1后的 base64 编码值。这也就意味着,MANIFEST.MF 象征着 apk 包的完整性。再说 CERT.RSA,这个文件保存了公钥和加密方式的信息。最后说 CERT.SF,这个文件与 MANIFEST.MF 的结构一样,只是其编码会被被私钥加密。这样一来每次安装时,通过该文件夹中的文件,就可以完成验证的过程。如果 apk 包被改变了,而篡改者没有私钥生成 CERT.SF,则无法完成校验。 

    2.6. res 文件夹

    顾名思义,该文件夹是资源文件夹。它里面存放的所有文件都会被映射到 R 文件中,生成对应的资源 ID,便于代码中通过 ID 直接访问。其中的资源文件包括了动画(anim),图像(drwable),布局(layout),常量值(values),颜色值(colors),尺寸值(dimens),字符串(strings),自定义样式(styles)等。 

    2.7. resource.arsc 文件

    这个文件可以说是所有文件中结构最复杂的。
    它记录了资源文件,资源文件位置(各个维度的路径)和资源 id 的映射关系。并且将所有的 string 都存放在了 string pool 中,节省了在查找资源时,字符串处理的开销。
    我们可以使用 Androdi Studio 2.2 Preview 中的新功能 Analyze apk (这个新功能用来分析 apk 非常好用,强烈推荐各位读者可以尝试一下)来看看它到底包含了些什么,一图胜过千言: 

    我们可以看到,首先是有个 package 可选,实际上 resource.arsc 是可以包含多个 package 的资源的。 然后可以看到一个 Resource Types 的列表。这里看到的是 drawable 的 type。 右边显示了有多少个 drawable 以及多少项 configurations,以及表的具体内容为 ID - Name - 各个维度的值(在这里即是资源的路径),通过这个,我们可以完成通过 id + 对应的 configuration 获取对应资源的操作。
    而后面要提到资源混淆的原理,就是修改这里各个维度的值,并修改对应 res 里面的文件夹以及文件名实现的。
    具体其完整的数据结构比较复杂,在这里就不展开说了,有兴趣的读者可以自行查阅信息,甚至写一个 parser 出来也是非常有意思的。 

    Ⅲ Android 打包流程

    在了解了 apk 文件的结构后,我们开始分析 Android 的打包流程。 

    3.1 资源

    Android 打包流程的第一步,是处理资源文件。
    在这个步骤中,起主要作用的是 aapt。
    刚刚提及的 AndroidManifest.xml, res 文件夹,resource.arsc 文件的生成都与其有关,简单来说,aapt 解析项目代码中的 AndroidManifest.xml,收集项目中 res 文件夹的资源文件及 xml 文件,对其做压缩以及编译的处理。在此过程中,分配了资源 id 并生成了 R.java 文件 以及 arsc 文件。 

    3.2 代码

    上一步得到了 R.java 文件后,将其与项目代码一起编译得到 .class文件,然后打包为 jar 包。这个过程中,还会有混淆代码这一步骤。之后,再通过 dx 工具,将生成的 jar 包与第三方库的 jar 包一起编译为 dex 文件。这个过程中,如果是 5.0 以前的系统且超过了 65535 方法数的限制,需要人为的分 dex,5.0 以后则由 dx 工具包办。 

    到这一步,实际上 apk 所需要的主要内容已经大致齐全了。只需要把上面生成的 AndroidManifest.xml,classes.dex,res文件夹,resource.arsc 打包进 apk,并且将项目工程中的 assets 以及 lib 目录一并放入,就有了一个未经签名的 Android 安装包了。 

    3.3 签名

    接下来还缺简单但是却关键的最后一步,那便是 apk 包的签名,这一步在之前对 META-INF 的介绍中,实际已有提及。只需要按步骤生成 MANIFEST.MF, CERT.RSA,CERT.SF 并放入META-INF 文件夹即可。 

    以上便是 Android 打包的基本流程,宏观来看实际并不复杂,但是其中的一些步骤展开来讲,却是很有内容的,比如 appt 对资源处理的那个部分,R.java 是如何生成的,resource.arsc 又是如何生成的,Android 是怎样完成对资源的获取的,这些内容笔者之后会继续整理分享。 

    Ⅳ 业内有关技术小结

    分析完流程之后,我们来看看目前业内有哪一些与编译有关的技术可以运用起来的。 

    4.1 apk 加固

    目前业内已经有很多 apk 加固的服务,这里提及最常见的一种加固方案。
    一个比较典型的加固流程如下图: 

    实际上是通过外包一层解壳 apk,将我们自己的 dex 文藏在加密 apk 的 dex 中。由于破坏了正常的 dex 结构,所以一般的反编译工具,如 apktool 并不能直接反编译 apk。但是如果了解了加密的方式以及方案,实际上要破解得到脱壳 dex 并不复杂,这只是一定程度上提高了 hack 的成本,不过针对一般的 hack 依然很有效。 

    4.2 快速多渠道包

    由于国内有着数不胜数的 Android 应用市场,所以越来越多的渠道包成为了每一个应用的必须。
    在之前,开发者一般通过 AndroidManifest.xml 中的meta 信息来区分渠道。在了解了打包流程后,大家应该明白,一旦改变了 AndroidManifest.xml 就意味着要重新打包。
    ts(多渠道包的时间) = t (打每个包的耗时) * n (n为渠道数量), n 在大到一定程度后,ts 就会变得非常的大。这显然是让开发者十分痛苦的。
    要解决这个问题,实际上需要攻破的是,META-INF 的完整性校验机制。
    目前业界比较常用的两种方案是:
    1. META-INF 下添加空文件不会破坏签名(文件名为渠道号,若 Google 更改签名机制,有可能失效)
    2. apk 文件末尾写入信息(本质是利用了 zip 文件可以添加 comment 数据结构的特点) 

    这两种改动方案都不会导致 MANIFEST.MF 文件的改变,也就不需要再次打包,只需要简单的读改文件即可。为广大开发者节省了上线前漫长的等待渠道包的时间。 

    4.3 资源混淆

    资源混淆通过混淆资源路径名以及资源文件名,比如: 

    res/drawable/icon -> r/s/a

    这样不但可以减少安装包的体积,一定程度上也可以提高破解难度。
    该方案目前业内也有两种实现,但是原理基本一致。入手点皆为resource.arsc。
    第一种方案是修改我们刚刚提及的 aapt,使得在生成 resource.arsc 的过程中,就修改掉项目中资源的名称,实现了资源的混淆。
    第二种方案则是在打出 apk 包之后,读入已生成的 resource.arsc 文件,进行混淆,改写,同时修改掉 res 文件夹下的资源名称,完成混淆。最后再重新打包得到混淆资源后的新 apk 文件。 

    既可以减小体积,又可以一定程度增加被 hack 的难度,如果还有没有用起来的同学,可以尝试用起来了。 

    4.4 热补丁

    由于移动平台的特性,移动应用版本的升级率并不高。这种时候,如果应用应用也可以像网页那般动态部署,无疑可以带来非常大的优势,比如在线修复 bug,小版本的升级,临时特性的上线等。
    目前业界已经有比较多的技术方案了,在这里我们提及两种比较有代表性的方案。
    1. 通过 native hook 的方式,替换 class 中的方法实现完成热补丁。
    2. classloader 加载新 dex 覆盖原有 class 完成替换的方案。
    因为实际上每种方案都并非几句话可以讲解清楚,本文主要目的也只是做个大概介绍,若读者有兴趣可以谷歌后进一步研究,这里就不具体展开讲了。 

    实际上还有一些技术,比如使用 Anotation 自动生成代码,buck exopackage 提高打包速度等。有兴趣的话,可以自行查阅,相信可以学到不少知识的。 

    展开全文
  • 安卓打包流程一篇文章就够了

    千次阅读 2020-04-24 18:02:49
    本文会带你深入了解安卓打包流程的各个细节。更重要的是,熟悉安卓打包流程会让你对apk瘦身、参数化构建、资源文件处理有更深的理解。
  • Android apk 打包流程

    千次阅读 2022-03-22 22:25:27
    1.apk打包 通常情况下,在开发过程中打包APK是一件很简单的事,主要可以通过两种方式: ①用Eclipse或者Android Studio集成开发环境直接生成APK; ②使用Ant工具在命令行方式下打包APK。...2.打包流程 ①打包资.
  • Android APK打包流程

    2021-12-13 15:48:30
    在总结 apk 的打包流程之前,先要了解一下一个 apk包 究竟有哪些文件: classes.dex 文件:java源文件经过编译和转换后生成的二进制的字节码文件。 resource.arsc 文件:经过 aapt 编译后的二进制的资源文件。 ...
  • 【UE4】4.26安卓打包流程

    千次阅读 2022-01-24 10:16:47
    前言: 本教程适用于UE4.26。文章最后部分有常见问题解决与性能优化。 教程开始: 1.下载 Android Studio最新版-默认安装(请先关闭UE相关程序) ...展开System Settings--Android SDK勾选4.4以上的任一个和NDK21.
  • ======================================================原文链接https://juejin.im/entry/58b78d1b61ff4b006cd47e5b,如侵删======================================================我们平时在开发...Android Stu...
  • 1.首先打开android studio 按照下图依次选择android/app/java/java/MainApplicaion 然后修改 MainApplication.java的 @Override public boolean getUseDeveloperSupport() { return ture;} 改为return false;//...
  • 安卓打包流程-nodejs

    千次阅读 2020-06-08 17:29:37
    1.安装nodejs 2.nodejs命令行执行: npm install -g ionic cordova 版本查看指令: node --version npm --version nodejs,使用淘宝源 ...Angular 环境搭建 ...安装Android Studio 一、环境 1.ionic 5,angular 8
  • Ionic5项目android打包流程1、apk打包2、生成jks(Java Key Store)文件3、生成签名的apk文件4、apk文件优化与重命名 ionic开发好应用以后,需要先进行打包、签名、优化,才能在各大应用商店中进行发布,本文就apk的...
  • 1.使用终端命令生成key(mac环境): ...2.在Android目录下创建key.properties : 3.app的build.gradle中配置: ​​​​def keystorePropertiesFile = rootProject.file("key.properties") def keys.
  • Android 打包发布流程

    2021-06-02 16:29:23
    生成正式签名的APK文件之前一直都是通过Androidstudio来将程序安装到手机上,而它背后实际的工作流程是,Androidstudio会将程序打包成一个apk文件,然后将这个文件传输到手机上,最后再执行安装操作。Android系统会...
  • Android项目结构、编译与打包流程

    千次阅读 2022-04-05 20:47:41
    #.Android项目结构 ###.总的结构 ###. /src/main下的结构 res: 存放各类资源 res/drawable:理论上对应低分辨率图片,但一般此文件夹并不放图片文件,图片文件放在下面两个文件夹中。 一般把自定义的...
  • 二、打包流程 Android编译打包过程主要分为如下7个步骤: 1. aapt过程 使用文件aapt/aapt2打包res目录资源文件, 生成R.java、resources.arsc和res目录。 2、aidl生成Java文件 AIDL是Android Interface Definition ...
  • Android 打包流程之aapt打包资源文件

    千次阅读 2019-02-27 11:33:44
    Android应用最终是以apk的形式放在手机上安装并运行的,而负责将资源文件和代码进行打包的工具就叫appt,全称Android Asset Packaging Tool,翻译过来就是Android资源打包工具,是Android打包流程中不可或缺的一环。...
  • 参考: Android应用程序(APK)的编译打包过程
  • 熟悉Android打包编译的流程

    千次阅读 2019-07-05 17:27:34
    从事Android高级研发,怎能不知道Android的打包流程呢? 今天就为大家讲解Android打包的流程: Android 构建系统编译应用资源和源代码,然后将它们打包成可测试、部署、签署和分发的 APK。 一般使用 Android Studio...
  • D:\Program\Android\'Android Studio'\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 路径中间有空格也会报错的,用下面这个就可以了.
  • 一、APK 文件结构、 二、APK 打包流程、 三、APK 安装流程、 四、安卓虚拟机、
  • 一、Android 中的 Java 源码打包流程、 1、Java 源码打包流程、 2、字符串常量池、 二、Android 中的字节码操作方式、

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,435
精华内容 15,774
关键字:

安卓打包流程