初学者学习 Android 开发,有什么好网站推荐
发布时间:2025-05-13 17:23:31 发布人:远客网络
一、初学者学习 Android 开发,有什么好网站推荐
初学者学习Android开发,推荐的网站及资源如下:
1. Android Developers-官方文档,提供全面的Android开发指南和技术参考。
2. Stack Overflow-遇到问题时,总能在Stack Overflow找到答案。
3.投票最多的几个问题-空闲时浏览投票最高的问题,学习他人解决Android开发常见问题的经验。
4.订阅博客-关注中文博客:android-developers.blogspot.com、blog.csdn.net/innost、blog.csdn.net/luoshengy...、blog.csdn.net/Android_T...、blog.csdn.net/hellogv,以及英文博客:cyrilmottier.com、curious-creature.org。
5. Google+-关注Android领域专家,如Dianne Hackborn、Romain Guy、Chris Banes、Roman Nurik、Nick Butcher、Adam Powell、Rich Hyndman、Cyril Mottier、Paul Burke、Jeff Gilfelt、Jake Wharton等。
6.邮件列表-订阅Android Weekly邮件报导,每周获取Android开发最新资讯。
7.阅读系统源码-通过android.git.kernel.org或grepcode.com在线浏览Android源代码。
8. Android开源项目-探索GitHub、f-droid等平台上的开源库、工具、App和组件。
9.必备资源-参考android-arsenal.com,这是一个Android开源库和工具的综合大全。
10.各种自定义组件-浏览androidviews.net,了解不同组件的实现与应用。
11. Android组件搜索引擎-使用theultimateandroidlibrary.com搜索Android相关组件。
12.定期观看PPT-通过slideshare.net搜索Android开发相关的PPT,下载到iPad上观看。
13.工具-利用jgilfelt.github.io/andr...等工具生成Android Action Bar样式,使用android-ui-utils.googlecode.com在线创建图标。
14.资源推荐-阅读文章Resources every Android developer must know,了解更全面的Android开发资源。
以上资源涵盖了从官方文档、社区问答到专家分享、开源项目、工具集等多个方面,为初学者提供了一个全面的学习路径。
二、如何访问android开发者网站
1、谷歌公布了四个官方网站,包括developer.android.com、market.android.com、source.android.com和www.android.com。在我的所在地区,只有www.android.com和market.android.com能够正常访问,而其它两个网站无法登录。
2、如果遇到无法访问developer.android.com和source.android.com的情况,建议尝试访问此链接:。这可能是谷歌为了提供开发者资源而设立的一个备用站点。
3、通过这个备用站点,用户可以找到与开源项目相关的资源,包括代码库、文档和其他重要信息。尽管访问路径有所不同,但开发者依然可以获取所需的技术支持和信息。
4、值得注意的是,不同地区的用户可能遇到的访问问题不同。如果在您的地区也无法访问这些网站,请尝试联系当地的谷歌支持团队,或者查看是否有其他可用的替代资源。
5、对于开发者而言,了解如何访问这些官方网站对于获取最新信息、参与社区讨论以及获取技术支持至关重要。希望以上信息对您有所帮助。
6、最后,鼓励开发者们持续关注官方渠道,以获取最准确、最新的Android开发资讯。
三、如何搭建 android 开发环境
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
对国内的开发者来说最痛苦的是无法去访问android开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了,国内开发者访问(androiddevtools)上面已经有了所有你要的资源,同时可以下载到我们的主角framework
但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。
在一开始写c程序的时候都有一个运行的入口,比如
int main(int argc, const char* argv[]){
在计算机网络原理中我们用socket实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#pragma comment(lib,"WS2_32.lib")
WORD wVersionRequested;//版本号
wVersionRequested= MAKEWORD(2, 2);//2.2版本的套接字
err= WSAStartup(wVersionRequested,&wsaData);
//判断高低字节是不是2,如果不是2.2的版本则退出
if(LOBYTE(wsaData.wVersion)!= 2||
//创建流式套接字,基于TCP(SOCK_STREAM)
SOCKET socSrv= socket(AF_INET, SOCK_STREAM, 0);
addrSrv.sin_addr.S_un.S_addr= htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格
addrSrv.sin_family= AF_INET;//指定地址簇
addrSrv.sin_port= htons(6000);
//指定端口号,除sin_family参数外,其它参数都是网络字节序,因此需要转换
//将套接字绑定到一个端口号和本地地址上
bind(socSrv,(SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必须用sizeof,strlen不行
SOCKADDR_IN addrClient;//字义用来接收客户端Socket的结构体
int len= sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof
//等待客户请求到来;当请求到来后,接受连接请求,
//返回一个新的对应于此次连接的套接字(accept)。
SOCKET sockConn= accept(socSrv,(SOCKADDR*)&addrClient,&len);
sprintf(sendBuf,"Welcome%s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化输出
//用返回的套接字和客户端进行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多发送一个字节
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
他采用了一个while死循环去监听客户端的请求。
public final class ActivityThread{
public static void main(String[] args){
SamplingProfilerIntegration.start();
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir= Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("<pre-initialized>");
//从中可以看到为app开辟了一个线程进入了looper之中
ActivityThread thread= new ActivityThread();
if(sMainThreadHandler== null){
sMainThreadHandler= thread.getHandler();
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG,"ActivityThread"));
throw new RuntimeException("Main thread loop unexpectedly exited");
看到源码失望了,没有一个while循环啊,其实用了他方法实现
//用一个looper的机制循环监听响应
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
final MessageQueue queue= me.mQueue;
Binder.clearCallingIdentity();
final long ident= Binder.clearCallingIdentity();
//在这里看到了一个循环监听消息
Message msg= queue.next();// might block
// No message indicates that the message queue is quitting.
logging.println(">>>>> Dispatching to"+ msg.target+""+
msg.target.dispatchMessage(msg);
logging.println("<<<<< Finished to"+ msg.target+""+ msg.callback);
// Make sure that during the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent= Binder.clearCallingIdentity();
Log.wtf(TAG,"Thread identity changed from 0x"
+ Long.toHexString(ident)+" to 0x"
+ Long.toHexString(newIdent)+" while dispatching to"
+ msg.target.getClass().getName()+""
+ msg.callback+" what="+ msg.what);