libacc : Android 2.0 內建的輕量級 C Compiler

Android 2.0 (Eclair) 原始程式碼已於一個月前釋出,在目錄 system/core 下有個 libacc 的子項目,這是開發者修改自 Fabrice Bellard 的大作 OTCC (Obfuscated Tiny C Compiler),以 C++ 與 Android 的執行時期函式庫重寫。libacc 的功能是提供給 Android 2.0 的 RenderScript 一個 C-like 語法的描述,如此一來,開發者可撰寫高效能的視覺效果與動畫,不過這部份並未完成,詳情可參考 "Android renderscript, more info' and an example application" 一文。

關於 libacc 的整合部份,可參考 frameworks/base/libs/rs 目錄下的兩個檔案:

    * rsScriptC.cpp

    * rsScriptC_Lib.cpp

筆者準備了一份可單獨執行於 GNU/Linux 環境的套件:"libacc.tar.bz2",除去 Android 的相依性並補上 Makefile,測試方式如下:

    libacc$ make
    g++ -I./include -DHAVE_PTHREADS -c acc.cpp
    gcc -I./include -DHAVE_PTHREADS -c hashmap.c
    gcc -I./include -DHAVE_PTHREADS -c logd_write.c
    g++ -I./include -DHAVE_PTHREADS -c tests/main.cpp
    g++ -I./include -DHAVE_PTHREADS -c tests/runtimeTest.cpp
    g++ -o main \
      acc.o \
      hashmap.o \
      logd_write.o \
      main.o \
      -ldl
    g++ -o runtimeTest \
      acc.o \
      hashmap.o \
      logd_write.o \
      runtimeTest.o \
      -ldl

libacc 的 Code generator 支援以下硬體架構:

    * x86 / IA32
    * x86_64
    * ARMv5

以 IA32 的環境為例,可透過測試程式來驗證 libacc: (參數 -R 表示作執行的動作)

    libacc$ ./main -R tests/data/hello.c
    Executing compiled code:
    Hello, world
    result: 0

其中 tests/data/hello.c 的內容為:

    libacc$ cat tests/data/hello.c
    int main() {
    printf("Hello, world\n");
    return 0;
    }

若平台是 ARM 的話,還可以支援反組譯輸出,libacc 是 RenderScript 背後很重要的基礎建設,允許動態編譯 Android Graphics 的 RenderScript,輸出成機械碼並執行。參考檔案 tests/runtimeTest.cpp 可得知 RenderScript 的寫法,整個 libacc 可內嵌於程式中,比方說:

    const char* text = "void op_int(int a);\n"
       "void op_float12(float a, float b, float c, float d,\n"
       "           float e, float f, float g, float h,\n"
       "           float i, float j, float k, float l);\n"
       "void script() {\n"
       "  globalVar += 3;\n"
       "  op_int(123);\n"
       "  op_float12(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);\n"
       "}\n";

這個字串經過 libacc 的函式呼叫後,可得到以下的編譯與執行結果:

    libacc$ ./runtimeTest
    Executing script:
    op_int(123)
    op_float12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
    After script globalVar = 20

目錄 tests 還包含可在 Android 環境執行的自動測試 Python script。

时间: 2024-10-01 10:34:59

libacc : Android 2.0 內建的輕量級 C Compiler的相关文章

Android 8.0 正式版将要发布 谷歌还要建超人模型

Android 8.0正式版明天凌晨就要到来,而有关它的系统代号,谷歌迟迟没有公布,到底是哪个甜点代言呢,外界的猜测还没有停止. 从目前曝光的情况看,Android O的系统代号极有可能是OREO(奥利奥),这个也是目前大家比较认可的,不过现在有消息人士爆料称,安卓8.0的新系统的代号极有可能是Orellete(加泰罗尼亚的点心). 顺便说一下,对于昨天谷歌使用的"GoogleOreo_Teaser_0817_noDroids (1).mp4."字样的视频,而引发8.0系统版本称号的事

《深入解析Android 5.0系统》——第1章,第1.4节下载源码

1.4 下载源码 深入解析Android 5.0系统 对于国内的开发者而言,下载Android的源码从来不是一件简单的事.因为一些原因,目前国内已经不能访问Android的源码网站了,最近好像连Android的官方网站也访问不了.对公司而言这不是难题,因为很多公司都有国外的VPN账号或者海外服务器.笔者下载Android的源码就是通过亚马逊的云服务器完成的.只要有国内大型银行的信用卡帐号,就可以在亚马逊平台上免费开通一个EC2服务器(免费使用期一年).亚马逊提供的带宽差不多有一个G,不到半个小时

