1. 《android源码分析实录李忠良》pdf下载在线阅读全文,求百度网盘云资源
《Android源码分析实录李忠良》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1p1F5-Rb1wcS4XRPz_SJjrQ
2. 如何用adroid studio 如何阅读android源码
在android源码中有一个目录idegen,是生成ide的project文件,主要是生成intellij的project文件,用source insight阅读Android源码,效果非常好。
过程:
效果图;
导入到android studio,打开Android studio,点击File > Open,选择刚刚生成的android.ipr就好了;
备注:
可以结合android studio,界面,智能提示都比source insight要好。
3. 如何阅读android framework源码
如何阅读android framework源码? Android源码两个部分看得最多,一个是packages,就是各个系统应用的实现,另外就是framework,框架层的实现。 具体看什么就看你想了解什么。 工具eclipse也很好,build一下生成class path,各种转跳非常方便,可以看看安卓巴士的教程:http://www.apkbus.com/thread-464819-1-1.html
4. 如何阅读Android系统源码
Android源码两个部分看得最多,一个是packages,就是各个系统应用的实现,另外就是framework,框架层的实现。 具体看什么就看你想了解什么。 工具eclipse也很好,build一下生成class path,各种转跳非常方便,不需要grep了。
5. 《Android开发精要》epub下载在线阅读,求百度网盘云资源
《Android开发精要》(范怀宇)电子书网盘下载免费在线阅读
资源链接:
链接: https://pan..com/s/1Z2VVLFczNf86yU1XyMWU7w
书名:Android开发精要
作者:范怀宇
豆瓣评分:8.1
出版社:机械工业出版社
出版年份:2012-8
页数:356
内容简介:
《Android开发精要》如何才能写出贴近Android设计理念、能够更加高效和可靠运行的Android应用?通过Android的源代码去了解其底层实现细节是最重要的方法之一!然而,Android系统太过于庞大,源代码实现复杂,学习的技术门槛和时间成本都很高。有没有一种方法既能帮助开发者深入理解Android应用开发,又能不被底层大量的实现细节所羁绊,迅速掌握编写高质量Android应用所需的知识?《Android开发精要》针对这个问题给出了完美的答案!它从Android繁杂的源代码中抽取出了Android开发的“精华”和“要点”,剥离了大量琐碎的底层实现细节,进行了高度概括和总结,不仅能帮助开发者迅速从宏观上理解整个Android系统的设计理念,而且能帮助开发者迅速从微观上掌握核心知识点的原理,从而编写出高质量的Android应用。
《Android开发精要》共13章,在逻辑上分为4个部分。第一部分(1-2章):第1章系统介绍了Android的系统架构、核心模块和设计思想,旨在让读者真正理解它的设计理念;第2章讲解了Android源代码的获取、编译、阅读和编辑的方法。第二部分(3-6章):第3章深入阐述了Android组件机制的设计理念和重要特征,并详细介绍了4大组件的方法和原理;第4章讲解了Intent对象和Android的意图机制,阐明了Android是如何将来自不同应用、不同进程的组件整合在一起的;第5章解析了Android中各个组件的生命周期,包括组件的进程模型和线程模型;第6章从开发的角度详细阐述了组件间数据传递的解决方案,以及它们的优缺点和适用场景。第三部分(7-8章):第7章深入讲解了Android的控件框架,结合实际项目对重要控件的实现和使用逐一进行了分析,还包含Android 4.0界面开发的实践“精华”;第8章分析了Android的资源体系,剖析了Android底层对资源的处理。第4部分(9-13章):第9章讲解了Android的数据存储结构,以及不同数据存储模式的使用要点;第10章分析了Android的各种网络连接方式,涵盖NFC和基于Wifi的P2P连接等内容;第11章讲解了Android的定位服务、地址解析服务、地图服务的框架实现;第12章仔细分析了Android各种多媒体功能的实现机制;第13章对Android中比较有特色的一些模块的实现细节进行了分析。
海报:
作者简介:
范怀宇,资深Android开发工程师,毕业于清华大学,从事移动开发多年,对Android系统有颇为深入的研究,开发经验十分丰富。曾就职于网易有道,负责完成了有道词典Android版、网易掌上邮Android版、网易八方Android版等项目的开发工作,现就职于豌豆实验室 ,负责豌豆荚2.0版本的设计和开发。
6. 怎样查看 Android APP 源代码
用压缩软件打开apk文件,解压出根目录中的classes.dex文件
使用cmd ,dex2jar.bat classes.dex命令将classes.dex转换为jar
再用jd-gui打开该jar就可以查看源码了,如果apk安全性好的话,有些代码是看不到的
7. 如何阅读android framework源码
首先看MediaRecorder.java内的setVideoEncoder方法:
/**
* Sets the video encoder to be used for recording. If this method is not
* called, the output file will not contain an video track. Call this after
* setOutputFormat() and before prepare().
*
* @param video_encoder the video encoder to use.
* @throws IllegalStateException if it is called before
* setOutputFormat() or after prepare()
* @see android.media.MediaRecorder.VideoEncoder
*/
public native void setVideoEncoder(int video_encoder)
throws IllegalStateException;123456789101112
这是一个native方法,根据JNI的规则,我们应该去android_media_MediaRecorder.cpp里看这个方法的实现:
static void
android_media_MediaRecorder_setVideoEncoder(JNIEnv *env, jobject thiz, jint ve)
{
ALOGV("setVideoEncoder(%d)", ve);
if (ve < VIDEO_ENCODER_DEFAULT || ve >= VIDEO_ENCODER_LIST_END) {
jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video encoder");
return;
}
sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
process_media_recorder_call(env, mr->setVideoEncoder(ve), "java/lang/RuntimeException", "setVideoEncoder failed.");
}1234567891011
关键是最后的两句,sp是Android 里的一个指针,就当没看见~ 所以最后两句的意思是调用Native层的MediaRecorder的setVideoEncoder方法。
继续去MediaRecorder.cpp里看setVideoEncoder方法:
status_t MediaRecorder::setVideoEncoder(int ve)
{
ALOGV("setVideoEncoder(%d)", ve);
if (mMediaRecorder == NULL) {
ALOGE("media recorder is not initialized yet");
return INVALID_OPERATION;
}
if (!mIsVideoSourceSet) {
ALOGE("try to set the video encoder without setting the video source first");
return INVALID_OPERATION;
}
if (mIsVideoEncoderSet) {
ALOGE("video encoder has already been set");
return INVALID_OPERATION;
}
if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
ALOGE("setVideoEncoder called in an invalid state(%d)", mCurrentState);
return INVALID_OPERATION;
}
status_t ret = mMediaRecorder->setVideoEncoder(ve);
if (OK != ret) {
ALOGV("setVideoEncoder failed: %d", ret);
mCurrentState = MEDIA_RECORDER_ERROR;
return ret;
}
mIsVideoEncoderSet = true;
return ret;
}
这里的mMediaReocorder定义在MediaRecorder.h里:
sp<IMediaRecorder> mMediaRecorder;1
可见其是一个IMediaRecorder类型的变量,这是一个接口类型,看一下其接口定义,在IMediaRecorder.h中:
class IMediaRecorder: public IInterface
{
public:
DECLARE_META_INTERFACE(MediaRecorder);
virtual status_t setCamera(const sp<hardware::ICamera>& camera,
const sp<ICameraRecordingProxy>& proxy) = 0;
virtual status_t setPreviewSurface(const sp<IGraphicBufferProcer>& surface) = 0;
virtual status_t setVideoSource(int vs) = 0;
virtual status_t setAudioSource(int as) = 0;
virtual status_t setOutputFormat(int of) = 0;
virtual status_t setVideoEncoder(int ve) = 0;
virtual status_t setAudioEncoder(int ae) = 0;
virtual status_t setOutputFile(int fd, int64_t offset, int64_t length) = 0;
virtual status_t setVideoSize(int width, int height) = 0;
virtual status_t setVideoFrameRate(int frames_per_second) = 0;
virtual status_t setParameters(const String8& params) = 0;
virtual status_t setListener(const sp<IMediaRecorderClient>& listener) = 0;
virtual status_t setClientName(const String16& clientName) = 0;
virtual status_t prepare() = 0;
virtual status_t getMaxAmplitude(int* max) = 0;
virtual status_t start() = 0;
virtual status_t stop() = 0;
virtual status_t reset() = 0;
virtual status_t pause() = 0;
virtual status_t resume() = 0;
virtual status_t init() = 0;
virtual status_t close() = 0;
virtual status_t release() = 0;
virtual status_t setInputSurface(const sp<IGraphicBufferConsumer>& surface) = 0;
virtual sp<IGraphicBufferProcer> querySurfaceMediaSource() = 0;
};
// ----------------------------------------------------------------------------
class BnMediaRecorder: public BnInterface<IMediaRecorder>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel* reply,
uint32_t flags = 0);
};3031323334353637383940414243
呐~关键的步骤来了,在以前我基本就追到这,就算完蛋了,不知道怎么继续往下追了,后来看Binder相关的内容,知道了BnInterface的作用,这是Binder中关键的一环,我们这就不展开讲了,只要记得,接下来我们要追的是BnMediaRecorder这个类。
全局搜索一下“: public BnMediaRecorder”,也就是去找它的实现类,发现在MediaRecorderClient.h当中有如下的定义:
class MediaRecorderClient : public BnMediaRecorder
{
class ServiceDeathNotifier: public IBinder::DeathRecipient
{
public:
ServiceDeathNotifier(
const sp<IBinder>& service,
const sp<IMediaRecorderClient>& listener,
int which);
virtual ~ServiceDeathNotifier();
virtual void binderDied(const wp<IBinder>& who);
private:
int mWhich;
sp<IBinder> mService;
wp<IMediaRecorderClient> mListener;
};
public:
virtual status_t setCamera(const sp<hardware::ICamera>& camera,
const sp<ICameraRecordingProxy>& proxy);
virtual status_t setPreviewSurface(const sp<IGraphicBufferProcer>& surface);
virtual status_t setVideoSource(int vs);
virtual status_t setAudioSource(int as);
virtual status_t setOutputFormat(int of);
virtual status_t setVideoEncoder(int ve);
virtual status_t setAudioEncoder(int ae);
virtual status_t setOutputFile(int fd, int64_t offset,
int64_t length);
virtual status_t setVideoSize(int width, int height);
virtual status_t setVideoFrameRate(int frames_per_second);
virtual status_t setParameters(const String8& params);
virtual status_t setListener(
const sp<IMediaRecorderClient>& listener);
virtual status_t setClientName(const String16& clientName);
virtual status_t prepare();
virtual status_t getMaxAmplitude(int* max);
virtual status_t start();
virtual status_t stop();
virtual status_t reset();
virtual status_t pause();
virtual status_t resume();
virtual status_t init();
virtual status_t close();
virtual status_t release();
virtual status_t mp(int fd, const Vector<String16>& args);
virtual status_t setInputSurface(const sp<IGraphicBufferConsumer>& surface);
virtual sp<IGraphicBufferProcer> querySurfaceMediaSource();
private:
friend class MediaPlayerService; // for accessing private constructor
MediaRecorderClient(
const sp<MediaPlayerService>& service,
pid_t pid,
const String16& opPackageName);
virtual ~MediaRecorderClient();
sp<IBinder::DeathRecipient> mCameraDeathListener;
sp<IBinder::DeathRecipient> mCodecDeathListener;
pid_t mPid;
Mutex mLock;
MediaRecorderBase *mRecorder;
sp<MediaPlayerService> mMediaPlayerService;
};303132333435363738394
那么我们去MediaRecorderClient.cpp里看看:
status_t MediaRecorderClient::setVideoEncoder(int ve)
{
ALOGV("setVideoEncoder(%d)", ve);
Mutex::Autolock lock(mLock);
if (mRecorder == NULL) {
ALOGE("recorder is not initialized");
return NO_INIT;
}
return mRecorder->setVideoEncoder((video_encoder)ve);
}12345678910
这里的mRecorder 定义在MediaRecorderClient.h当中:
MediaRecorderBase *mRecorder;1
来,我们继续搜索“: public MediaRecorderBase”,在StagefrightRecorder.h中找到了,那么我们去StagefrightRecorder.cpp当中看看~
status_t StagefrightRecorder::setVideoEncoder(video_encoder ve) {
ALOGV("setVideoEncoder: %d", ve);
if (ve < VIDEO_ENCODER_DEFAULT ||
ve >= VIDEO_ENCODER_LIST_END) {
ALOGE("Invalid video encoder: %d", ve);
return BAD_VALUE;
}
mVideoEncoder = ve;
return OK;
}123456789101112
呐,这就算完了~最后我们会发现MediaRecorder中的接口实现基本到最后都会落在这个StagefrightRecorder.cpp当中。
8. 《深入理解 Android卷 I I I》txt下载在线阅读全文,求百度网盘云资源
《深入理解Android 卷III》(张大伟)电子书网盘下载免费在线阅读
链接: https://pan..com/s/1NRSBBKYubmJsWp8DwJgRJg
书名:深入理解Android 卷III
作者:张大伟
豆瓣评分:9.0
出版社:机械工业出版社
出版年份:2015-8-1
页数:539
内容简介:
深入理解Android(卷3)》是Android经典畅销书系(对Android系统源代码的分析最为系统和细致)“深入理解Android”系列Framework卷的第III卷,从源代码的角度,对Android系统的Audio和UI两大功能的相关模块的实现原理和工作机制做了系统且详细的分析,填补了市场的空白。
《深入理解Android(卷3)》在逻辑上分为4个部分:
Part 01(第1~2章):这是本书的基础部分,首先介绍了Android源码环境的搭建、编译和调试;然后讲解了Android进程间通信与任务调度的工具Binder与MessageQueue。这两项基础工作是深入研究Android前必须做的功课。
Part 02(第3章):详细分析了AudioService服务的实现,包括音量管理、音频外设管理、AudioFocus机制的实现等内容。
Part 03(第4~6章):这是本书的核心内容之一,详细分析了Android UI的通用实现,依次剖析了WindowManagerService、Android输入系统、Android控件系统的工作原理。
Part 04(第7~8章):主要分析了SystemUI和Android壁纸相关服务的实现,包括StatusBarManagerService与NotificationManagerService两个系统服务,以及WallpaperManagerService系统服务、动态壁纸与静态壁纸的工作原理等内容。
作者简介:
张大伟,资深Android系统开发工程师,现就职于索尼移动。从2011年开始从事Android开发,专注于Android系统源代码的研究、定制与维护工作,对Android的架构设计与运行原理有着深入的认识与实践经验,其中对UI相关模块、多媒体系统尤为擅长。曾主持了Android多窗口、多任务以及单手操作等系统定制的开发工作。此外对于其他开发平台如.NET亦有相当的经验。
9. 如何在线阅读android源码
网络一下,到官方网站上去下载 iReader 【产品特色】 我的书架:仿真书架风格,打造属于用户自己的个性化电子藏书室。 本地阅读:批量导入,支持TXT, UMD, CHM, HTML/HTM, PDB, EBK2, EPUB。 时尚翻页:读触屏滑动顺畅,体验拟物化逼真的翻页感受。 网络书城:拥有丰富书籍资源,内容资源优质,频道分类全面专业。 个性设置:自定义手势、字体,背景灯风格设置,排版设置,数据备份恢复。 全文搜索:在海量书籍中方便快捷地搜索,更支持模糊搜索书名与作者。 随心操作:软件界面友好,操作简便,功能强大,适合全年龄使用。