javaandroid源碼
『壹』 android sdk下的java源碼與JDK的Java源碼的區別在哪
Android 使用的Java 庫是Apache的Harmony, 與官方Java庫介面相同,裡面實現不一樣。
就在06年的時候Sun公司宣布會將JDK開源,但是直到2009年4月才正式發布,而Android已經在2008年發布第一步部智能手機了。所以Google最早的時候使用了當時Apache的Java開源實現Harmony項目。
說
到這個Harmony可是大有來頭,2005年的時候Java並不是開源的,當是Apache搞了一個提案,就是Harmony項目,目標是開發出一個獨
立並且與現有 JDK 兼容的 Java SE 實現,它是開源的並且Apache授權對開發者友好,於是得到了飛速發展。
可惜Sun公司一直不承認Harmony,前不久Harmony那一幫人怒了,給Oracle放狠話說再不承認我我就抵制Java7,結果反倒把Google嚇壞了,於是就出現了google宣布切換到openjdk上這條新聞。
『貳』 怎麼在eclipse中查看android源碼
在eclipse中查看android源代碼的兩種方法
方法一:
一名Java開發工程師經常會查看庫的源代碼,因為我們用ADT發現android庫沒有自帶source code,我就創建一個user library來解決這個問題的。
1、首先你需要下載android源代碼,用git,詳見android開發官方網站。
然後找到源碼目錄下的\frameworks\base\core\java,把android壓縮成android.zip把下面這些文件夾拖入到裡面(結構android.zip\)\frameworks\base\graphics\java\android\
\frameworks\base\location\java\android\
\frameworks\base\media\java\android\
\frameworks\base\opengl\java\android\
\frameworks\base\sax\java\android\
\frameworks\base\telephony\java\android\
\frameworks\base\services\java\com\android\\frameworks\base\vpn\java\android\
\frameworks\base\wifi\java\android\
2、在你的android工程上,右鍵->屬性,找到Java Build Path3、Add Library->User Library->Next->User Libraries->New4、輸入Library的名稱,比如android_src2.0
5、Add JARs->選擇剛剛創建的android.zip
這樣你就把android源碼添加上了。
方法二:
上面的方法我試了一下1.6的就是不行,只有2.0的才行,所以用網上搜索到的一種方法,添加1.6SDK的源代碼。
from __future__ import with_statement# for Python < 2.6import os
import re
import zipfile
# open a zip file
DST_FILE = 'sources.zip'
if os.path.exists(DST_FILE):
print DST_FILE, "already exists"
exit(1)
zip = zipfile.ZipFile(DST_FILE, 'w', zipfile.ZIP_DEFLATED)# some files are plicated,  them only oncewritten = {}
# iterate over all Java files
for dir, subdirs, files in os.walk('.'):
for file in files:
if file.endswith('.java'):
# search package name
path = os.path.join(dir, file)
with open(path) as f:
for line in f:
match = re.match(r'\s*package\s+([a-zA-Z0-9\._]+);', line)if match:
#  source into the zip file using the package as pathzippath = match.group(1).replace('.', '/') + '/' + fileif zippath not in written:
written[zippath] = 1
zip.write(path, zippath)
break;
zip.close()
把這些代碼拷貝一下,新建一個叫 makesrc.py的文件,放到< 源碼位置>/frameworks/base下面,然後執行makesrc.py,完畢之後會有sources.zip然後在platforms\android-1.6\sources 下面解壓到這個目錄具體目錄格式是\platforms\android-2.1\sources\
android
com
java
javax
junit
mock_android
org
『叄』 android源碼包在哪個文件夾
android源碼主要位於兩個文件夾中。橡洞src文件咐如哪夾,存放java代碼。res文件夾存放資源,如res->layout存放布局文件;res->drawable存放圖片文件等。android代衡碼碼主要就存在於這兩個文件夾下
『肆』 如何在Android源碼里查找Java中native方法對應的C++實現
android源碼只包含android app java的客戶端代碼。
native部分可能有可能沒有,先全局搜索.c或者.cpp文件,有這些文件才可能有。
如果是標準的android native support 工程,那麼eclipse裡面打開之後,在工程目錄/jni下面就是 native的C++代碼。
Android源碼中很多關鍵代碼都是C++實現的,java通過jni來調用,經常會看到java中這樣的代碼:
   static native Thread currentThread();
如何根據方法名找到其對應的C++實現,有兩個方法。
先來個java代碼的示例VMThread.java:
package java.lang;
class VMThread {
    Thread thread;
    int vmData;
    VMThread(Thread t) {
        thread = t;
    }
    native static void create(Thread t, long stackSize);
    static native Thread currentThread();
    static native boolean interrupted();
    static native void sleep (long msec, int nsec) throws InterruptedException;
    static native void yield();
    native void interrupt();
    native boolean isInterrupted();
    ......
}
 我們要查找currentThread方法的實現。
