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

【连载】聊聊 APK(三) —— Android 资源编译秘密

使用 aapt 编译资源 以上我们介绍了 Android 加载资源策略,接下来我们就要介绍资源编译了,为什么资源也需要编译?...人家估计就抄 GCC 。 构造项目 构造了一个很简单项目,写了两个 xml,分别是 AndroidManifest.xml 和 activity_main.xml。...我们顺便来看下一个用 Android Studio 新建出来 apk 吧,为了简单,暂时去除了 support library,因为会引入非常多资源,我们使用aapt2 dump,得到如下: Binary...资源共享 上面说了 aapt 编译和链接资源事情,我们还有一个事情没有讲,就是 android.jar 里面共享资源是怎么做。...首先要再明确一点,android.jar 只是一个编译桩,真正执行时候,Android OS 提供了一个运行时库(framework.jar)。因此此处我们可以理解成“骗过”编译器用文件。

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

一篇文章教你生成Android APK,以后面试官问起做过啥功能就能对他吹水了

这一类问题,都是要先修改Android源码做到底层适配,然后导入自编译framework.jar包才能得以实现,下面以同步RTC时钟为例: image.png 开始 可以看到我们在frameworks...首先找到你项目源码,这个项目源码是amlogic平台,Android 9.0系统,所以这篇博客同样适用于Android高版本这类问题解决。...image.png 这个jar包才是可以供AS使用,它有自己一定大小,这里是21M左右,因平台而异。而如果你天真的直接在out目录下搜索framework.jar也是可以搜到。...那么接下来,就按部就班教大家如何导入这个我们自己编译framework.jar。 首先,我们把改好名字framework.jar文件复制粘贴到lib目录下,_(哈哈)。...image.png 将项目自带第一行引用删除,增加compileOnly files('libs\framework.jar'),因为我们希望这个包只在编译时起作用,所以需要把implementation

90600

安卓直播详细教程(三)-----ijkplayer打造个性化控制界面

自定义MediaController 首先我们先去看看ijplayer怎么做,然后我们照葫芦画瓢,去修修改改。 一、ijplayerdemo如何实现?...隐藏API = 正在开发中 内部API = 黑盒 内部和隐藏API编译时和运行时对比 当您使用Android SDK进行开发时,会引用一个非常重要jar文件android.jar。...它位于Android SDK平台目录SDK_DIR/platforms/platform-X/android.jar(其中X为API Level,可以是5或者10或其它数字)。...在android.jar中,com.android.internal中所有的类移除了,同样,所有标记为@hide类、枚举、字段、方法也移除了。...但是当您在设备中运行应用程序时,加载framework.jar(大约等价于android.jar),它没有被裁减,包含所有的内部类和隐藏API。所以您可以使用反射机制来访问隐藏API和内部API

2.3K50

系统jar包,sdk制作及引用

所以需要编译一个包含新接口方法jar包交给APK编译。(生成jar包方法见该文章) 编译Jar包 其实编译系统jar包很简单 make framework 即可得到framework.jar。...这时候把jar包导入到项目里,发现缺找不到jar包里方法。这是因为,Android N使用了Jack编译。所以编出来jar包里面没有class文件,取而代之是一个优化过dex文件。...Android Studio导入framework.jar 拷贝framework.jar包到app/libs目录下 右键点击framework.jar,选择add as library,作为库添加到项目...下面是Android Studio制作SDK步骤: 创建一个新项目 右键项目new module->Android Library->输入库名 mysdk 在module内创建一个新class...SDK暴露出来一个系统方法,这样App要杀掉应用就不需要使用反射,直接调用SDK就可以。

4.6K30

NDK开发_cwin配置+编程简单步骤

源码中编译,所以对于在eclipse中ndk开发,其实记忆有点模糊了,包括 Android.mk编写,都有点小区别吧。...后面在window上编译 so还得靠它; 2)android-ndk-*** ,这个版本很多,也不清楚目前最新版本是多少了,不过都没有太大关系,使用 android-ndk-r8b,这个是提供了编译...(这里可能有点问题,虽然install 成功了,后面copy到libs/armeabi时候出错了,不过这丝毫不影响我们后面实际项目使用,只要install没报错就ok了) ?...三、编译 车辆识别项目 jni 前面的工作做好了,现在就可以来编编我们项目了,切到项目工程 jni目录下(一般jni相关都放在了jni目录下,当然这个目录视自己实际情况而定), 然后很简单ndk-build...找不到Bitmap,那就是android.jar 没找到,ok, -classpath 指定下android.jar路径 ?

