androidhelper源码_androidhelper 教程

hacker|
91

文章目录:

android 源码 怎么只编译 systemui

Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,下载的代码包经过解压后(这里是Android2.2的源码包),源代码的第一层目录结构如下: -- Makefile -- bionic (bionic C库) -- bootable (启动引导相关代码) -- build (存放系统编译规则及generic等基础开发包配置)-- cts (Android兼容性测试套件标准) -- dalvik (dalvik JAVA虚拟机) -- development (应用程序开发相关) -- external (android使用的一些开源的模组) -- frameworks (核心框架——java及C++语言) -- hardware (主要保护硬解适配层HAL代码) -- libcore -- ndk -- device -- out (编译完成后的代码输出与此目录) -- packages (应用程序包) -- prebuilt (x86和arm架构下预编译的一些资源) -- sdk (sdk及模拟器) -- system (文件系统库、应用及组件——C语言) `-- vendor (厂商定制代码)bionic 目录-- libc (C库)-- arch-arm (ARM架构,包含系统调用汇编实现)-- arch-x86 (x86架构,包含系统调用汇编实现)-- bionic (由C实现的功能,架构无关)-- docs (文档)-- include (头文件)-- inet -- kernel (Linux内核中的一些头文件)-- netbsd (?netbsd系统相关,具体作用不明)-- private (?一些私有的头文件)-- stdio (stdio实现)-- stdlib (stdlib实现)-- string (string函数实现)-- tools (几个工具)-- tzcode (时区相关代码)-- unistd (unistd实现)`-- zoneinfo (时区信息) -- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能) -- libm (libm数学库的实现,)-- alpha (apaha架构)-- amd64 (amd64架构)-- arm (arm架构)-- bsdsrc (?bsd的源码)-- i386 (i386架构)-- i387 (i387架构?)-- ia64 (ia64架构)-- include (头文件)-- man (数学函数,后缀名为.3,一些为freeBSD的库文件)-- powerpc (powerpc架构)-- sparc64 (sparc64架构)`-- src (源代码) -- libstdc++ (libstdc++ C++实现库)-- include (头文件)`-- src (源码) -- libthread_db (多线程程序的调试器库)`-- include (头文件) `-- linker (动态链接器)`-- arch (支持arm和x86两种架构)bootable 目录-- bootloader (适合各种bootloader的通用代码)`-- legacy (估计不能直接使用,可以参考)-- arch_armv6 (V6架构,几个简单的汇编文件)-- arch_msm7k (高通7k处理器架构的几个基本驱动)-- include (通用头文件和高通7k架构头文件)-- libboot (启动库,都写得很简单)-- libc (一些常用的c函数)-- nandwrite (nandwirte函数实现)`-- usbloader (usbloader实现) -- diskinstaller (android镜像打包器,x86可生产iso) `-- recovery (系统恢复相关)-- edify (升级脚本使用的edify脚本语言)-- etc (init.rc恢复脚本)-- minui (一个简单的UI)-- minzip (一个简单的压缩工具)-- mtdutils (mtd工具)-- res (资源)`-- images (一些图片)-- tools (工具)`-- ota (OTA Over The Air Updates升级工具)`-- updater (升级器)build目录-- core (核心编译规则) -- history (历史记录) -- libs `-- host (主机端库,有android “cp”功能替换) -- target (目标机编译对象)-- board (开发平台)-- emulator (模拟器)-- generic (通用)-- idea6410 (自己添加的)`-- sim (最简单)`-- product (开发平台对应的编译规则)`-- security (密钥相关) `-- tools (编译中主机使用的工具及脚本)-- acp (Android "acp" Command)-- apicheck (api检查工具)-- applypatch (补丁工具)-- apriori (预链接工具)-- atree (tree工具)-- bin2asm (bin转换为asm工具)-- check_prereq (检查编译时间戳工具)-- dexpreopt (模拟器相关工具,具体功能不明)-- droiddoc (?作用不明,java语言,网上有人说和JDK5有关)-- fs_config (This program takes a list of files and directories)-- fs_get_stats (获取文件系统状态)-- iself (判断是否ELF格式)-- isprelinked (判断是否prelinked)-- kcm (按键相关)-- lsd (List symbol dependencies)-- releasetools (生成镜像的工具及脚本)-- rgb2565 (rgb转换为565)-- signapk (apk签名工具)-- soslim (strip工具) `-- zipalign (zip archive alignment tool)dalvik目录 dalvik虚拟机 . -- dalvikvm (main.c的目录) -- dexdump (dex反汇编) -- dexlist (List all methods in all concrete classes in a DEX file.) -- dexopt (预验证与优化) -- docs (文档) -- dvz (和zygote相关的一个命令) -- dx (dx工具,将多个java转换为dex) -- hit (?java语言写成) -- libcore (核心库) -- libcore-disabled (?禁用的库) -- libdex (dex的库) -- libnativehelper (Support functions for Android's class libraries) -- tests (测试代码) -- tools (工具) `-- vm (虚拟机实现)development 目录 (开发者需要的一些例程及工具) -- apps (一些核心应用程序)-- BluetoothDebug (蓝牙调试程序)-- CustomLocale (自定义区域设置)-- Development (开发)-- Fallback (和语言相关的一个程序)-- FontLab (字库)-- GestureBuilder (手势动作)-- NinePatchLab (?)-- OBJViewer (OBJ查看器)-- SdkSetup (SDK安装器)-- SpareParts (高级设置)-- Term (远程登录)`-- launchperf (?) -- build (编译脚本模板) -- cmds (有个monkey工具) -- data (配置数据) -- docs (文档) -- host (主机端USB驱动等) -- ide (集成开发环境) -- ndk (本地开发套件——c语言开发套件) -- pdk (Plug Development Kit) -- samples (演示程序)-- AliasActivity ()-- ApiDemos (API演示程序)-- BluetoothChat (蓝牙聊天)-- BrowserPlugin (浏览器插件)-- BusinessCard (商业卡)-- Compass (指南针)-- ContactManager (联系人管理器)-- CubeLiveWall** (动态壁纸的一个简单例程)-- FixedGridLayout (像是布局)-- GlobalTime (全球时间)-- HelloActivity (Hello)-- Home (Home)-- JetBoy (jetBoy游戏)-- LunarLander (貌似又是一个游戏)-- MailSync (邮件同步)-- MultiResolution (多分辨率)-- MySampleRss (RSS)-- NotePad (记事本)-- RSSReader (RSS阅读器)-- SearchableDictionary (目录搜索)-- **JNI (JNI例程)-- SkeletonApp (空壳APP)-- Snake (snake程序)-- SoftKeyboard (软键盘)-- Wiktionary (?维基)`-- Wiktionary**(?维基例程) -- scripts (脚本) -- sdk (sdk配置) -- simulator (?模拟器) -- testrunner (?测试用) `-- tools (一些工具)

如何看一个android的.apk应用安装器的源代码。

朋友,你好,这个需要用到反编译,才可以看到源码哦。

APK反编译方法如下:

一、更改apk文件的后缀名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip

二、用zip解压缩LianyunHelper3.0.11.zip文件

三、从解压缩的文件夹中取出classes.dex文件并放到dex2jar.bat所在目录

四、运行cmd命令,进入dex2jar.bat所在的目录,输入dex2jar.bat classes.dex即可生成classes.dex.dex2jar.jar文件

五、用jd-gui工具打开classes.dex.dex2jar.jar文件,即可看到源码

六、将AndroidManifest.xml文件放到AXMLPrinter2.jar所在目录,运行cmd命令,进入 AXMLPrinter2.jar所在目录,输入java -jar AXMLPrinter2.jar AndroidManifest.xml AndroidManifest.txt。

如何实现APK的反编译得到APK的源码

最新的反编译不用此方法, 有最新的一键自动反编译工具:

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。

在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。

注:本Android反编译教程,在Windows7-Ultimate-64bit操作系统上,测试通过!

下述所需的反编译工具包 下载

一、反编译Apk得到Java源代码

首先要下载两个工具:dex2jar和JD-GUI

前者dex2jar是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

dex2jar:

JD-GUI:

具体步骤:

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录(在DOS命令下CD 目录)

运行

dex2jar.bat classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截图如下:

运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了

HelloAndroid源码(编译前的apk源码对照)如下:

二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

如果是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool

下载地址:

下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:

命令行解释:apktool d [apk文件 ] [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例):

特别注意:你要反编译的文件一定要放在C盘的根目录里(其实不用放在C盘根目录也行)

例如:在D盘目录D:\apktool1.4.1

cd /d D:\apktool1.4.1 //切换到D盘目录,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三个文件

apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反编译命令,注意 d和

-f 的写法

将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:这个主意你文件所在盘

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok

最后,再介绍一款刚出来的反编译工具 Androidfby ,它是一款对上述步骤进行了封装的图形界面工具,下载地址

但是,针对部分签名的apk,无法实现反编译,但本博客方法则仍然可以反编译成功!仅供参考使用

另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客将讲述如何通过混淆代码防止被别人反编译

Android如何防止apk程序被反编译

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

[html] view

plaincopyprint?

1. -optimizationpasses 5

2. -dontusemixedcaseclassnames

3. -dontskipnonpubliclibraryclasses

4. -dontpreverify

5. -verbose

6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

7.

8. -keep public class * extends android.app.Activity

9. -keep public class * extends android.app.Application

10. -keep public class * extends android.app.Service

11. -keep public class * extends android.content.BroadcastReceiver

12. -keep public class * extends android.content.ContentProvider

13. -keep public class * extends android.app.backup.BackupAgentHelper

14. -keep public class * extends android.preference.Preference

15. -keep public class com.android.vending.licensing.ILicensingService

16.

17. -keepclasseswithmembernames class * {

18. native methods;

19. }

20.

21. -keepclasseswithmembernames class * {

22. public init(android.content.Context, android.util.AttributeSet);

23. }

24.

25. -keepclasseswithmembernames class * {

26. public init(android.content.Context, android.util.AttributeSet, int);

27. }

28.

29. -keepclassmembers enum * {

30. public static **[] values();

31. public static ** valueOf(java.lang.String);

32. }

33.

34. -keep class * implements android.os.Parcelable {

35. public static final android.os.Parcelable$Creator *;

36. }

从脚本中可以看到,混淆中保留了继承自Activity、Service、

Application、BroadcastReceiver、ContentProvider等基本组件以及

com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考proguard_path/examples中的例子及注释。)

让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的default.properties文件应该如下:

[html] view

plaincopyprint?

1. # This file is automatically generated by Android Tools.

2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!

3. #

4. # This file must be checked in Version Control Systems.

5. #

6. # To customize properties used by the Ant build system use,

7. # "build.properties", and override values to adapt the script to your

8. # project structure.

9.

10. # Project target.

11. target=android-9

12. proguard.config=proguard.cfg

大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

android程序数据库问题... DBHelper helper = new DBHelper(this, DB_NAME, null, VERSION); 不懂啊

这里用ContentProvider方法来定义数据库。。

public class AlarmProvider extends ContentProvider //

{

private static final String DB_NAME = "Alarm.db"; //数据库名

private static final int DB_VERSION = 1;//版本号,当程序第一次运行时,数据库被建立,如果

//你更改了数据库,如增加一个表,这时,这个值一般要改一下,这样程序再次安装运行

//时,数据库可自行升级。。如果不改通常要手动删除数据库。。

private static final String ALARM_TABLE_NAME = "alarm"; //一个表名

private static final int ALARM = 1; //与表对应的整数值,相当于id

private static UriMatcher mUriMathcer; //Uri匹配器,建立uri,表名,id三者之间的关系,如下:

static{

mUriMathcer = new UriMatcher(UriMatcher.NO_MATCH);

mUriMathcer.addURI(AlarmInfo.AUTH, "alarm", ALARM);

}

private interface CreateTableInterface //表创建接口

{

public abstract void createAlarmTable(SQLiteDatabase db);

}

//内部类,数据库助手类,并实现表创建接口

private static class DatabaseHelper extends SQLiteOpenHelper implements CreateTableInterface

{

CreateTableInterface mCreateTableInterface = this;

Context mContext = null;

//构造函数,该函数调用后,数据库没有

//创建。。也就是下面的onCreate不会在它调用后就立即调用创建db

public DatabaseHelper(Context context)

{

super(context, DB_NAME, null, DB_VERSION);

// Log.i(TAG, "DatabaseHelper be called!");

mContext = context;

}

@Override

public void onCreate(SQLiteDatabase db) //这个方法只在第一次db连接创建db时调用,只一次

{

//create db table

mCreateTableInterface.createAlarmTable(db);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) //db升级时调用

{

// Log.i(TAG, "onUpgrade() be called!");

db.execSQL("DROP TABLE IF EXISTS "+ALARM_TABLE_NAME);

onCreate(db);

}

@Override

public void createAlarmTable(SQLiteDatabase db)

{

// 创建表

db.execSQL("CREATE TABLE "+ALARM_TABLE_NAME+" ("

+AlarmInfo._ID+" INTEGER PRIMARY KEY,"

+AlarmInfo._LABEL+" TEXT NOT NULL,"

+AlarmInfo._TIME+" TEXT NOT NULL,"

+AlarmInfo._ALERT+" TEXT NOT NULL,"

+AlarmInfo._REPEAT+" TEXT NOT NULL,"

+AlarmInfo._ACTIVE+" TEXT NOT NULL"

+");");

//在表中插入一些数据。。。

db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","

+AlarmInfo._TIME+","+AlarmInfo._ALERT+","

+AlarmInfo._REPEAT+","+AlarmInfo._ACTIVE+

") VALUES('Lunch Alarm','11 : 45 AM','"+Tag.TONE+"','"+Tag.EVERY_DAY+"','false');");

db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","

+AlarmInfo._TIME+","+AlarmInfo._ALERT+","

+AlarmInfo._REPEAT+","+AlarmInfo._ACTIVE

+") VALUES('Work Alarm','08 : 45 AM','"+Tag.TONE+"',"+"'Mon,Tue,Wed,Thu,Fri'"

+",'false');");

db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","

+AlarmInfo._TIME+","+AlarmInfo._ALERT+","+AlarmInfo._REPEAT+","

+AlarmInfo._ACTIVE

+") VALUES('Work Alarm','09 : 00 AM','"+Tag.TONE+"',"

+"'"+Tag.WEEKENDS+"','false');");

db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","

+AlarmInfo._TIME+","+AlarmInfo._ALERT+","+AlarmInfo._REPEAT+","

+AlarmInfo._ACTIVE

+") VALUES('Yoga','10 : 15 PM','"+Tag.TONE+"',"+"'Sun,Wed','false');");

}

}

}

private DatabaseHelper mDatabaseHelper; //定义helper

//以下重写insert,delete,update,query等方法

@Override

public synchronized int delete(Uri uri, String selection, String[] selectionArgs)

{

SQLiteDatabase db = null;

boolean success = false;

int count = 0;

try{

db = mDatabaseHelper.getWritableDatabase();

db.acquireReference();

success = true;

switch(mUriMathcer.match(uri)){

case ALARM:

count = db.delete(ALARM_TABLE_NAME, selection, selectionArgs);

break;

}

}catch(SQLException e){

e.printStackTrace();

}finally{

if(success == true){

db.releaseReference();

}

}

return count;

}

@Override

public String getType(Uri uri)

{

switch(mUriMathcer.match(uri)){

case ALARM:

return AlarmInfo.CONTENT_TYPE;

default:

throw new IllegalArgumentException("Unknown URI " + uri);

}

}

@Override

public synchronized Uri insert(Uri uri, ContentValues initValues)

{

SQLiteDatabase mSQLiteDatabase = null;

boolean success = false;

try{

mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();

mSQLiteDatabase.acquireReference();

success = true;

long mRowId;

ContentValues values;

if(initValues == null){

values = new ContentValues();

}else{

values = initValues;

}

switch(mUriMathcer.match(uri)){

case ALARM:

mRowId = mSQLiteDatabase.insert(ALARM_TABLE_NAME,

AlarmInfo._ID, values);

if(mRowId 0){

return uri;

}else{

throw new SQLException("Failed to insert to "+uri);

}

}

}catch(SQLException e){

e.printStackTrace();

}finally{

if(success == true)

mSQLiteDatabase.releaseReference();

}

return null;

}

@Override

public boolean onCreate()

{

// Log.i("alarm provider", "onCreate()...");

mDatabaseHelper = new DatabaseHelper(getContext());

return true;

}

@Override

public synchronized Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder)

{

SQLiteQueryBuilder mSQLiteQueryBuilder = new SQLiteQueryBuilder();

switch(mUriMathcer.match(uri)){

case ALARM:

mSQLiteQueryBuilder.setTables(ALARM_TABLE_NAME);

break;

}

SQLiteDatabase mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();

mSQLiteDatabase.acquireReference();

Cursor mCursor = mSQLiteQueryBuilder.query(mSQLiteDatabase, projection,

selection, selectionArgs, null, null, sortOrder);

mSQLiteDatabase.releaseReference();

return mCursor;

}

@Override

public synchronized int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs)

{

SQLiteDatabase mSQLiteDatabase = null;

int count = 0;

boolean success = false;

try{

mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();

mSQLiteDatabase.acquireReference();

success = true;

switch(mUriMathcer.match(uri)){

case ALARM:

count = mSQLiteDatabase.update(ALARM_TABLE_NAME, values,

selection, selectionArgs);

break;

default:

break;

}

}catch(SQLException e){

e.printStackTrace();

}finally{

if(success == true)

mSQLiteDatabase.releaseReference();

}

return count;

}

}

可以参考android alarm源码,query,update等方法写法基本不改什么,只替换表名。或增加一个case.

qpython3l中的androidhelper模块中有什么函数,怎么用

qputhon里面有一个qsl4a-test.py,里面有

这个

def test_alert_dialog():

title = 'User Interface'

message = 'Welcome to the SL4A integration test.'

droid.dialogCreateAlert(title, message)

droid.dialogSetPositiveButtonText('Continue')

droid.dialogShow()

response = droid.dialogGetResponse().result

return response['which'] == 'positive'

def test_alert_dialog_with_buttons():

title = 'Alert'

message = ('This alert box has 3 buttons and '

'will wait for you to press one.')

droid.dialogCreateAlert(title, message)

droid.dialogSetPositiveButtonText('Yes')

droid.dialogSetNegativeButtonText('No')

droid.dialogSetNeutralButtonText('Cancel')

droid.dialogShow()

response = droid.dialogGetResponse().result

return response['which'] in ('positive', 'negative', 'neutral')

def test_spinner_progress():

title = 'Spinner'

message = 'This is simple spinner progress.'

droid.dialogCreateSpinnerProgress(title, message)

droid.dialogShow()

time.sleep(2)

droid.dialogDismiss()

return True

def test_horizontal_progress():

title = 'Horizontal'

message = 'This is simple horizontal progress.'

droid.dialogCreateHorizontalProgress(title, message, 50)

droid.dialogShow()

for x in range(0, 50):

time.sleep(0.1)

droid.dialogSetCurrentProgress(x)

droid.dialogDismiss()

return True

def test_alert_dialog_with_list():

title = 'Alert'

droid.dialogCreateAlert(title)

droid.dialogSetItems(['foo', 'bar', 'baz'])

droid.dialogShow()

response = droid.dialogGetResponse().result

return True

def test_alert_dialog_with_single_choice_list():

title = 'Alert'

droid.dialogCreateAlert(title)

droid.dialogSetSingleChoiceItems(['foo', 'bar', 'baz'])

droid.dialogSetPositiveButtonText('Yay!')

droid.dialogShow()

response = droid.dialogGetResponse().result

return True

android源代码idreammanager在什么地方定义的

Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,下载的代码包经过解压后(这里是Android2.2的源码包),源代码的第一层目录结构如下:

|-- Makefile

|-- bionic (bionic C库)

|-- bootable (启动引导相关代码)

|-- build (存放系统编译规则及generic等基础开发包配置)

|-- cts (Android兼容性测试套件标准)

|-- dalvik (dalvik JAVA虚拟机)

|-- development (应用程序开发相关)

|-- external (android使用的一些开源的模组)

|-- frameworks (核心框架——java及C++语言)

|-- hardware (主要保护硬解适配层HAL代码)

|-- libcore

|-- ndk

|-- device

|-- out (编译完成后的代码输出与此目录)

|-- packages (应用程序包)

|-- prebuilt (x86和arm架构下预编译的一些资源)

|-- sdk (sdk及模拟器)

|-- system (文件系统库、应用及组件——C语言)

`-- vendor (厂商定制代码)