方法一:
由於Android源碼中對每個native實現都會寫一個java方法名和C++方法名映射的列表,所以我們直接搜索這個列表內容即可。
zkw@zkw $ grep -rns '"currentThread"' ./*
./art/compiler/dex/quick/dex_file_method_inliner.cc:108:    "currentThread",         // kNameCacheCurrentThread
匹配到二進制文件 ./dalvik/vm/native/.java_lang_VMThread.cpp.swp
./dalvik/vm/native/java_lang_VMThread.cpp:241:    { "currentThread",  "()Ljava/lang/Thread;",
./external/android-mock/tests/com/google/android/testing/mocking/AndroidMockGeneratorTest.java:249:    Method method = Thread.class.getMethod("currentThread");
./external/android-mock/tests/com/google/android/testing/mocking/AndroidMockGeneratorTest.java:407:    Method method = Thread.class.getMethod("currentThread");
可以看到,在文件./dalvik/vm/native/java_lang_VMThread.cpp中找到currentThread方法相關的信息,後面()Ljava/lang/Thread代表這個方法的返回值。
進入java_lang_VMThread.cpp這個文件可以看到:
17 /*
 18  * java.lang.VMThread
 19  */
 20 #include "Dalvik.h"
 21 #include "native/InternalNativePriv.h"
 22 
 23 
 24 /*
 25  * static void create(Thread t, long stacksize)
 26  *
 27  * This is eventually called as a result of Thread.start().
 28  *
 29  * Throws an exception on failure.
 30  */
 31 static void Dalvik_java_lang_VMThread_create(const u4* args, JValue* pResult)
 32 {
 33     Object* threadObj = (Object*) args[0];
 34     s8 stackSize = GET_ARG_LONG(args, 1);
 35 
 36     /* ing collector will pin threadObj for us since it was an argument */
 37     dvmCreateInterpThread(threadObj, (int) stackSize);
 38     RETURN_VOID();
 39 }
 40 
 41 /*
 42  * static Thread currentThread()
 43  */
 44 static void Dalvik_java_lang_VMThread_currentThread(const u4* args,
 45     JValue* pResult)
 46 {
 47     UNUSED_PARAMETER(args);
 48 
 49     RETURN_PTR(dvmThreadSelf()->threadObj);
 50 }
 51 
......
237 
238 const DalvikNativeMethod dvm_java_lang_VMThread[] = {
239     { "create",         "(Ljava/lang/Thread;J)V",
240         Dalvik_java_lang_VMThread_create },
241     { "currentThread",  "()Ljava/lang/Thread;",
242         Dalvik_java_lang_VMThread_currentThread },
243     { "getStatus",      "()I",
244         Dalvik_java_lang_VMThread_getStatus },
245     { "holdsLock",      "(Ljava/lang/Object;)Z",
246         Dalvik_java_lang_VMThread_holdsLock },
247     { "interrupt",      "()V",
248         Dalvik_java_lang_VMThread_interrupt },
249     { "interrupted",    "()Z",
250         Dalvik_java_lang_VMThread_interrupted },
251     { "isInterrupted",  "()Z",
252         Dalvik_java_lang_VMThread_isInterrupted },
253     { "nameChanged",    "(Ljava/lang/String;)V",
254         Dalvik_java_lang_VMThread_nameChanged },
255     { "setPriority",    "(I)V",
256         Dalvik_java_lang_VMThread_setPriority },
257     { "sleep",          "(JI)V",
258         Dalvik_java_lang_VMThread_sleep },
259     { "yield",          "()V",
260         Dalvik_java_lang_VMThread_yield },
261     { NULL, NULL, NULL },
262 };
源碼中第242行找到對應的名字,用紅色標出,其實現就在第44行。
這個方法不是很准確,要靠經驗來判斷搜出來的代碼是否是自己要找的,下一個方法可以較准確的查找。
方法二:
 還是找VMThread.java的currentThread函數,找多了會發現,C++的名字一般都是包名+類名+方法名,比如currentThread的C++名字就肯定包含「java_lang_VMThread_currentThread」,所以直接搜索即可。
如何在Android源碼里查找Java中native方法對應的C++參考:http://e.51cto.com/course/course_id-4377.html
『伍』 EclipseADT怎麼關聯android的源碼
在eclipse里直接看它的源,大概需要經由下面的幾個步驟:
1.下載源碼
這部分網上有大量的資料,這是我參考的文章:《Windows平台下Android源碼的下載》
2.在eclipse中關聯源碼
常用eclipse的人對在eclipse中關聯源碼的操作應該也都很熟悉。
1、找到項目中的android.jar,右鍵→properties

『陸』 eclipse怎麼查看android源碼
1、eclipse安裝了ADT插件後可以進行Android開發(目前已經不推薦使用eclipse開發,官方建議使用Android studio)
2、eclipse中Android項目的結構如下

3、源代碼查看,進入src--com.example(以實際包名為准)查看java源代碼
在res--layout下查看xml布局文件