安卓Android 6.0新特性有哪些

全新的Android M相比目前的Android Lollipop(5.0)有六项重大的改进: 1.App Permissions(软件权限管理):在Android M里,应用许可提示可以自定义了.它允许对应用的权限进行高度管理,比如应用能否使用位置.相机.麦克风.通讯录等,这些都可以开放给开发者和用户. 2.Chrome Custom Tabs(网页体验提升):新版的M对于Chrome的网页浏览体验进行了提升,它对登陆网站.存储密码.自动补全资料.多线程浏览网页的安全性进行了一些列的优化. 3

Android 4.0 更新后 启动不了.

如果是 重新搭建android 环境 应该是没有问题.   如果是更新 eclipse 插件.更新原有 adb 工具就会遇到. 先建立的 4.0的 android 启动不了.   删除 用户主目录 [C:\Documents and Settings\登录用户] 下的 .android 文件夹.   这个当然也会删除 原来建的虚拟机..   最好删除前备份   在重新建立一个 adnroid 虚拟机..就可以了..经过一阵 硬盘转动.   我的android 4.0 启动了..哈哈..    

Android 5.0新增“信任位置”功能

摘要: 你可能没意识到,其实每天你平均解锁手机达到数百次. 所以,为了方便你的生活,Google近日在Android 5.0的智能解锁中加入一项新功能:信任位置解锁(Trusted Place). 这项功能将会自 你可能没意识到,其实每天你平均解锁手机达到数百次. 所以,为了方便你的生活,Google近日在Android 5.0的智能解锁中加入一项新功能:信任位置解锁(Trusted Place). 这项功能将会自动推送,不过你急的话可以在APKMirror手动安装内建这项功能的Google P

Google近日在Android 5.0的智能解锁中加入一项新功能

摘要: 你可能没意识到,其实每天你平均解锁手机达到数百次. 所以,为了方便你的生活,Google近日在Android 5.0的智能解锁中加入一项新功能:信任位置解锁(Trusted Place). 这项功能将会自 你可能没意识到,其实每天你平均解锁手机达到数百次. 所以,为了方便你的生活,Google近日在Android 5.0的智能解锁中加入一项新功能:信任位置解锁(Trusted Place). 这项功能将会自动推送,不过你急的话可以在APKMirror手动安装内建这项功能的Google P

Android 4.0设计规范10大改变

在拜读和翻译了Android design设计指导后,对比Android 4.0与Android2.3及之前版本的app设计指导,总结了Android 4.0设计的10大改变: 1. 导航栏 (详见模式PATTERNS>导航Navigation) 由之前的物理按键导航(返回.菜单.搜索.主页)变成了嵌入屏幕的虚拟按键(返回.主页.最近任务).   左侧为早期有4个物理按键的手机,右侧为新版只有3个虚拟按钮的手机 把菜单项和搜索项从导航栏去掉,把之前通过长按主页键才出现的最近任务直接展示在导航栏中

图片-android 4.0中 WebP不显示问题(不考虑4.0以下系统)

问题描述 android 4.0中 WebP不显示问题(不考虑4.0以下系统) 由于图片太大,我们项目中使用了webp格式的图片,在适配三星s2,4.0系统的时候出现了这种问题,部分webp图片可以显示,一部分webp图片不显示,但是在4.3以上的手机测试时都没有问题,不知道怎么回事,有没有大神帮解答下!谢谢! 解决方案 Android4.0 Toast显示问题Android 4.0 系统语言预设问题android 4.0 显示系统

Android 5.0棒棒糖难合部分三星手机“口味” 难以更新

[环球科技综合报道]据Androidheadlines网站11月23日报道,Android5.0Lollipop(棒棒糖)是继Android4.4KitKat(巧克力)之后的一次重大更新,其界面一改之前沉闷设计,加入了五彩缤纷的颜色,呈现出一种清新的风格.然而如此别具一格的风味似乎难合部分三星手机的口味.当前许多手机已成功升级到Android5.0,第三方软件开发商和谷歌也引导用户更新安卓设备系统.许多手机在系统更新时未遇到问题,唯独部分三星手机难以完成更新.Android 5.0棒棒糖难合部分