bionic 目录

|-- libc (C库)

| |-- arch-arm (ARM架构,包含系统调用汇编实现)

| |-- arch-x86 (x86架构,包含系统调用汇编实现)

| |-- bionic (由C实现的功能,架构无关)

| |-- docs (文档)

| |-- include (头文件)

| |-- inet

| |-- kernel (Linux内核中的一些头文件)

| |-- netbsd (?netbsd系统相关,具体作用不明)

| |-- private (?一些私有的头文件)

| |-- stdio (stdio实现)

| |-- stdlib (stdlib实现)

| |-- string (string函数实现)

| |-- tools (几个工具)

| |-- tzcode (时区相关代码)

| |-- unistd (unistd实现)

| `-- zoneinfo (时区信息)

|-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)

|-- libm (libm数学库的实现,)

| |-- alpha (apaha架构)

| |-- amd64 (amd64架构)

| |-- arm (arm架构)

| |-- bsdsrc (?bsd的源码)

| |-- i386 (i386架构)

| |-- i387 (i387架构?)

| |-- ia64 (ia64架构)

| |-- include (头文件)

| |-- man (数学函数,后缀名为.3,一些为freeBSD的库文件)

| |-- powerpc (powerpc架构)

| |-- sparc64 (sparc64架构)

| `-- src (源代码)

