2017-07-31 ruki
最近为了给xmake实现预编译头文件的支持,研究了下各大主流编译器处理预编译头的机制以及之间的一些差异。 现在的大部分c/c++编译器都是支持预编译头的,例如:gcc,clang,msvc等,用于优化c++代码的编译速度,毕竟c++的头文件如果包含了模板定义的话,编译速度是很慢的, 如果能够吧大部分通用的头文件放置在一个header.h中,在其他源码编译之前预先对其进行编译,之后的代码都能重用这部分预编译头,就可以极大程度上减少频繁的头文件冗余编译。 但是不同编译器对它的支持力度和处理方式,还是有很大差异的,并不是非常通用,在xmake中封装成统一的接口和使用方式,还是费了很大的功夫才搞定。 msvc的预编译头处理 预编译头 继续阅读 »
2015-01-11 码农明明桑
前言 开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它的做法,同时啊,还可以借鉴别人的软件结构,资源文件,等等,哈哈。那我就来讲解一些关于反编译相关的知识,主要分三篇,第一篇介绍反编译的工具和方法,第二篇,介绍smali的语法,第三篇介绍如何防止反编译,主要通过这几篇文章,了解如何去做反编译和代码加固。 more 工具 apktools-目前最强大的反编译工具 轻松反编译apk,解析出资源文件,xml文件,生成smali文件,还可以把修改后的文件你想生成apk。 支持windows,linux,mac。 下载地址:https:// 继续阅读 »
2017-04-23 Mystery0 M
说在前面 之前一直想自己编译一次LineageOS,同时修改一些源码来自定义,然后在寒假折腾双系统,重新分区(原来的分区小了),然后升级配置之类的。最后在上个月成功编译了自己的第一个版本,编译的过程并不算难,网上很多流程,而且官方也有流程,所以一次编译成功了。只是这第一次编译花费了我3个小时。 虽然说编译成功了说明我的机器编译还是没问题的,但是在编译的这三个小时里,我的机器cpu4个核心全部占用100%,同时8g的内存也是95%+,swap也占了一半多,虽说有一定好处,但是一定程度上妨碍了我学习和工作。 考虑到学习工作问题以及想要提升一下编译速度,所以我在网友的推荐下,去Vultr租了一台高配置服务器专门用于编译(一个月500来不 继续阅读 »
2016-12-03 ruki
为了进一步裁剪tbox,更好的适配嵌入式开发平台,tbox新增了--micro=y的微模块编译选项 如果启用此编译选项,那么只会编译tbox里面较轻量的一些模块,是的编译后的库大小,尽量保证在64K左右。 先来讲讲一些跟库大小相关的编译选项: * `--smallest=y`: 通用平台,最小编译模式,会禁用所有第三方依赖库,禁用所有扩展模块,启用最小化编译优化(库内部也会尽可能节省内存使用) * `--micro=y`: 专门针对嵌入式平台设计,仅编译最为轻量的一些模块,启用最小化编译优化(有可能会包含一些可选组件) smallest和micro的区别在于,即使启用了smallest禁用所有扩展模块,但是还是会内置比m 继续阅读 »
2015-01-18 码农明明桑
前言 前面介绍了怎样去反编译别人的代码。哈哈,这里居然又写进行防止反编译。但是,还是先来写写吧。 使用ProGuard proguard android的sdk中就有提供,使用它可以对代码进行混淆和精简,处理后的代码,虽然仍然可以反编译,但是阅读起来相当困难,降低代码的可读性。操作简单,推荐使用。 more proguard使用方法和配置,可以看我之前的博客: http://blog.isming.me/2014/05/31/use-proguard/ 另外网上有别人共享的proguard配置模板,也可以参考: https://github.com/krschultz/android-proguard-snippets 继续阅读 »
2016-02-04 ruki
如果你只想编译当前主机环境的平台,例如在windows上编译windows版本,在macosx上编译macosx版本,那么你只需要敲以下命令即可: bash xmake 因为xmake默认会去检测当前的环境,默认编译当前主机的平台版本,不需要做额外的配置,并且默认编译的是release版本。 如果工程里面有多个目标,那么上面的命令,会去编译所有目标,如果只想编译指定一个目标,例如:test,那么只需执行: bash xmake test 如果你想编译debug版本,那么需要做些简单的配置: bash xmake config --mode=debug xmake xmake针对每个 继续阅读 »
2016-07-23 ruki
xmake 提供了一些内置的条件判断api,用于在选择性编译时,获取到一些工程状态的相关信息,来调整编译逻辑。。 例如:is_os, is_plat, is_arch, is_kind, is_mode, is_option is_mode 我们先拿最常用的is_mode来讲讲如何使用,这个api主要用来判断当前的编译模式,例如平常编译配置的时候,会执行: bash $ xmake f -m debug $ xmake 来编译debug版本,那么模式就是debug,那么release版本,也就是release了 bash $ xmake f -m release $ xmake 但是如果仅仅只是这么配置,xmake 继续阅读 »
2015-01-14 码农明明桑
前言 前面我们有说过android反编译的工具,如何进行反编译。反编译后可以得到jar或者得到smali文件。Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali。我们反编译得到的代码,jar的话可能很多地方无法正确的解释出来,如果我们反编译的是smali则可以正确的理解程序的意思。因此,我们有必要熟悉smali语法。 类型的表示 java里面包含两种类型,原始类型和引用类型(包括对象),同时映射到smali也是有这两大类型。 more 原始类型 V void (只能用于返回值类型) Z boolean B by 继续阅读 »
2017-01-07 ruki
最近给xmake增加了一个新特性,对于一份工程源码,可以不用编写makefile,也不用编写各种make相关的工程描述文件(例如:xmake.lua,makefile.am, cmakelist.txt等) xmake就可以直接编译他们,这是如何做到的呢,简单来说下实现原理: 首先扫描当前目录下,xmake所以支持的所有源代码文件 分析代码,检测哪些代码拥有main入口函数 所有没有main入口的代码编译成静态库 带有main入口的代码,编译成可执行程序,同时链接其他静态库程序 这种代码扫描和智能编译,非常简单,目前xmake还不支持多级目录扫描,只对单级目录的代码进行扫描编译。。 开源代码的移植和编译 虽然这种方式,并不是 继续阅读 »
2017-02-21 Renfei Yu
概述 PushDemo接入魅族pushsdk,为了能开始针对应用的包名,生成相应的apk,我们搭建了如下的自动编译pushdemo测试apk的环境,旨在能够根据用户申请的包名,个性化打包pushdemo 一.准备工作 我们已经为你准备了android sdk 全部的资源包你无需任何下载,之需要解压sdk压缩包放到指定目录即可 NOTE: CentOS 远程安装教程 继续阅读 »