Android4.0.1源码结构--update
- 格式:doc
- 大小:33.00 KB
- 文档页数:2
android-4.0.1源码分析wifi篇1) 在分析4.0 的代码前,我们先看⼀下 2.3.1 的wifi相关的代码结构①⾸先进⼊到 android-2.3_r1/frameworks/base/wifi ⽬录下.`-- java`-- android`-- net`-- wifi|-- IWifiManager.aidl|-- package.html|-- ScanResult.aidl|-- ScanResult.java|-- SupplicantState.java|-- WifiConfiguration.aidl|-- WifiConfiguration.java|-- WifiInfo.aidl|-- WifiInfo.java|-- WifiManager.java|-- WifiMonitor.java|-- WifiNative.java`-- WifiStateTracker.java4 directories, 13 files我们可以看到有13个⽂件,其中有 4 个 aidl , 1 个 html ⽂件, 8 个 java ⽂件. 除了 IWifiManager.aidl ⽂件外,其余3个 aidl ⽂件都只有⼀句话,那就是串⾏化这个 aidl.在 IWifiManager.aidl⽂件中/*** Copyright (c) 2008, The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package .wifi;import .wifi.WifiInfo;import .wifi.WifiConfiguration;import .wifi.ScanResult;import .DhcpInfo;import android.os.WorkSource;/*** Interface that allows controlling and querying Wi-Fi connectivity.** }*/interface IWifiManager{List<WifiConfiguration> getConfiguredNetworks();int addOrUpdateNetwork(in WifiConfiguration config);boolean removeNetwork(int netId);boolean enableNetwork(int netId, boolean disableOthers);boolean disableNetwork(int netId);boolean pingSupplicant();void startScan(boolean forceActive);List<ScanResult> getScanResults();boolean disconnect();boolean reconnect();boolean reassociate();WifiInfo getConnectionInfo();boolean setWifiEnabled(boolean enable);int getWifiEnabledState();int getNumAllowedChannels();boolean setNumAllowedChannels(int numChannels, boolean persist);int[] getValidChannelCounts();boolean saveConfiguration();DhcpInfo getDhcpInfo();boolean acquireWifiLock(IBinder lock, int lockType, String tag, in WorkSource ws);void updateWifiLockWorkSource(IBinder lock, in WorkSource ws);boolean releaseWifiLock(IBinder lock);void initializeMulticastFiltering();boolean isMulticastEnabled();void acquireMulticastLock(IBinder binder, String tag);void releaseMulticastLock();boolean setWifiApEnabled(in WifiConfiguration wifiConfig, boolean enable);int getWifiApEnabledState();WifiConfiguration getWifiApConfiguration();void setWifiApConfiguration(in WifiConfiguration wifiConfig);}我们可以看到,上⾯的 aidl 主要是与通迅相关的内容,这层肯定与硬件相关,java 代码是⽆法直接和硬件联系的,所以只好放⼊到 aidl ⽂件中.下⾯,我们可以看下其他的 java ⽂件.我们先看⼀下 SupplicantState.java 这个 java ⽂件.package .wifi;import android.os.Parcel;import android.os.Parcelable;public enum SupplicantState implements Parcelable {DISCONNECTED,INACTIVE,SCANNING,ASSOCIATING,ASSOCIATED,FOUR_WAY_HANDSHAKE,GROUP_HANDSHAKE,OMPLETED,DORMANT,UNINITIALIZED,INVALID;/*** Returns true} if the supplicant state is valid and false}* otherwise.* @param state The supplicant state* @return true} if the supplicant state is valid and false}* otherwise.*/public static boolean isValidState(SupplicantState state) {return state != UNINITIALIZED && state != INVALID;}/** Implement the Parcelable interface } */public int describeContents() {return 0;}/** Implement the Parcelable interface } */public void writeToParcel(Parcel dest, int flags) {dest.writeString(name());}/** Implement the Parcelable interface } */public static final Creator<SupplicantState> CREATOR =new Creator<SupplicantState>() {public SupplicantState createFromParcel(Parcel in) {return SupplicantState.valueOf(in.readString());}public SupplicantState[] newArray(int size) {return new SupplicantState[size];}};}以上代码主要是取得 wpa_supplicant的状态及其状态定义相关的代码.下⾯我们来看看 ScanResult.java 的代码package .wifi;import android.os.Parcelable;import android.os.Parcel;public class ScanResult implements Parcelable {/** The network name. */public String SSID;/** The address of the access point. */public String BSSID;/*** Describes the authentication, key management, and encryption schemes * supported by the access point.*/public String capabilities;/*** The detected signal level in dBm. At least those are the units used by* the TI driver.*/public int level;/*** The frequency in MHz of the channel over which the client is communicating* with the access point.*/public int frequency;/*** We'd like to obtain the following attributes,* but they are not reported via the socket* interface, even though they are known* internally by wpa_supplicant.* }*/public ScanResult(String SSID, String BSSID, String caps, int level, int frequency) { this.SSID = SSID;this.BSSID = BSSID;this.capabilities = caps;this.level = level;this.frequency = frequency;//networkConfig = null;}@Overridepublic String toString() {StringBuffer sb = new StringBuffer();String none = "<none>";sb.append("SSID: ").append(SSID == null ? none : SSID).append(", BSSID: ").append(BSSID == null ? none : BSSID).append(", capabilities: ").append(capabilities == null ? none : capabilities).append(", level: ").append(level).append(", frequency: ").append(frequency);return sb.toString();}/** Implement the Parcelable interface } */public int describeContents() {return 0;}/** Implement the Parcelable interface } */public void writeToParcel(Parcel dest, int flags) {dest.writeString(SSID);dest.writeString(BSSID);dest.writeString(capabilities);dest.writeInt(level);dest.writeInt(frequency);}/** Implement the Parcelable interface } */public static final Creator<ScanResult> CREATOR =new Creator<ScanResult>() {public ScanResult createFromParcel(Parcel in) {return new ScanResult(in.readString(),in.readString(),in.readString(),in.readInt(),in.readInt());}public ScanResult[] newArray(int size) {return new ScanResult[size];}};}上⾯的代码主要是对搜索结果的处理.接下来,我们来看⼀下 WifiInfo.java ⽂件package .wifi;import android.os.Parcelable;import android.os.Parcel;import workInfo.DetailedState;import java.util.EnumMap;/*** Describes the state of any Wifi connection that is active or* is in the process of being set up.*/public class WifiInfo implements Parcelable {/*** This is the map described in the Javadoc comment above. The positions* of the elements of the array must correspond to the ordinal values* of <code>DetailedState</code>.*/private static final EnumMap<SupplicantState, DetailedState> stateMap =new EnumMap<SupplicantState, DetailedState>(SupplicantState.class);static {stateMap.put(SupplicantState.DISCONNECTED, DetailedState.DISCONNECTED);stateMap.put(SupplicantState.INACTIVE, DetailedState.IDLE);stateMap.put(SupplicantState.SCANNING, DetailedState.SCANNING);stateMap.put(SupplicantState.ASSOCIATING, DetailedState.CONNECTING);stateMap.put(SupplicantState.ASSOCIATED, DetailedState.CONNECTING);stateMap.put(SupplicantState.FOUR_WAY_HANDSHAKE, DetailedState.AUTHENTICATING); stateMap.put(SupplicantState.GROUP_HANDSHAKE, DetailedState.AUTHENTICATING);stateMap.put(PLETED, DetailedState.OBTAINING_IPADDR);stateMap.put(SupplicantState.DORMANT, DetailedState.DISCONNECTED);stateMap.put(SupplicantState.UNINITIALIZED, DetailedState.IDLE);stateMap.put(SupplicantState.INVALID, DetailedState.FAILED);}private SupplicantState mSupplicantState;private String mBSSID;private String mSSID;private int mNetworkId;private boolean mHiddenSSID;/** Received Signal Strength Indicator */private int mRssi;/** Link speed in Mbps */public static final String LINK_SPEED_UNITS = "Mbps";private int mLinkSpeed;private int mIpAddress;private String mMacAddress;WifiInfo() {mSSID = null;mBSSID = null;mNetworkId = -1;mSupplicantState = SupplicantState.UNINITIALIZED;mRssi = -9999;mLinkSpeed = -1;mIpAddress = 0;mHiddenSSID = false;}void setSSID(String SSID) {mSSID = SSID;// network is considered not hidden by defaultmHiddenSSID = false;}/*** Returns the service set identifier (SSID) of the current 802.11 network.* If the SSID is an ASCII string, it will be returned surrounded by double* quotation marks.Otherwise, it is returned as a string of hex digits. The* SSID may be null} if there is no network currently connected.* @return the SSID*/public String getSSID() {return mSSID;}void setBSSID(String BSSID) {mBSSID = BSSID;}/*** Return the basic service set identifier (BSSID) of the current access point.* The BSSID may be null} if there is no network currently connected.* @return the BSSID, in the form of a six-byte MAC address: XX:XX:XX:XX:XX:XX} */public String getBSSID() {return mBSSID;}/*** Returns the received signal strength indicator of the current 802.11* network.* <p><strong>This is not normalized, but should be!</strong></p>* @return the RSSI, in the range to*/public int getRssi() {return mRssi;}void setRssi(int rssi) {mRssi = rssi;}/*** Returns the current link speed in #LINK_SPEED_UNITS}.* @return the link speed.* @see #LINK_SPEED_UNITS*/public int getLinkSpeed() {return mLinkSpeed;}void setLinkSpeed(int linkSpeed) {this.mLinkSpeed = linkSpeed;}/*** Record the MAC address of the WLAN interface* @param macAddress the MAC address in XX:XX:XX:XX:XX:XX} form*/void setMacAddress(String macAddress) {this.mMacAddress = macAddress;}public String getMacAddress() {return mMacAddress;}void setNetworkId(int id) {mNetworkId = id;}/*** Each configured network has a unique small integer ID, used to identify* the network when performing operations on the supplicant. This method* returns the ID for the currently connected network.* @return the network ID, or -1 if there is no currently connected network*/public int getNetworkId() {return mNetworkId;}/*** Return the detailed state of the supplicant's negotiation with an* access point, in the form of a SupplicantState SupplicantState} object.* @return the current SupplicantState SupplicantState}*/public SupplicantState getSupplicantState() {return mSupplicantState;}void setSupplicantState(SupplicantState state) {mSupplicantState = state;}void setIpAddress(int address) {mIpAddress = address;}public int getIpAddress() {return mIpAddress;}/*** @return true} if this network does not broadcast its SSID, so an* SSID-specific probe request must be used for scans.*/public boolean getHiddenSSID() {return mHiddenSSID;}/** } */public void setHiddenSSID(boolean hiddenSSID) {mHiddenSSID = hiddenSSID;}/*** Map a supplicant state into a fine-grained network connectivity state.* @param suppState the supplicant state* @return the corresponding DetailedState}*/public static DetailedState getDetailedStateOf(SupplicantState suppState) {return stateMap.get(suppState);}/*** Set the <code>SupplicantState</code> from the string name* of the state.* @param stateName the name of the state, as a <code>String</code> returned * in an event sent by wpa_supplicant}.*/void setSupplicantState(String stateName) {mSupplicantState = valueOf(stateName);}static SupplicantState valueOf(String stateName) {if ("4WAY_HANDSHAKE".equalsIgnoreCase(stateName))return SupplicantState.FOUR_WAY_HANDSHAKE;else {try {return SupplicantState.valueOf(stateName.toUpperCase());} catch (IllegalArgumentException e) {return SupplicantState.INVALID;}}}@Overridepublic String toString() {StringBuffer sb = new StringBuffer();String none = "<none>";sb.append("SSID: ").append(mSSID == null ? none : mSSID).append(", BSSID: ").append(mBSSID == null ? none : mBSSID).append(", MAC: ").append(mMacAddress == null ? none : mMacAddress).append(", Supplicant state: ").append(mSupplicantState == null ? none : mSupplicantState).append(", RSSI: ").append(mRssi).append(", Link speed: ").append(mLinkSpeed).append(", Net ID: ").append(mNetworkId);return sb.toString();}/** Implement the Parcelable interface } */public int describeContents() {return 0;}/** Implement the Parcelable interface } */public void writeToParcel(Parcel dest, int flags) {dest.writeInt(mNetworkId);dest.writeInt(mRssi);dest.writeInt(mLinkSpeed);dest.writeInt(mIpAddress);dest.writeString(getSSID());dest.writeString(mBSSID);dest.writeString(mMacAddress);mSupplicantState.writeToParcel(dest, flags);}/** Implement the Parcelable interface } */public static final Creator<WifiInfo> CREATOR =new Creator<WifiInfo>() {public WifiInfo createFromParcel(Parcel in) {WifiInfo info = new WifiInfo();info.setNetworkId(in.readInt());info.setRssi(in.readInt());info.setLinkSpeed(in.readInt());info.setIpAddress(in.readInt());info.setSSID(in.readString());info.mBSSID = in.readString();info.mMacAddress = in.readString();info.mSupplicantState = SupplicantState.CREATOR.createFromParcel(in); return info;}public WifiInfo[] newArray(int size) {return new WifiInfo[size];}};}接下来,我们来看⼀下 WifiMonitor.java 这个⽂件.②③④⑤⑥⑦⑧⑨⑩云计算开发平台① WSO2的应⽤服务器② ③ ④环境搭建。
环境Linux 版本:Ubuntu 11.04 (可由10.10的版本进行升级)64位系统GCC版本:gcc version 4.5.2Java版本:java version "1.6.0_26"下载android源码前注意:1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。
2、保证Ubuntu系统进行Internet访问。
联网方法:采用拨号进行连接。
相关操作步骤如下所示:1、虚拟机→设置→硬件→网络适配器→网络连接→桥接2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下:$ pppoeconf //打开后输入上网账号跟密码,确认保存$ sudo pon dsl-provider //上网连接命令经过这两个步骤后就可以进行上网了。
Android源码编译所依赖的tools01.$ sudo apt-get update02.$ sudo apt-get -y install git-core03.$ sudo apt-get -y install gnupg04.$ sudo apt-get -y install sun-java6-jdk flex05.$ sudo apt-get -y install bison06.$ sudo apt-get -y install gperf07.$ sudo apt-get -y install libsdl-dev08.$ sudo apt-get -y install libesd0-dev09.$ sudo apt-get -y install libwxgtk2.6-dev10.$ sudo apt-get -y install build-essential11.$ sudo apt-get -y install zip12.$ sudo apt-get -y install curl13.$ sudo apt-get -y install libncurses5-dev14.$ sudo apt-get -y install zlib1g-dev15.$ sudo apt-get -y install valgrind注意:(如果是32bit的系统的话,则要更改几个Android.mk文件)01./external/clearsilver/cgi/Android.mk02./external/clearsilver/java-jni/Android.mk03./external/clearsilver/util/Android.mk04./external/clearsilver/cs/Android.mk用gedit打开,修改m64为m32即可另外将build/core/main.mk中的ifneq (64,$(findstring 64,$(build_arch)))修改为:ifneq (i686,$(findstring i686,$(build_arch)))对于32位系统所出现的问题,解决方法:Error1:make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1在terminal中输入$ gedit frameworks/base/libs/utils/Android.mk将LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)修改为:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissiveError2:make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的修改源码目录下/build/core/combo/HOST_linux-x86.mk并将以下语句:HOST_GLOBAL_CFLAGS+= -D_FORTIFY_SOURCE=0修改为:HOST_GLOBAL_CFLAGS+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0Android源码下载1、安装repo安装过程步骤如下所示:Repo下载安装1、$ mkdir ~/bin //在home目录下创建bin文件夹2、$ PATH=~/bin:$PA TH //环境变量设置3、$ curl https:///dl/googlesource/git-repo/repo > ~/bin/repo //repo下载4、$ chmod a+x ~/bin/repo //权限设置,保证repo可执行Repo client初始化1、$ mkdir Android //创建Android目录,用于存放下载的android源码2、$ cd Android //进入到Android目录3、$ repo init -u https:///platform/manifest //指定URL清单,指定包含在Android源代码的各种存储库将被安置在工作目录中当然也可以指定android版本,使用如下命令:$ repo init -u https:///platform/manifest -b android-4.0.1_r1Android源码文件获取$ repo sync注意:在Android源码下载过程中凡出现问题,可以进入Android源码下载的相关官方网站/source/downloading.html 进行查看。
Android源码分析⼀Android系统架构⼀ Android系统架构1. Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这⼀层为Android设备各种硬件提供了底层驱动,如显⽰驱动、⾳频驱动、照相机驱动、蓝⽛驱动、Wi-Fi驱动、电源管理等;2. 硬件抽象层(android hardware abstraction layer):安卓驱动硬件的⽅式与Linux不尽相同。
传统Linux的驱动完全存活于内核空间。
Android则在内核外部增加了硬件抽象层(HAL, Hardware Abstraction Layer),把⼀部分驱动功能放到HAL层中。
安卓为什么费尽⿇烦增加⼀个HAL呢?为了保护源代码。
Linux内核采⽤了GPL协议,所以硬件⽣产商想要⽀持Linux系统,必须遵照GPL协议公开硬件驱动的源代码。
但这些源代码中包含有许多硬件的设计信息,牵涉到硬件⽣产商的核⼼利益。
⽽增加了HAL层之后,硬件⼚商就不需要开放所有的驱动代码了。
3. 系统运⾏库层(libraries):这⼀层通过⼀些C/C++库(so库)来为Android系统提供了主要的特性⽀持。
如SQLite库提供了数据库⽀持,OpenGL ES库提供了3D绘图⽀持,Webkit库提供了浏览器内核⽀持等;4. 应⽤框架层(application framework):这⼀层主要提供构建应⽤程序时可能⽤到的各种API,Android⾃带的⼀些核⼼应⽤就是使⽤这些API完成的,开发者也可通过使⽤API来构建⾃⼰的应⽤程序;a) Activity Manager(活动管理器)管理各个应⽤程序⽣命周期以及通常的导航回退功能b) Window Manager(窗⼝管理器)管理所有的窗⼝程序c) Content Provider(内容提供器)使得不同应⽤程序之间存取或者分享数据d) View System(视图系统)构建应⽤程序的基本组件e) Notification Manager(通告管理器)使得应⽤程序可以在状态栏中显⽰⾃定义的提⽰信息f) Package Manager(包管理器)Android系统内的程序管理g)Telephony Manager(电话管理器)管理所有的移动设备功能h)Resource Manager(资源管理器)提供应⽤程序使⽤的各种⾮代码资源,如本地化字符串、图⽚、布局⽂件、颜⾊⽂件等i)Location Manager(位置管理器)提供位置服务j)XMPP Service(XMPP服务)提供Google Talk服务1. 应⽤层(applications):这⼀层主要⽤于⼿机应⽤的安装,如系统⾃带联系⼈、短信等程序,或是第三⽅应⽤程序 6.Android运⾏时库(Android Runtime)ART以上为五层五区,还有⼀个区域是存在于libraries层的Android运⾏时库(Android Runtime)ART,它主要提供⼀些核⼼库,能够允许开发者使⽤Java语⾔来编写Android应⽤。
安卓4.0系统文件夹全解析2012-05-26 01:15:23| 分类:学习|字号订阅现在android的版本有好几个,会存在不同之处,但里面的内容大致相同,灵活应用才是王道。
\system\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。
在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。
\system\bin这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)\system\etc从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
\system\fonts字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小。
\system\frameworkframework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
\system\liblib目录中存放的主要是系统底层库,一些so文件,如平台运行时库。
\system\media\system\media\audio铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音。
\system\sounds默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。
\system\usr用户文件夹,包含共享、键盘布局、时间区域文件等。
\system\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。
在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。
\system\app\AlarmClock.apk 闹钟\system\app\AlarmClock.odex\system\app\Browser.apk 浏览器\system\app\Browser.odex\system\app\Bugreport.apk Bug报告\system\app\Bugreport.odex\system\app\Calculator.apk 计算器\system\app\Calculator.odex\system\app\Calendar.apk 日历\system\app\Calendar.odex\system\app\CalendarProvider.apk 日历提供\system\app\CalendarProvider.odex\system\app\Camera.apk 照相机\system\app\Camera.odex\system\app\com.amazon.mp3.apk 亚马逊音乐\system\app\Contacts.apk 联系人\system\app\Contacts.odex\system\app\DownloadProvider.apk 下载提供\system\app\DownloadProvider.odex\system\app\DrmProvider.apk DRM数字版权提供\system\app\DrmProvider.odex\system\app\Email.apk 电子邮件客户端\system\app\Email.odex\system\app\FieldTest.apk 测试程序\system\app\FieldTest.odex\system\app\GDataFeedsProvider.apk GoogleData提供\system\app\GDataFeedsProvider.odex\system\app\Gmail.apk Gmail电子邮件\system\app\Gmail.odex\system\app\GmailProvider.apk Gmail提供\system\app\GmailProvider.odex\system\app\GoogleApps.apk 谷歌程序包\system\app\GoogleApps.odex\system\app\GoogleSearch.apk 搜索工具\system\app\GoogleSearch.odex\system\app\gtalkservice.apk GTalk服务\system\app\gtalkservice.odex\system\app\HTMLViewer.apk HTML查看器\system\app\HTMLViewer.odex\system\app\IM.apk 即使通讯组件包含MSN、yahoo通\system\app\ImCredentialProvider.apk\system\app\ImProvider.apk\system\app\ImProvider.odex\system\app\Launcher.apk 启动加载器\system\app\Launcher.odex\system\app\Maps.apk 电子地图\system\app\Maps.odex\system\app\MediaProvider.apk 多媒体播放提供\system\app\MediaProvider.odex\system\app\Mms.apk 短信、彩信\system\app\Mms.odex\system\app\Music.apk 音乐播放器\system\app\Music.odex\system\app\MyFaves.apk T-Mobile MyFaves程序\system\app\MyFaves.odex\system\app\PackageInstaller.apk apk安装程序\system\app\PackageInstaller.odex\system\app\Phone.apk 电话拨号器\system\app\Phone.odex\system\app\Settings.apk 系统设置\system\app\Settings.odex\system\app\SettingsProvider.apk 设置提供\system\app\SettingsProvider.odex\system\app\SetupWizard.apk 设置向导\system\app\SetupWizard.odex\system\app\SoundRecorder.apk 录音工具\system\app\SoundRecorder.odex\system\app\Street.apk 街景地图\system\app\Street.odex\system\app\Sync.apk 同步程序\system\app\Sync.odex\system\app\Talk.apk 语音程序\system\app\Talk.odex\system\app\TelephonyProvider.apk 电话提供\system\app\TelephonyProvider.odex\system\app\Updater.apk 更新程序\system\app\Updater.odex\system\app\Vending.apk 制造商信息\system\app\Vending.odex\system\app\VoiceDialer.apk 语音拨号器\system\app\VoiceDialer.odex\system\app\**.apk **视频\system\app\**.odex\system\bin这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件:\system\bin\akmd\system\bin\am\system\bin\app_process 系统进程\system\bin\dalvikvm Dalvik虚拟机宿主\system\bin\dbus-daemon 系统BUS总线监控\system\bin\debuggerd 调试器\system\bin\debug_tool 调试工具\system\bin\dexopt DEX选项\system\bin\dhcpcd DHCP服务器\system\bin\dumpstate 状态抓取器\system\bin\dumpsys 系统抓取器\system\bin\dvz\system\bin\fillup\system\bin\flash_image 闪存映像\system\bin\hciattach\system\bin\hcid HCID内核\system\bin\hostapd\system\bin\hostapd_cli\system\bin\htclogkernel\system\bin\input\system\bin\installd\system\bin\itr\system\bin\linker\system\bin\logcat Logcat日志打印\system\bin\logwrapper\system\bin\mediaserver\system\bin\monkey\system\bin\mountd 存储挂载器\system\bin\netcfg 网络设置\system\bin\ping Ping程序\system\bin\playmp3 MP3播放器\system\bin\pm 包管理器\system\bin\qemud QEMU虚拟机\system\bin\radiooptions 无线选项\system\bin\rild RIL组件\system\bin\sdptool\system\bin\sdutil\system\bin\service\system\bin\servicemanager 服务管理器\system\bin\sh\system\bin\ssltest SSL测试\system\bin\surfaceflinger 触摸感应驱动\system\bin\svc 服务\system\bin\system_server\system\bin\telnetd Telnet组件\system\bin\toolbox\system\bin\wlan_loader\system\bin\wpa_cli\system\bin\wpa_supplicant\system\etc从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
Android开发环境搭建在网上找各种解决办法,无奈,都是互相转帖,要错大家一起错,而且都是老版本的安装方法,虽然没有太大差别,但小的差异还是搞得人很头痛,因为有时候就是一点不同就要找好长时间解决方法,我现在把我的安装历程发布出来,供大家分享,当然版本再更新的话我也不能保证就完全正确,只能保证现在的版本完全没问题。
因为现在的android版本与原来的版本有一定的区别,所以我在2.2的基础上改了一下,现在可以安装到4.0安装JDK这个在上一篇中已经介绍过了,注意JDK的版本为1.5或者1.6都可以就行了,推荐使用1.6版本,因为它要比以前快得多。
还有JAVA_HOME的设置。
用set JAVA_HOME命令检查一下就行了。
SDK 4.0安装今年Google离开大陆,导致登陆他们的网站会比较麻烦,一般情况下是登陆不上去的,需要翻墙,大家都懂的,我不多说,如果能登上/sdk/index.html那是最好,如果登不上也没关系,能下的地方好多,上百度上搜有很多,而且下载都很快,我下载的是android-sdk_r07-windows.zip,一下安装也是以它为例。
下载好后,随便解压到一个地方,目录结构如图所示:此处SDK Manager.exe和以前版本略有区别,以前是SDK Setup.exe,功能都一样,双击它。
(我们下载的也不是完整的SDK,只是一个安装SDK的工具)双击之后我们会看到如下的界面:左侧是我们要安装的SDK目录,如果你的网络够快而且空间不是特别少的话,选择Accept All,然后Install,开始漫长的在线安装:我是没有试过,据说要6小时左右,当时有事要出去,没有时间等这么久,于是找了另一个方法,就是离线安装,效果都一样。
提醒:可能有的时候在线连接连不上,我们可以再Settings中在Force打勾:其实只要点击Install后,我们在刚才解压的文件夹下就会发现多了一个temp文件夹,没错,这就是刚才下载的东西,我们就是通过它来进行离线安装的。
Android4.1.4 编译1、下载源码:我是在ics版本的基础上通过repo sync更新,发现有了an droid 4_1_r1的分支,等待更新完,repobranch切换分支,然后.Build/envsetup.she然后lunchi选择full-eng最后make,过一会报错。
提示:build/core/product_config.mk:193:***_nic.PRODUCTS.[[build/target/product/v box_x86.mk]]:"frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk" does not exist. Stop.** Don't have a product spec for:'full'** Do you have the right repo manifest?Google baidu bing 了大半天终于在an droid的bug单中找到了这条bug,解答是源码不全。
愁了半天,repo sync都是最新的,愁了半天,最后再ics的repo 中重新下了个android4.1.4的分支。
repoinit-uhttps:4.1.1_r4repo sync下载3个小时,终于下载完成,本来下载源码需要很长时间5〜10个小时,由于再ics的基础上下载,只需要把patch下载就行了(repo会自动完成)。
兴奋啊,赶紧.Build/envsetup.shlunch 1 full-eng/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux-androideabi-gcc: 无法执行二进制文件/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux-androideabi-gcc: 无法执行二进制文件/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux-androideabi-gcc: 无法执行二进制文件先没管它,继续机制行make clean make -j8 过了几分钟提示错误:hostStaticLib: libhost(out/host/linux- x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a)ERROR:prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-ar only run on 64-bit linuxmake:***[out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a] 错误 1host C:emulator-target-i386 <= external/qemu/cpus.chost C:emulator-target-i386 <= external/qemu/arch_init.chost C:emulator-target-i386 <= external/qemu/os-posix.chost C:emulator-target-i386 <= external/qemu/oslib-posix.chost C:emulator64-arm <= external/qemu/audio/audio.chost C:emulator64-arm <= external/qemu/disas.cERROR:prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux- glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linuxmake:*** [out/host/linux-x86/obj/EXECUTABLES/emulator64- arm_intermediates/disas.o] Error 1make:*** Waiting for unfinished jobs ...ERROR:prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux- glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linuxmake:*** [out/host/linux-x86/obj/EXECUTABLES/emulator64-arm_intermediates/audio/audio.o] Error 1又陷入郁闷,googlebaidu 了好半天,都没找到解决方案,不过找到了提示,就是谷歌推荐使用64 位的ubuntu10.04 来编译,很多配置都是基于64来的,所以32位系统编译会遇到很多问题。
androidstudio4.01默认使⽤gradle版本及其⼯程本地配置gradle⽅法android studio 4.01默认使⽤gradle版本及其⼯程本地配置gradle⽅法1.升级android studio 为最新版本,⼀般会使⽤原来的androdi ⼯程经常会出现如下提⽰Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout)2.⽬前更新android studio为4.01,⼀般⼯程默认使⽤的gradle版本为4.01,见⼯程配置⽂件(build.gradle):// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:4.0.1'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}}allprojects {repositories {google()jcenter()}}task clean(type: Delete) {delete rootProject.buildDir}如果在android studio ⼯程中配置gradle版本为上⾯的4.0.1,则实际下载的gradle⽂件版本gradle-6.1.1-all.zip,详见gradle-wrapper.properties⽂件配置:#Tue Sep 15 18:54:48 CST 2020distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/dists#这个该死的在线下载地址⼀定要注掉,否则每次同步编译龟速,#distributionUrl=https\:///distributions/gradle-6.1.1-all.zip#假定下载gradle⽂件存放在本地⽂件⽬录(c:/gradle)distributionUrl=file:///C:/gradle/gradle-6.1.1-all.zip为了解决android⾸次建⽴⼯程然后编译或同步⽽龟速的问题,建议使⽤本地gradle配置,以免android stduio开发idem每次⾃动下载gradle,影响编译或同步速度。
台电P85/P85HD/P88及Android4.1.1系统内置程序精简列表
1、精简原因:平板固件总是蛋疼,开机慢、假死、低电量闪屏、低电量关机、等等问题层出不穷。
但是官网固件版本一直不更新。
虽然我们不是什么大神,可以自己优化固件,但是精简固件这个还是能简单做到的,而且效果还是比较明显的,至少我的机子现在什么问题都没有了。
2、多番查找资料、综合对比、再加上实战亲测,终于取得真经。
3、此列表仅提供参考,精简是看个人需要,没必要跟着别人删。
弄清楚自己的需求。
系统总共86项程序,每项都注明了作用,没有作用的都是些可有可无的,或者可以用个人能更好的第三方软件替代。
譬如玩那游戏的谷歌服务慎重删除,我不玩游戏不用谷歌所以全砍掉。
再譬如平时都是用来游戏、视频、听歌、上网之类的,很少有人会不用手机打电话偏偏用平板外挂3G卡去打电话吧,所以通讯录打电话之类的我也都砍掉。
4、精简掉的、其实都可以用re管理器还原回去的,一般没必要弄到刷机那么麻烦。
Linux Kernel for Android 4.0--- 初稿 2011-11-251. android 4.0 system be released2011-10-19上午10点,google发布了代号为Ice Cream Sandwich(简称ICS,冰淇淋三明治)的android4.0系统。
十大特性:…4)、同步升级Linux内核更新3.0以上版本…2. linux kernel3.0源码下载:ftp:///pub/linux/kernel/v3.0/2.1.发布时间:2011-07-212.2.版本号变化:Linux2.6.39 ----》 linux3.0无里程碑式的变化。
一种说法是为了纪念Linux 20年,迈向第3个10年。
2.3.主要新特性如下:更新日志:/Linux_3.01)、Btrfs文件系统自动碎片整理、性能改进和检查;Btrfs(Butter FS),目标在取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件的大小,总文件系统大小及加入文件校验和。
已在ubuntu10.10、openSUSE11.3和Fedora 16中得到了应用。
2)、支持sendmmsg()系统调用(syscall);一个批处理sendmsg()系统调用,UDP发送性能提升20%,接口发送性能提30%.3)、XEN dom0 支持;Xen 是一个高性能的虚拟化解决方案,可提升虚拟机性能。
4)、增加 Cleancache 支持;封装的相关内核API,目前内核中主要在ext3、ext4、btrfs、ocsfs2等文件系统部分相关代码中有调用。
5)、Berkeley 即时包过滤器;配合libpcap/tcpdump提升包过滤规则的运行效率。
6)、无线广域网(WLAN)唤醒支持;7)、实现非特殊授权的 ICMP_ECHO (ping 命令);8)、支持setns()系统调用(syscall);更好地命名空间管理。
ubuntu 下编译android4.0(顺便谈谈国产平板android4.0一些被误解的观点)其实,android 4.0发布之后的几天就想编译出来体验一下ICS,事情多得一直拖到今天,另外一些误导人的传闻越来越凶,说什么编译环境最低要求memory为16G。
今天就拿实验室的机器跑了一通,编译无不良反映,一切正常。
简单说说机器的环境:1CPU:i7 2600(8线程)2Memory:4G3System:ubuntu 10.04(64位)虽然说机器的内存相对于CPU来说偏低了,但是我之前编译android 2.3时,也就半个小时左右。
ICS的话,估计也能完成,时间问题而已。
至于为什么用ubuntu 10.04 (64位),因为学校用的是史上最变态无聊的drcom,没找到ubuntu 11.10的64位版本,32位倒是有。
还有一点的是ubuntu 11.10的gcc版本更新了,编译过程中会出现一些errors,不过很简单就可以解决的。
Android 4.0的源代码压缩包可以去去下载,下载后解压缩(tar vxzf)即可,解压之后一共有4.7G。
4build/core/main.mk编译之前要安装一些依赖包什么的,还有JDK之类的东西。
因为之前编译过android的源代码,机器已经安装了,而且是64bit的系统,所以在terminal转到源代码目录下,直接make即可,要修改编译中分配的线程的话,make –jN即可,N为线程数。
e.g :5make –j6-------------编译准备工作------------------------------------------------------------------附上需要安装的依赖:6$ sudo apt-get update7$ sudo apt-get -y install git-core8$ sudo apt-get -y install gnupg9$ sudo apt-get -y install sun-java6-jdk flex10$ sudo apt-get -y install bison11$ sudo apt-get -y install gperf12$ sudo apt-get -y install libsdl-dev13$ sudo apt-get -y install libesd0-dev14$ sudo apt-get -y install libwxgtk2.6-dev15$ sudo apt-get -y install build-essential16$ sudo apt-get -y install zip17$ sudo apt-get -y install curl18$ sudo apt-get -y install libncurses5-dev19$ sudo apt-get -y install zlib1g-dev20$ sudo apt-get -y install valgrind(如果是32bit的系统的话,则要更改几个Android.mk文件)21/external/clearsilver/cgi/Android.mk22/external/clearsilver/java-jni/Android.mk23/external/clearsilver/util/Android.mk24/external/clearsilver/cs/Android.mk用gedit打开,修改m64为m32即可另外25build/core/main.mk也要把26ifneq (64,$(findstring 64,$(build_arch)))修改为27ifneq (i686,$(findstring i686,$(build_arch)))----------------编译过程------------------------------------------------------------------在terminal中28$make编译开始……可以看到platform version为4.0.1,然后开始漫长的等待。
第一级目录如下:
|-- abi
|-- Makefile (全局的Makefile)
|-- bionic (Bionic C库)
|-- bootable (引导相关代码)
|-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)|-- cts (Android兼容性测试套件标准)
|-- dalvik (JA V A虚拟机)
|-- development (程序开发所需要的模板和工具)
|-- device (设备)
|-- docs (文档)
|-- external (目标机器使用的一些库,android使用的一些开源的模组)
|-- frameworks (应用程序的框架层核心框架)
|-- hardware (部分厂家开源的硬解适配层HAL代码)
|-- libcore (核心库)
|-- ndk (本地开发工具包)
|-- out (编译完成后的代码输出与此目录)
|-- packages (Android的各种应用程序)
|-- prebuilt (Android在各种平台下编译的预置脚本)
|-- sdk (sdk及模拟器)
|-- system (底层文件系统库、应用及组件——C语言)
|-- V8.log
Package目录展开:
|-- apps (应用程序库)
|-- inputmethods (输入法)
|-- providers (提供器,提供应用程序、界面所需的数据)
|-- wallpapers (墙纸)
|-- experimental
Apps目录展开:
BasicSmsReceiver 基本短信接收器
Bluetooth 蓝牙
Browser 浏览器
Calculator 计算器
Calendar 日历
Camera 照相机
CellBroadcastReceiver 微型广播接收器
Certinstaller 在Android中安装数字签名,被调用
Contacts (拨号(调用)、联系人、通话记录)
Deskclock 桌面时钟
Email 邮件
Exchange 兑换表
Gallery 相册
Gallery2 3d相册
HTMLViewer (浏览器附属界面,被浏览器应用调用,同时提供存储记录功能)Keychain 钥匙链
Launcher2 (登陆启动项,负责应用的调用)
Mms (彩信业务)
Music (音乐播放器)
Musicfx (音频增强)
Nfc 近距离无线通讯
PackageInstaller (安装、卸载程序的响应)
Phone (电话拨号程序)
Protips 安卓机器人
Provision (预设应用的状态,使能应用)
Quicksearchbox 全局搜索
Settings (开机设定,包括电量、蓝牙、设备信息、界面、wifi等)SoundRecorder (录音机,可计算存储所需空间和时间)
Spareparts 修改界面细节的工具
SpeechRecorder (录音机,可计算存储所需空间和时间)
Stk (接收和发送短信)
Tag 标签
Videoeditor 影音编辑器
Voicedialer 语音识别通话。