|-- libstdc++ (libstdc++ C++实现库)

| |-- include (头文件)

| `-- src (源码)

|-- libthread_db (多线程程序的调试器库)

| `-- include (头文件)

`-- linker (动态链接器)

`-- arch (支持arm和x86两种架构)

bootable 目录

|-- bootloader (适合各种bootloader的通用代码)

| `-- legacy (估计不能直接使用,可以参考)

| |-- arch_armv6 (V6架构,几个简单的汇编文件)

| |-- arch_msm7k (高通7k处理器架构的几个基本驱动)

| |-- include (通用头文件和高通7k架构头文件)

| |-- libboot (启动库,都写得很简单)

| |-- libc (一些常用的c函数)

| |-- nandwrite (nandwirte函数实现)

| `-- usbloader (usbloader实现)

|-- diskinstaller (android镜像打包器,x86可生产iso)

`-- recovery (系统恢复相关)

|-- edify (升级脚本使用的edify脚本语言)

|-- etc (init.rc恢复脚本)

|-- minui (一个简单的UI)

|-- minzip (一个简单的压缩工具)

|-- mtdutils (mtd工具)

|-- res (资源)

| `-- images (一些图片)

|-- tools (工具)

| `-- ota (OTA Over The Air Updates升级工具)

`-- updater (升级器)