51430

伪造出一个假系统View | Gradle Task

先简单介绍下背景,业务同学写了个apt框架,然后里面包含一个注解库,而注解库中需要使用Android源码中View。...获取Android.jar 这个比较简单,其实Android.jar是要区分compile版本,这些都放在android sdk下。...类似这种/Android/sdk/platforms/android-32/android.jar。代码就是上面的getAndroidJar。...dependencies中执行任务 上面的这个方法已经让我们可以在一个"java-library"中使用安卓编译出来jar包了。...通过这种方式我们就可以活学活用gradle特性,先造假出一些我们想要系统类,然后编译成jar包,之后仅在编译使用这些,这样这些类在实际运行时就会被替换android.jar类了。

30110

Ant 打包安卓apk(1)-手动档

编译工程源码(主项目,库)src 目录下所有的源码,同时上边生成R.java和aidl生成java文件也会被编译生成相应 class 文件  4....目录>   -I : 某个版本平台android.jar路径   -S : res文件夹路径 resource-sources   -J : R.java输出目录 2....1.8.0_91, 但我知道目标安卓5.1是基于JDK1.6, 所以指定-source和-target都是1.6 -bootclasspath 覆盖引导类文件位置, 设置编译版本是22 -sourcepath...D:/Android/android-sdk/platforms/android-22/android.jar -A assets -S res -F bin/res.zip -f 如果编译生成文件已经存在...-M 使生成目录存放在-J参数指定目录 -I 指定某个版本平台android.jar文件路径 -A 指定assert文件夹路径 -S 指定res文件夹路径 -F 指定输出文件完整路径 6

42020

绕过谷歌禁止反射一种办法

关于隐藏方法 我们知道在Android源码中有部分代码是不允许开发者使用,这里要分两种情况。...· 没有打包进android.jar类和方法,这部分不是隐藏 · 打包进android.jar隐藏类和方法 如果查看源码,会发现有很多代码其实没有打进android.jar,比如internal...这部分类之所以不打进android.jar,目的是这些类是只给android内部使用,不希望开发者使用。 今天只说明对于没有打包进 android.jar类,在不用反射情况下使用方法。...因为它不会最终编译进apk,运行时调用仍然是AndroidActivityThread,那里有真正实现逻辑,我们这里只是做了个壳用来保证编译时不会有问题。...总结 对于Android里没有被打进 android.jar包中类,可以通过 provided library方式提供调用, 虽然P禁用了反射,但是直接调用是可以

1.2K10

携程Android App插件化和动态加载框架

现在我们就针对以上关键问题逐一破解,其中最麻烦还是资源编译和加载问题。 Android如何编译? 首先来回顾下Android如何进行编译。...在Android中,资源编译也需要依赖,最常用依赖就是SDK自带android.jar本身。...在日常开发中,我们也经常通过@android:color/opaque_red形式来引用SDK自带资源。这一切都来自于编译过程中aapt对android.jar依赖引用。...按照对android.jar包中资源使用常规手段,引用系统资源可使用R类全限定名android.R来引用具体ID,以便和当前项目R类区分。...插件代码编译 针对插件代码编译,需要考虑以下几点: classpath 对于插件编译来说,除了对android.jar以及自己需要第三方库进行依赖之外,还需要依赖宿主导出base.jar

895100

携程Android App插件化和动态加载实践

现在我们就针对以上关键问题逐一破解,其中最麻烦还是资源编译和加载问题。 Android如何编译? 首先来回顾下Android如何进行编译。...在Android中,资源编译也需要依赖,最常用依赖就是SDK自带android.jar本身。...在日常开发中,我们也经常通过@android:color/opaque_red形式来引用SDK自带资源。这一切都来自于编译过程中aapt对android.jar依赖引用。...按照对android.jar包中资源使用常规手段,引用系统资源可使用R类全限定名android.R来引用具体ID,以便和当前项目R类区分。...插件代码编译 针对插件代码编译,需要考虑以下几点: classpath 对于插件编译来说,除了对android.jar以及自己需要第三方库进行依赖之外,还需要依赖宿主导出base.jar类库。

