首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Apk瘦身方案1——R.java文件常量内联

R.java 文件结构 R.java 是自动生成的,它包含了应用内所有资源的名称到数值的映射关系。...先创建一个最简单的工程,看看 R.java 文件的内容: R文件生成的目录为app/build/generated/not_namespaced_r_class_sources/xxxxxDebug.../processXXXXDebugResources/r/com/xxx/xxx/R.java R.java 内部包含了很多内部类:如 layout、mipmap、drawable、string、id...如果我们采用组件化开发或者在工程里创建多个 module ,你会发现在每个模块的包名下都会生成一个 R.java 文件。...我们可以看一下,这个是app module下的R.java 这个是module下的R.java 可以很明显发现app下是常量,library下是静态的变量 在编译期间获取索引常量值有很多种方法

93911
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    新版Android Studio3.6找不到R.java怎么处理

    博主第一次安装Android Studio 3.6版本的时候就找不到R.java文件,于是在网上找个各种方法,但是都没能解决问题。 ?...注意:本博文是针对R.java找不到但是不会出现红色报错标识的情况,如果出现红色报错的请不用看本文剩余部分啦! ?...3,使用了全局搜索(按两次S键)还是找不到R.java 解决方法: 其实,找不到也没关系,不需要硬是得找出来才罢休。...至少目前我还没有到非得打开R.java文件查东西的地步,在创立组件和主Java文件连接的时候用R.xxx.xxx的方式就行了。...所以本文只是想告诉朋友们可以先放一放找不到R.java的问题,因为暂时用不着,没有太大影响~ 到此这篇关于新版Android Studio3.6找不到R.java怎么处理的文章就介绍到这了,更多相关Android

    1.6K20

    Android学习路径(两)项目文件本身使用场景和文件演示

    大家好,又见面了,我是全栈君 1.src文件:java源码存放文件夹 2.gen 文件:自己主动生成全部由android开发工具自己主动生成的文件,文件夹中最重要的就是R.java文件,这个文件由...android开发工具会自己主动依据你存放res文件夹的资源,同步更新修稿R.java文件,正由于 R.java文件是由开发工具自己主动生成的,所以我们应避免手工改动R.java。...R.java文件在应用中起到了字典的作 用,它包括了各种资源的ID,通过R.java,应用能够非常方便的找到相应资源, 2.1R.java :用于登记各种资源的ID。...可是在/assets文件夹下得资源文件不会再R.java自己主动生成ID,所以读取/assets文件夹下的文件必须指 定文件的路径。

    34920

    学习笔记:插件化资源解决

    一,资源获取 getResource传入R.资源名称,通过资源名称可以找到对应的资源ID(通过R.java文件保证),之后AssetManager通过资源ID找到对应的资源文件名称(通过arsc文件保证...需要在aapt第一步整理生成对应的R.java(对应编译类型会生成不同的R文件varint)进行拦截,捕获原始的r.java文件修改之后编译为class存储起来。...第二种 只需简单修改task名字即可,不需要根据不同sdk平台生成不同的aapt。复用性强。...缺点:需要修改的地方较多:1.生成R.java时还须修改完再次手动调用javac编译为class存储2.进行javac时在用之前生成的class。...因此可以进行优化,提炼出一份名单位于这个名单里面的资源可以进行删除,时机是在生成我们修改后的R.java文件时我们可以根据这个名单删除对应资源 该方案是基于方案二提出的(方案一也可以进行该处理,只不过方案二更顺理成章

    34520

    android library 使用switch 问题

    当我们在Android依赖库中使用switch-case语句访问资源ID时会报错,报的错误是case分支后面跟的参数必须是常数,换句话说出现这个问题的原因是Android library中生成R.java...当我们把一个android的项目配置为library时,我们就不能在 这个项目中使用switch case,原因就是 library库中的 生成R.java中的资源ID不是常数,所以需要我们换一种写法...但是当你打开你的主工程,在onClick、onItemClick等各种回调方法中是可以通过switch-case语句来访问资源ID的,因为在主工程的R.java中资源ID都被声明为了final常量。  ...既然是由于library的R.java中的资源ID不是常量引起的,我们可以在library中通过if-else-if条件语句来引用资源ID,这样就避免了这个错误。

    67320

    Android主项目与Module中R类的区别详解

    前言 大家都知道 Android 项目中会通过自动生成一个 R.java 类的方式来保存项目中所有资源文件的标识。...在主项目中生成R.java 中的资源声明是一个静态常量,而在 module 中它却是一个静态变量。这是为什么呢?...主项目中 比如你在主项目中创建了一个 activity_main.xml 的布局文件,则 R.java 中会自动加入一行如下静态常量。...module 编译后的代码中该资源会被替换成值;第二,当该 module 被添加到主项目中后,如果主项目中有一个同样名称的资源,那么 module 中的该资源就会被替换;第三,主项目中会重新针对该资源生成一个...当然使用butterknife编译后的字节码中使用的还是R.java中的资源声明。

    1.7K10

    android下apk的安装过程

    谢榭: 自问自答吧 呵呵 第一步:打包资源文件,生成R.java文件 【输入】Resource文件(就是工程中res中的文件)、Assets文件(相当于另外一种资源,这种资源Android系统并不像对res...中的文件那样优化它)、AndroidManifest.xml文件(包名就是从这里读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件) 【输出】打包好的资源(一般在...Android工程的bin目录可以看到一个叫resources.ap_的文件就是它了)、R.java文件(在gen目录中,大家应该很熟悉了) 【工具】aapt工具,它的路径在${ANDROID_SDK_HOME...【工具】aidl工具 第三步:编译Java文件,生成对应的.class文件 【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件) 【输出】.class文件 【工具...】javac工具 第四步:把.class文件转化成Davik VM支持的.dex文件 【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件) 【输出】.class文件

    78320

    Android APK编译流程

    生成最终 APK 之前,打包器会使用 zipalign工具对应用进行优化,以减少其在设备上运行时所占用的内存。...image.png 详细的对应步骤 和 使用工具如下: 1. aapt打包资源文件 资源文件(res文件夹下的文件)通过 AAPT(Android Asset Packaging Tool)打包生成R.java...如果有aidl文件,这个阶段会生成对应的Java接口文件。 3. 编译(Compilers) R.java文件、工程源码文件、aidl.java文件, 在这一步通过javac生成.class文件。...注解处理器在这一步会进行工作,生成相应的代码 如果配置了代码混淆,也会在生成.class 文件时候进行配置,最终的.class文件混淆后可以防止被反编译 4. dex(生成dex文件) 源码.class...res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java

    2K20

    安卓基础干货(一):了解一下安卓的发展历史

    11.Android工程的目录结构 src/ java源代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。...Android开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。...R.java在应用中起到了字典的作用,它包含了各种资源的id,通过R.java,应用可以很方便地找到对应资源。...另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。...assets资源目录 Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径

    1.3K10

    Android 打包流程

    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:生成未签名的

    67020

    Android的打包过程与资源分配

    AAPT打包机制 在AAPT打包的过程中会将res中除了raw和assets之外的资源(如layout、string、drawable等等)打成二进制文件,并且生成R.java以及resources.arsc...R.java中存放着各个Type对应的id: public static int Base_Widget_AppCompat_ImageButton = 0x7f16008b; 其中: 前两位代表包...AssetsPath路径中查找resources.arsc资源表,匹配资源表中的包名 匹配到后,根据Type来找到对应的资源类型表 在资源Type表中匹配Name,找到ID 在标准的Gradle打包中,R.java...需要将插件中所使用的资源ID按不同插件的包名进行区分,因为AAPT默认会从0x7f开始进行分配 解决方案有多种: 修改aapt,为插件分配不同的pakcageId,然后将引用R.id的地方修改为常量 修改aapt过后的R.java...文件,合并多个插件的R.java文件,并且重新分配R.java中的id常量,并且重写resources.arsc文件 遇到的问题 由于在Manifest.xml中定义的Activity最后还是会merge

    98530

    Android 项目编译过程

    R.java文件 【输入】Resource文件(就是工程中res中的文件)、Assets文件(相当于另外一种资源,这种资源Android系统并不像对res中的文件那样优化它)、AndroidManifest.xml...文件(包名就是从这里读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件) 【输出】打包好的资源(一般在Android工程的bin目录可以看到一个叫resources.ap..._的文件就是它了)、R.java文件(在gen目录中,大家应该很熟悉了) 【工具】aapt工具,它的路径在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你使用的是Windows...【工具】aidl工具 第三步:编译Java文件,生成对应的.class文件 【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件) 【输出】.class文件 【...工具】javac工具 第四步:把.class文件转化成Davik VM支持的.dex文件 【输入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class

    1.8K30

    3.Android-ADT之helloworld项目结构介绍

    gen BuildConfig.java:自动生成的配置文件,如下图所示: ? 表示当前为调试模式, 可以看见各种调试信息(比如log),如果打包发布则会自动变为fals....R.java:用来记录静态对象(比如用户界面、字符串、图片、声音等)的资源索引文件,对某个静态对象进行ctrl+左键可以快速定位到具体文件中,如下图所示: ?...android/support/v4目录下.v4表示只要版本在Android1.6(API4)以上的,都支持. assets 中文翻译过来叫资产,放置一些文件资源,这些文件会被原封不动打包到apk里面,并且不会在R.java...文件下生成相应的标记 bin 该目录用于存放生成的目标文件,例如Java的二进制文件、资源打包文件(.ap_后缀)、Dalvik虚拟机的可执行性文件(.dex后缀),打包好应用文件(.apk后缀)等。...libs 存放要被调用的jar包. res 会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。

    47920
    领券