build目录

|-- core (核心编译规则)

|-- history (历史记录)

|-- libs

| `-- host (主机端库,有android “cp”功能替换)

|-- target (目标机编译对象)

| |-- board (开发平台)

| | |-- emulator (模拟器)

| | |-- generic (通用)

| | |-- idea6410 (自己添加的)

| | `-- sim (最简单)

| `-- product (开发平台对应的编译规则)

| `-- security (密钥相关)

`-- tools (编译中主机使用的工具及脚本)

|-- acp (Android "acp" Command)

|-- apicheck (api检查工具)

|-- applypatch (补丁工具)

|-- apriori (预链接工具)

|-- atree (tree工具)

|-- bin2asm (bin转换为asm工具)

|-- check_prereq (检查编译时间戳工具)

|-- dexpreopt (模拟器相关工具,具体功能不明)

|-- droiddoc (?作用不明,java语言,网上有人说和JDK5有关)

|-- fs_config (This program takes a list of files and directories)

|-- fs_get_stats (获取文件系统状态)

|-- iself (判断是否ELF格式)

|-- isprelinked (判断是否prelinked)

|-- kcm (按键相关)

|-- lsd (List symbol dependencies)

|-- releasetools (生成镜像的工具及脚本)

|-- rgb2565 (rgb转换为565)

|-- signapk (apk签名工具)

|-- soslim (strip工具)

`-- zipalign (zip archive alignment tool)