1.1K70

apk打包之用纯命令行打包apk(android4.4亲测可用)

signed.apk 下面介绍笔者实施背景 1.target以20为例,其中android.jar地址为E:\adt-bundle-windows-x86_64-20140702\sdk\platforms...\android-20\android.jar 2.项目为learn723(不要问为什么是这个名字,测试了才成功几十遍我会说!!!)...android.jar   -f 如果编译生成文件已经存在,强制覆盖。   ...-m 使生成目录存放在-J参数指定目录   -J 指定生成R.java 输出目录路径   -S 指定res文件夹路径   -I 指定某个版本平台android.jar文件路径   ...-20\android.jar -F bin\resources.ap_        -f 如果编译生成文件已经存在,强制覆盖   -M 指定AndroidManifest.xml路径

1.7K20

安卓从入门到进阶第四章(调试方法)

我们调试系统服务是在SystemServer进程中,可以使用下面的命令验证(这里使用Genymotion上安装安卓对应版本镜像环境演示)。...是从http://androidxref.com/下载Android 9.0对应代码。...我们验证下,使用ps -A |grep gallery3d查到Gallery对应进程PID,使用cat /proc/pid/maps |grep framework.jar看到如下信息: efcd5000...今天讲解了如何调试Framework中系统服务进程AMS服务线程,其他PMS、WMS调试方法跟AMS一样。...并且也讲解了如何调试一个应用里面的TextView控件,其他比如Button、ImageView调试方法跟TextView也是一样。 通过今天学习,希望能够给你一个学习系统框架最便捷路径。

58030

【小功能3】android引用jar时会

主要分析了一下原因(不是很对),我们在生成apk程序时候,一般会把资源文件res及类文件classes.dex(类文件打包了),还有主配置文件等包含进入,但是并不包含包含android.jar之类系统...jar包,我们在eclispe中建立android工程需要这个android.jar是因为我们程序需要android中提供相关类,但是在apk运行在手机里时已经有这个环境了,同时源码中已经包含了所有的类...,源码编译时都会提供。...在网上找了一下相关资料,貌似有用不是狠多,但是有一位说他也解决了,但是没试他方法,按照自己方式解决了就好了。 下面是他方法。      ...有些android项目要引入第三方jar包,当你配置好后,项目没有报什么错误,但是当运行了之后,总是会报找不到类即java.lang.noclassdeffounderror错误,今天在写一个项目的时候再次遇到了

65730

Android插件化学习之路(四)之使用插件中R资源

如何使用插件中R资源 一种解决方式是插件里需要用到新资源都通过纯Java代码方式创建(包括XML布局、动画、点九图等),蛋疼但有效。...资源ID可能与主项目里现有的资源ID冲突,其实这种方式加载进来res资源并不是融入到主项目里面来,主项目res资源是保存在ContextImpl里面的Resources实例,整个项目共有,而新加进来...,APP实际上运行代码逻辑在android.jar里面(位于android-sdk\platforms\android-XX),反编译android.jar并找到ResourcesManager类就可以发现这些接口都是对应用层隐藏...• 2.通过反射,直接替换当前contextmResources私有成员变量。...方法中,对ContextmResources进行替换,这样,我们就可以加载离线apk中布局了。

58560

Android自动化构建之-Ant多渠道打包(上)

,本篇博文先给大家介绍如何使用Ant来实现自动构建和多渠道发布。...先说APK构建过程 下面来简单描述下apk构建过程: 使用aapt生成R.java类文件 使用android SDK提供aidl.exe把.aidl转成Java文件 使用javac命令编译.java...为了让大家更清楚apk构建过程,放上官方一张图: ? 有了这张图,相信大家已经清楚了apk到底是如何生成吧,不多说了。...assert文件夹路径 -I 某个版本平台android.jar路径 -F 具体指定APK文件输出 aidl命令生成.aidl文件 示例命令: aidl -p<framework.aidl...小结 本篇博文主要给大家介绍了Android中apk构建过程,也详细讲解了每一步具体命令操作,由于不想一篇把所有东西堆在一起,将会在下一篇来具体使用Ant脚本实现自动化构建和多渠道打包,大家可以继续关注

49620
领券