javac和jack,Android编译器的演进

http://taobaofed.org/blog/2016/05/05/new-compiler-for-android/ javac 在没有jack以前,google一直使用的sun/oracle的java编译器javac用作android的官方编译器。 javac是jdk中的java编译器,将java文件编译成class文件,那么我们来看一下之前的Android的java文件是怎么一步一步变

解决Android8.0系统 接收不到静态广播的问题

最近在回看第一行代码时,做书上有关广播的例子时,发现高版本的android系统,对于广播的接收变得越来越严格, 导致自己写的demo中收不到广播,看了官网上的一些介绍    附上链接 : https://developer.android.google.cn/about/versions/oreo/features/background-broadcasts 原来在Android6,将该应用安装到

再谈 aapt2 资源分区

在buildTools 28.0.0以前,aapt2自带了资源分区,通过–package-id参数指定。但是该分区只支持>0x7f的PP段,而在Android 8.0之前,是不支持>0x7f的PP段资源的,运行时会抛异常。但是当指定了一个<0x7f的PP段资源后,编译资源时却会报错 error: invalid package ID 0x15. Must be in the ra

替换Android中VM 加载动态库方式

Android加载动态库的代码在 dalvik/vm/Native.c,加载的方式就是调用 libdl 中 dlopen, dlsym 这些函数 应该可以在这些函数中做些手脚,dlsym 替换为 my_dlsym 这样就可以调用自己的函数 下面举一个例子,通常 dlopen, dlsym 使用如下 #include <dlfcn.h> void* handle = dlopen(“./

Gradle 函数复用的一点实践

前段时间在搞组件化,其中遇到一个问题,各个模块中的gradle文件需要一些辅助函数,比如用于判断当前构建的任务是否在jenkins上构建,并且这些函数可能会被多次使用。最开始的时候只有一个gradle文件用到了,就直接在用到的gradle文件中编写对应的函数。后来发现,很多gradle文件都会用到,一开始并没有考虑太多,用到的时候就copy一下对应的函数,久而久之,发现很多文件中存在着相同的函数,

使用manifestPlaceholders替换变量

在项目中,我们有时会需要根据不同的项目环境,使用不同的项目变量,比如说,我在测试环境中需要我的app访问的服务器地址是测试服务器上,而正式发布下的app需要访问正式服务器。在这种情况下,我们可以将这个变量放在AndroidManifest文件中,根据不同的编译类型生成服务器指向不同的app。 实现 在之前版本的gradle中,大部分的思路都是在AndroidManifest中定义一个变量,然后在编

Android平台的崩溃捕获机制及实现

作者简介:贾志凯,Testin崩溃分析(http://apm.testin.cn/)项目研发工程师,负责客户端SDK相关技术研发工作。5年移动互联网开发经验,曾任职于中科院、Symantec、Opera,对移动App的测试、分析有较深入的研究。 Android系统碎片化造成应用程序崩溃严重,在模拟器上运行良好的程序安装到某款手机上说不定就会出现崩溃的现象。而且,往往都是程序发布之后在用户端出现了崩

Android 工程引用其他Library工程时的R.id问题

A为普通Android工程B为设置了is Library的工程,B中有使用R.id,当A工程引用了B工程时会在A工程的gen目录中生成B的R文件,里面也包含了A的R文件中的内容,但是当B的id定义在layout文件中时需要注意layout的名称,如果A下有个main.xml的layout,B下也有个main.xml的layout,那么A编译时就会将B的main.xml中的所有id忽略,导致混淆报错