dalvik目录 dalvik虚拟机

.

|-- dalvikvm (main.c的目录)

|-- dexdump (dex反汇编)

|-- dexlist (List all methods in all concrete classes in a DEX file.)

|-- dexopt (预验证与优化)

|-- docs (文档)

|-- dvz (和zygote相关的一个命令)

|-- dx (dx工具,将多个java转换为dex)

|-- hit (?java语言写成)

|-- libcore (核心库)

|-- libcore-disabled (?禁用的库)

|-- libdex (dex的库)

|-- libnativehelper (Support functions for Android's class libraries)

|-- tests (测试代码)

|-- tools (工具)

`-- vm (虚拟机实现)

development 目录 (开发者需要的一些例程及工具)

|-- apps (一些核心应用程序)

| |-- BluetoothDebug (蓝牙调试程序)

| |-- CustomLocale (自定义区域设置)

| |-- Development (开发)

| |-- Fallback (和语言相关的一个程序)

| |-- FontLab (字库)

| |-- GestureBuilder (手势动作)

| |-- NinePatchLab (?)

| |-- OBJViewer (OBJ查看器)

| |-- SdkSetup (SDK安装器)

| |-- SpareParts (高级设置)

| |-- Term (远程登录)

| `-- launchperf (?)

|-- build (编译脚本模板)

|-- cmds (有个monkey工具)

|-- data (配置数据)

|-- docs (文档)

|-- host (主机端USB驱动等)

|-- ide (集成开发环境)

|-- ndk (本地开发套件——c语言开发套件)

|-- pdk (Plug Development Kit)

|-- samples (演示程序)

| |-- AliasActivity ()

| |-- ApiDemos (API演示程序)

| |-- BluetoothChat (蓝牙聊天)

| |-- BrowserPlugin (浏览器插件)

| |-- BusinessCard (商业卡)

| |-- Compass (指南针)

| |-- ContactManager (联系人管理器)

| |-- CubeLiveWall** (动态壁纸的一个简单例程)

| |-- FixedGridLayout (像是布局)

| |-- GlobalTime (全球时间)

| |-- HelloActivity (Hello)

| |-- Home (Home)

| |-- JetBoy (jetBoy游戏)

| |-- LunarLander (貌似又是一个游戏)

| |-- MailSync (邮件同步)

| |-- MultiResolution (多分辨率)

| |-- MySampleRss (RSS)

| |-- NotePad (记事本)

| |-- RSSReader (RSS阅读器)

| |-- SearchableDictionary (目录搜索)

| |-- **JNI (JNI例程)

| |-- SkeletonApp (空壳APP)

| |-- Snake (snake程序)

| |-- SoftKeyboard (软键盘)

| |-- Wiktionary (?维基)

| `-- Wiktionary**(?维基例程)

|-- scripts (脚本)

|-- sdk (sdk配置)

|-- simulator (?模拟器)

|-- testrunner (?测试用)

`-- tools (一些工具)

2条大神的评论

  • avatar
    访客 2022-07-05 下午 11:37:52

    (Hello)| |-- Home (Home)| |-- JetBoy (jetBoy游戏)| |-- Lun

  • avatar
    访客 2022-07-06 上午 12:24:25

    (高级设置)-- Term (远程登录)`-- launchperf (?)-- build

发表评论