精华内容
下载资源
问答
  • Android项目构建Apk包流程

    万次阅读 2018-01-31 14:51:03
    好久都没有写博文了,主要是现在的工作重点是前端开发了,最近在学习webpack、weex等前端知识,说起weex,一直都在填坑中,目前还没爬出来了!...所以,本文再次详细描述下,Android项目构建Apk包流程。 一. 前...

        好久都没有写博文了,主要是现在的工作重点是前端开发了,最近在学习webpack、weex等前端知识,说起weex,一直都在填坑中,目前还没爬出来了!    好了,回归到本文的主题。之前也写过有关Android打包apk方面的博文(使用Ant打包Apk打包Apk),但是都不够细致,比较笼统的介绍有关Apk打包的过程。所以,本文再次详细描述下,Android项目构建Apk包流程。

    一. 前言

        当我们使用Android Studio开发Android时,点击运行按钮,就会自动生成一个Apk文件,至于这个Apk是如何生成的,我们并不知道。而这个Apk中包含哪些东西呢?我们还是可以知道的。怀着好奇的心态,我们先来解压一个Apk,看看他的庐山真面目。

        随便找一个Apk文件,修改它的后缀名为rar或者zip(其实Apk格式的文件就是一个压缩文件)。如下图所示,

    其中 app-debug.rar文件是app-debug.apk修改后缀名后得到的,而app-debug文件夹是app-debug.rar文件解压后生成的,

    上面这张截图是app-debug文件夹中的东东,可以看到大致包含5部分:

    1. META-INF 文件夹,该文件夹中包含该Apk的签名信息以及该Apk中所有文件的哈希值的计算结果;

    2. res文件夹,存放的是资源文件,例如动画、颜色、图片和布局等资源;下面给出一张res文件夹的中文件列表的截图,

    3. dex文件,该文件是适用于Dalvik虚拟机的字节码文件,是通过dx工具将class文件转化生成的;

    4. resources.arsc,它是一个资源索引表,是由aapt根据res资源文件转化生成的二进制文件;(下面会继续补充该文件的作用);

    5. AndroidManifest.xml,这个文件,我们都知道,这是Apk的清单文件,配置了各种权限以及注册Activity、service等组件。(这个文件是压缩处理过的,直接打开是乱码,需要借助其他工具)

    二. 打包。

        首先来看一张Google官方给出的Apk构建流程,如下图所示,

    根据上图,就能大致得出构建Apk的整个流程,

    1. aapt工具将res中的资源生成 R.java文件和resources.arsc文件;

    2. 如果有aidl,那么aidl工具会将aidl接口转化为java类;

    3. javac将所有的java类编译为class文件;

    4. 如果有代码混淆,则会加入代码混淆;

    5. dx.bat将所有的class文件转化为classes.dex文件;

    6. ApkBuild将所有的资源(assets、so、jni)、resources.arcs以及上一步生成的dex文件,打包生成一个apk文件;

    7. 对上一步生成的apk进行签名;

    8. 使用Zipalign对签名后的apk进行优化。

    下面详细分析下各步骤的实现细节。

      2.1. 资源打包。(这一部分引用了网上一位博主的内容,详细连接见下文)

    开发app时,需要代码和资源。最终生成的apk中代码转换为了dex文件,那么apk文件中的资源是否还是app开发时那些资源文件呢?或者说这些资源文件是否发生了什么变化?引用老罗一张关于资源打包过程以及查找的图:

    从上图可以看出:
    1). 除了assets和res/raw资源被原装不动地打包进APK之外,其它的资源都会被编译或者处理.xml文件会被编译为二进制的xml,所以解压apk后,无法直接打开xml文件。
    2). 除了assets资源之外,其它的资源都会被赋予一个资源ID。
    3). 打包工具负责编译和打包资源,编译完成之后,会生成一个resources.arsc文件和一个R.java,前者保存的是一个资源索引表,后者定义了各个资源ID常量,供在代码中索引资源。
    4). 应用程序配置文件AndroidManifest.xml同样会被编译成二进制的XML文件,然后再打包到APK里面去。
    5). 应用程序在运行时最终是通过AssetManager来访问资源,或通过资源ID来访问,或通过文件名来访问。

    在生成的apk中,只有assets和res/raw资源被原装不动地打包进apk。其它的资源都会被编译或者处理。可以使用如下命令查看apk中的文件列表:
    aapt l -v apkfile
    将apk直接解压后,会发现xml都打不开,提示格式不对,因为其已经变为二进制xml了。另外PNG等图片也会进行相应的优化。还有就是多了一个resources.arsc文件。
    更多详细的描述,可以查看Android6.0之App中的资源Rsources.arsc详解这篇文章。

      2.2 aidl处理。

        aidl,全名Android Interface Definition Language,即Android接口定义语言。是我们在编写进程间通信的时候,定义的接口。输入:aidl后缀的文件。输出:可用于进程通信的C/S端java代码,位于build/generated/source/aidl。

        更多有关aidl的描述,请参考这篇Android IPC之AIDL浅谈

      2.3 生成class文件。

        这一步是将整个代码中的所有的java文件通过javac编译为class文件.

      2.4 生成dex文件。

        通过dex工具将项目中所有的class文件(也包含第三方库中的)生成dex文件。

      2.5 生成Apk文件。

        通过apkbuilder工具 将所有的资源(res和assets)、resources.arsc和dex文件(可能是多个)打包生成Apk文件。

      2.6 Apk签名。

        上一步生成的Apk文件是没有签名的,也就是说,是无法安装到Android设备中的。android的应用程序需要签名才能在android设备上安装,签名apk文件有两种情况:一种是在调试程序时进行签名,使用eclipse开发android程序时,在编译调试程序时会自己使用一个debug.keystore对apk进行签名;另一种是打包发布时对程序进行签名,这种情况下需要提供一个符合android开发文档中要求的签名文件。签名的方法也分两种:一种是使用jdk中提供的jarsigner工具签名;另一种是使用android源码中提供的signapk工具,它的代码位于android系统源码build\tools\signapk目录下。

      2.7 Apk优化。

        这一步需要使用的工具为zipalign,它位于android-sdk\tools目录,源码位于android系统源码的build\tools\zipalign目录,它的主要工作是将spk包进行对齐处理,使spk包中的所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时速度会更快,验证apk文件是否对齐过的工作由ZipAlign.cpp文件的verify()函数完成,处理对齐的工作则由process()函数完成。

        以上就是构建APk的全过程。相信看到这里,小伙伴们对Apk的构建过程更清晰明了了!

    三. 补充。

    3.1 aapt。

     

    aapt----Android Asset Packaging Tool,即Android资源打包工具,位于SDK的build-tools目录下。该工具的作用是将Android中的res资源生成R.java文件以及将资源文件生成一个二进制文件(resources.arsc)。在打包Apk时,需要使用到该工具。

        其中,R.java文件,相信开发Android的小伙伴们都知道,每当我们创建一个资源例如一个字符串,aapt就会在R.java文件中自动生成一个常量(ID),我们在使用某资源时,需要引用该资源对应的R.java文件的资源ID。下面是R.java文件的部分代码截图,

        resources.arsc,是aapt工具编译资源时生成的重要文件。App资源能根据配置的变化,索引到相应的资源都要依赖它。例如Android设备语言,屏幕设备尺寸不同时,app通过同样的ID但却能找到不同的资源进行显示。因为 resources.arsc是二进制文件,所以解压后,直接打开是乱码。

    总结下:

        R.java文件,定义了各个资源ID常量,在使用时需要使用该ID;resources.arsc,保存的是一个资源索引表。

    3.2 Dalvik虚拟机。

    Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。

      当你的应用安装在手机上后,应用程序的代码将会以字节码保存,每次冷启动一个应用的时候,Dalvik虚拟机将字节码转换为机器码,然后交给硬件来执行;每次冷启动的时候,Dalvik虚拟机就要重复将字节码转换为机器码的动作,而在这个阶段,我们只能等待,静静的看着应用启动,虽然每次都耗时较长,但是不会占用过多的内存。因此在Android4.4发布时,谷歌推出了新的Android虚拟机ART虚拟机,ART-Android Runtime,即Android运行时。ART虚拟机也是将字节码转换为机器码,但是它和Dalvik虚拟机的工作模式不一样,在ART模式下,当你在安装应用的时候,它就将字节码转换为机器码,并且保存起来,当在启动一个应用的时候,就直接运行这个机器码,因此,启动速度就比较快。

    有关Dalvik和ART的介绍,可以参考这篇文章 IT之家学院:认识Android中的Dalvik与ART虚拟机

      Java虚拟机-JVM和Dalvik虚拟机的区别。

        1). Java虚拟机运行的是Java字节码(保存在class文件中),Dalvik运行的是Dalvik字节码(由Java字节码转化而来,打包到DEX文件中)。

        2). Dalvik可执行文件更小。 
    由于Android SDK中的dx文件对常量池进行了压缩,使得相同字符串、常量在DEX文件中只出现一次。

        3). Java虚拟机与Daivik虚拟机架构不同 。
    Java虚拟机基于栈结构,资源开销大,Dalvik虚拟机基于寄存器结构,数据由寄存器直接传递,这样的方式比基于栈结构的方式快得多。

     

    以上内容参考了理解Android虚拟机体系结构

    推荐一篇有关安卓手机为什么越用越卡越慢 问题原因探究

    欢迎大家关注我的公众号

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • APK包结构及打包流程 先来介绍一下安卓apk包结构的目录 实际上,一个APK文件就是一个.zip格式的压缩包,我们可以用解压缩工具打开任何一个APK文件,由于代码混淆和加密,通过普通解压缩工具打开里面的文件或目录会...

    APK包结构及打包流程

    先来介绍一下安卓apk包结构的目录
    实际上,一个APK文件就是一个.zip格式的压缩包,我们可以用解压缩工具打开任何一个APK文件,由于代码混淆和加密,通过普通解压缩工具打开里面的文件或目录会看到各种乱码。一个典型的apk文件包含以下内容:

    Android应用程序APK文件的结构图
    在这里插入图片描述

    • assets目录 存放需要打包到APK中的静态文件
    • lib目录 程序依赖的Native库
    • res目录 存放应用程序的资源
    • META-INF目录 存放应用程序签名和证书的目录
    • AndroidManifest.xml 应用程序的配置文件
    • classes.dex dex可执行文件
    • resources.arsc 资源配置文件

    - AndroidManifest.xml

    Android应用的配置清单文件,它向Android系统介绍了这个应用的很多配置信息,系统可以根据这个文件在相当程度上了解这个应用的一些信息。该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具(针对该文件)或apktool工具进行反编译(反编译整个apk)。

    - META-INF目录

    META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。没有签名的应用是不被系统认可的,也无法安装到手机中。Android SDK在对APK进行打包的时候,会把APK中全部文件的完整信息保存到这里,这样应用在安装的时候会进行完整性校验,确保APK的文件不会被篡改,大大提升了应用和系统的安全性与完整性。META-INF目录下有CERT.RSA、CERT.SF和MANIFEST.MF这几个文件,其中的CERT.RSA文件记录了开发者的私钥对APK签名后的信息,MANIFEST.MF文件则保存了整个APK中所有文件的SHA-1进行base64编码后的值,CERT.SF则与MANIFEST.MF差不多,包括了后者所有的信息,然后又加入了MANIFEST.MF文件的SHA-1并base64编码的值。

    - res目录

    存放各种资源文件的目录。这个目录中的所有文件,最终会被映射到Android工程中的R文件中,生成对应的int型的ID,在程序中访问这些资源文件的时候,直接使用资源的ID就能进行调用了。
    res目录下还包含着多个子文件夹:anmi中存放着动画文件;drawable则存放着一些图片资源;layout中存放的是布局文件;menu则是自定义菜单的项;raw目录中的文件则是可以直接复制到设备中的文件,不会被编译;values中存放着一些特殊的值——colors.xml记录的是你自定义的颜色,dimens.xml记录着你自定义的尺寸,strings.xml则是你自定义的字符串常量值,styles.xml定义了一些样式。

    - lib目录

    这个目录中存放着应用依赖的native库文件,这些以.so结尾的文件是用C或者C++语言编写的,一个简单的Android应用可能并不需要这些库,但一个功能全面而又追求性能的应用是不可能无视这个目录的,譬如图片处理、网络处理、音视频处理等一些对性能要求很高的功能,单纯依靠Java会十分吃力,性能更加强大而且更加接近底层的C/C++就是更合适的选择了。
    根据手机CPU的架构,lib库大体上可以分为4种:ARM、ARM-V7、MIPS和X86,分别对应着4种CPU架构,在lib目录里则分别是armeabi、armeabi-v7a、mips和x86一共4个目录。每个目录中的.so库名字都是一样的,实际上功能也是相同的,它们只是为了适配不同架构的CPU而存在。实际上,市面上的手机几乎全都是ARM架构的,所以大多数情况下我们只需要有armeabi和armeabi-v7a两种类型的库就足够了。

    - assets目录

    跟res目录有点相似,但实际上二者还是有区别的。res目录中的文件会映射到R文件中,每个资源文件都有自己的ID,而assets中的文件则直接通过访问文件的地址来使用AssetManager类进行访问,而且assets目录你可以添加任意深度的子目录,这一点会比较方便管理和归类文件。相比较之下,res目录目前不能支持更深级的子目录。

    - classes.dex文件
    classes.dex是java源码编译后生成的java字节码文件(首先是java文件通过jdk编译成字节码文件然后经过dex编译成classes.dex)。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容 的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。Android模拟 器中提供了一个dex文件的反编译工具,dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。

    对比普通java程序和安卓程序差异
    普通java程序 java虚拟机 java字节码(class) 基于栈
    安卓程序 Davlik虚拟机 Dalvik字节码(dex) 基于寄存器

    - resources.arsc
    编译后的二进制资源文件的索引,记录了资源文件(即res目录中的文件)和资源文件ID的映射关系,这样程序运行的时候就可以根据资源的ID获取到相应的资源了。

    APK打包流程
    网上找的图:
    在这里插入图片描述
    谷歌官方文档的图及介绍:在这里插入图片描述
    一个典型的Android应用模块的构建过程遵循以下一般步骤:

    1、编译器将您的源代码转换为DEX(Dalvik可执行文件)文件,其中包括在Android设备上运行的字节码,以及所有其他内容都转换为已编译资源。2、APK打包器将DEX文件和已编译的资源合并到一个APK中。但是,必须先对APK签名,然后才能将您的应用安装和部署到Android设备上。
    3、APK Packager使用调试或释放密钥库对您的APK进行签名:
    a、如果要构建应用程序的调试版本,即仅打算进行测试和性能分析的应用程序,则打包程序将使用调试密钥库对应用程序进行签名。Android Studio使用调试密钥库自动配置新项目。
    b、如果您要构建要从外部发布的应用程序发行版本,则打包程序将使用发行密钥库对应用程序进行签名。
    4、在生成最终APK之前,打包程序会使用zipalign工具优化您的应用,以在设备上运行时使用更少的内存

    Debug包和Release包对比

    再来看看debug包和release包对比,话不多说,先上图
    在这里插入图片描述
    在这里插入图片描述
    左边是release包,右边是debug包,可以看到,一样的打包配置,debug包要比release包要大0.3mb。主要大在dex文件和res文件夹,其他都一样

    我们继续看看dex文件区别在哪里:
    在这里插入图片描述
    有android、androidx、kotlin、test四个文件夹大小不一样,其他文件夹大小均一样,我们再来看看android文件夹
    在这里插入图片描述
    我们可以看到,有定义方法的文件夹,他们的大小就是不一样的,再往里看
    在这里插入图片描述
    可以看到support包下的v4、v7等文件夹大小均不一样,再往下看
    在这里插入图片描述
    打开对比看看这个类的字节码
    在这里插入图片描述
    左边的debug包的字节码行数要比右边的release包字节码行数要多100多行(至于为什么会是这样,,我猜测是debug模式下要多一些调试信息吧)

    我们再来看看res文件夹,drawable-xxx-v4的文件夹大小不一样在这里插入图片描述
    再往下看,发现debug包里面ic_launcher_background图片文件大小和release包里面ic_launcher_background大小不一样,一个是2.75kb,一个是767b,换算一下正好是drawable-xxhdpi-v4文件夹大小的区别,,其他几个drawable文件夹也类似,至于为什么谷歌官方会把debug包和release包相同的文件用不同的大小,我也不得而知,我猜测是release包进行了压缩处理之类

    在这里插入图片描述
    结论毫无疑问,相同代码配置情况下,debug包会比release包大一点,应该是debug包包含了一些调试信息,而release包进行了一些优化,以期达到代码最小和速度最优

    摘自此篇
    Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力。
    Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信 息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。

    (1) debug程序通常比release程序要慢,尤其是处理视频方便release要比debug快很多。在release模式对程序进行调试的时候经常会遇到变量虽然初始化了,但是在查看其值的时候却发现是一个随机的数并不是初始化的值,有时候在对变量进行监视的时候了,会出现找不到变量的情况。
    (2) debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc, 而release的赋值近似于随机。在声明变量后马上对其初始化一个默认的值是最简单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到。debug方式下数组越界也大多不会出错,在release中就暴露出来了,这个找起来就比较难了。
    (3) 只有DEBUG版的程序才能设置断点、单步执行、使用 TRACE/ASSERT等调试输出语句。REALEASE不包含任何调试信息,所以体积小、运行速度快。

    至此,我们对apk的研究结束

    展开全文
  • Androidstudio自定义打包出来的apk包

    千次阅读 2017-03-13 14:35:01
    自定义打包出来的apk包
    在buildTypes里面加 android.applicationVariants.all {
                variant ->
                    if (variant.buildType.zipAlignEnabled) {
                        variant.outputs.each { output ->
                            def outputFile = output.outputFile
                            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                                def fileName = ApkName + "-" + variant.name + "-V" + getProperty('versionName') + "-" + getProperty('versionCode') + "-" + buildTime() + ".apk"
                                output.outputFile = new File(outputFile.parent, fileName)
                            }
                        }
                    } else {
                        variant.outputs.each { output ->
                            def outputFile = output.outputFile
                            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                                def fileName = ApkName + "-" + variant.name + "-V" + getProperty('versionName') + "-" + getProperty('versionCode') + "-" + buildTime() + "-unaligned.apk"
                                output.outputFile = new File(outputFile.parent, fileName)
                            }
                        }
                    }
            }

    展开全文
  • 使用apk-parser解析apk包

    千次阅读 2018-03-21 14:37:16
    项目里需要用java代码解析出apk包的版本号、版本名称等信息,一开始用的AXmlResourceParser工具解析的,结果发现解析出错 java.lang.ArrayIndexOutOfBoundsException: 128 at android.content.res.StringBlock....

    项目里需要用java代码解析出apk包的版本号、版本名称等信息,一开始用的AXmlResourceParser工具解析的,结果发现解析出错

    java.lang.ArrayIndexOutOfBoundsException: 128  
       at android.content.res.StringBlock.getShort(StringBlock.java:231)  
       at android.content.res.StringBlock.getString(StringBlock.java:91)  
       at android.content.res.AXmlResourceParser.getName(AXmlResourceParser.java:140)  
       at test.AXMLPrinter.main(AXMLPrinter.java:56)

    网上查了一些方案 都说是AXMLPrinter2.jar需要修改,改了之后还是不行。最终发现了一个纯Java实现的Apk解析Lib,也是现存的功能最强的Apk Parser。在不需要aapt等工具的前提下,可以:

    1. 查看Apk 的元信息,如标题、图标、SDK版本、权限、支持的语言等
    2. 解析Apk 中任意的Binary Xml 文件,翻译成可读的Xml 文本
    3. 查看Apk Dex 文件中包含的Class 信息
    4. 验证Apk 签名,查看签名的信息

    使用方法:

    添加依赖

    <dependency>
        <groupId>net.dongliu</groupId>
        <artifactId>apk-parser</artifactId>
        <version>2.5.3</version>
    </dependency>

    代码里调用

    public static void main(String[] args) {
    		try {
    			ApkFile apkFile = new ApkFile(new File("C:\\Users\\Administrator\\Desktop\\app-release.apk"));
    			ApkMeta apkMeta = apkFile.getApkMeta();
    			System.out.println(apkMeta.getLabel());
    			System.out.println(apkMeta.getPackageName());
    			System.out.println(apkMeta.getVersionCode());
    			System.out.println(apkMeta.getVersionName());
    			/*for (UseFeature feature : apkMeta.getUsesFeatures()) {
    				System.out.println(feature.getName());
    			}*/
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}

    效果

    唐宋钢铁
    tenx_yanglin.tenx_steel
    1
    1.0
    app-release.apk

    附上apk-parser的GitHub地址(https://github.com/hsiafan/apk-parser

    展开全文
  • APK 名修改工具

    千次阅读 2020-08-20 14:38:50
    APK 名修改工具。 依赖 python lib lxml argparse 不止要安装python依赖库,你还需要预先安装java运行库用来运行apktool和signapk。 如何使用 下载这个储存库 安装python,python的依赖库,java运行时库 运行命令...
  • android加固apk包,并防止apk被二次打包

    千次阅读 2015-05-20 02:04:19
    自行线下加密apk包,加密dex文件,并做了防二次打包处理。
  • APK打包流程

    千次阅读 2019-04-28 21:58:41
    本文将讲述Android APK的结构和打包流程。
  • 从源码到apk——apk打包过程

    千次阅读 2018-04-07 10:09:42
    从源码到apk——apk打包过程Android程序是怎么从源码变成可以安装使用的apk的流程官方版详细版上面就是一个关于构建过程的一个典型的流程图。aapt(AndroidAssetPackagingTool)给你的Activity提供所需的资源文件,如...
  • webapp打包为Android的apk包的一种方法

    千次阅读 2020-06-24 19:16:52
    关于如何打包为Android的安装包,总结了下其中的一种方法,使用cordova把webapp打包为apk包。 先看下在电脑web浏览器上的运行效果: 首先需要安装cordova。 假设已经具备的nodejs是环境,可以执行npm下载安装。...
  • Android apk打包命名规则

    千次阅读 2018-11-12 14:21:56
    摘要:前言在日常的开发过程中,许多刚入行的开发者在apk打包命名、应用迭代版本的档案留存管理上都比较混乱——产生这些问题的原因无外乎以下两种:一是之前没有相关的操作经验、头尾不能兼顾;一是公司没有制定对应的...
  • Android APK打包流程

    千次阅读 2019-07-16 18:08:27
    今天主要讲一下Android程序的生成步骤,即Android打包成APK的流程。 通常情况下,在开发过程中打包APK是一件很简单的事,主要可以通过两种方式: 用Eclipse或者Android Studio集成开发环境直接生成APK; 使用Ant...
  • 最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程。流程概述: 1、打包资源文件,生成R.java文件 2、处理...
  • Android 使用dnSpy反编译apk包

    千次阅读 2019-10-22 17:52:04
    对于一些未进行代码混淆和加密措施安卓程序(apk),可以通过反编译软件对apk包内源码进行查看,因此对于开发过程中最好使用代码混淆对代码进行加密,防止被反编译。 使用dnSpy反编译apk包过程 1、将安卓程序安装包...
  • 谷歌弃用APK包格式,转而使用AAB格式

    千次阅读 热门讨论 2021-07-11 11:36:14
    近日,谷歌官方宣布:自 2021 年 8 月起,Google Play 将要求开发者以 Android App Bundle (以下简称 AAB)格式发布新应用,该格式将取代 APK 成为标准的Android应用发布格式。...在制作APK包的时候,通过Android SDK
  • AndroidStudio 如何修改Apk包

    千次阅读 2020-05-11 16:14:47
    修改Apk包名工有两个地方需要修改 1.AndroidManifest.xml 修改 package = “你的包名” 2.修改build.gradle 下的 applicationId ‘你得包名’
  • Unity打包后的APK包反编译

    千次阅读 2015-06-08 14:47:28
    笔者使用的是apktool,首先在网上下载...在Dos窗口下,先cd到apk包所在目录,输入“apktool d apk包名.apk” 就可以解压包了,解压之后的目录结构为 所要看的代码在assets\bin\Data\Managed\Assembly-CSharp.dll
  • APK,全称Android Application Package,即Android应用程序,是Android系统使用的一种应用程序文件格式,它的作用是将Android程序和资源整合在一起,以便Android程序能在Android设备上正常运行。简单地说,...
  • Unity mono apk包和 l2cpp apk包区别

    千次阅读 2019-03-20 12:17:49
    环境Unity2018.2.15 资源代码是一模一样的 ...原始的工程数据一样 左边是 mono 解开之后 右边是 l2cpp 解开之后 从结果上看。 运行时的支持库是不一样的。 mono 用的是 lbmono.so库 l2cpp 用的是li...
  • Android apk包生成二维码给他人体验

    千次阅读 2017-08-29 16:38:46
    Android apk包生成二维码给他人体验
  • 怎么用unity提取APK包的资源??或者求一个提取UNITY APK包资源的工具。。。
  • 比如一个工程项目有多个模块A,B,C,每个模块各自有自己的APK生成,其中A的APK需要调用B,C的APK,那么最后整合的时候我们的问题就来了,如何才能把这多个APK打包成一个APK呢? 我们举例说明: 假如有两个APK:...
  • 用户安装apk的方式有多种,主要可以通过应用商店,ADB install或者是直接点击apk包到安装界面进行安装,在安装过程中,设备会复制APK安装包到/data/app目录下,解压缩并扫描安装包,同时向资源管理器注入APK资源,...
  • PHP上传apk后自动提取apk包的信息

    千次阅读 2013-11-21 15:40:28
    为了方便,上传APK后由系统自动提取APK文件的相关信息,比如:apk包名、产品名称、版本信息、APK Code、程序大小、ICON等。 起初处理方式 通过命令:java -jar AXMLPrinter2.jar AndroidManifest.xml > cmdAfter....
  • 安卓APK打包签名

    万次阅读 2018-09-08 11:52:54
    然后输入keytool -list -v -keystore Utown.jks(钥匙名字) 输入我们之前设置的密码就可以得到信息了: /*直接通过APK获取秘钥的签名*/ cmd中执行keytool -printcert -jarfile xxx.apk 打包提示Please select at ...
  • apk包反编译

    千次阅读 2011-08-25 23:42:27
    在Android的学习过程中,看到很多优秀的软件,很多只有apk包,怎么更好的学习呢,下面介绍apk包的反编译方法,仅供Android学习使用。 1、apk简介: Apk 是Android 安装包的扩展名,一个Android 安装包包含了与某个...
  • 微信中不能下载apk包的问题

    千次阅读 2018-06-13 12:03:42
    现在微信分享的功能很多,从分享的链接下载apk安卓包是很正常的,但是微信不让下载apk包,只能通过浏览器来下载,但是这要给用户一个提示吧,不然用户不知道 下面我们来实现,引导用户通过浏览器来下载apk包 看下...
  • APK 打包:debug模式安装问题

    千次阅读 2019-06-14 09:52:07
    本文主题主要解决平时开发同事,给客户发送debug模式的APK安装包,导致客户无法安装应用问题。 apk打包时分俩种模式:release模式发布版本,debug...的方式安装debug模式。其他方式不能安装,如:直接复制到SD中...
  • 1 apk的上传 我选定的apk包大写都是20 M 左右  nginx配置 上传限制 client_header_buffer_size 4; client_header_timeout 60; client_body_timeout 60; large_client_header_buffers 16 512k; client_bo
  • CMD控制台命令安装apk包

    千次阅读 2018-08-07 08:58:48
    首先打开模拟器,然后进入控制台执行命令 一、切换到adb.exe目录(例如D:\adt\adt-bundle-windows-x86-20140321\sdk\platform-tools) 1. d: 2. cd D:\adt\adt-bundle-...二、安装APK包(包的路径 D:\adt\360buy...
  • android 插件化动态加载apk包(插件apk不需要安装) 本案例是基于大神的基础实现的,大神项目源码:https://github.com/houkx/android-pluginmgr/本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 248,574
精华内容 99,429
关键字:

apk包