android44源碼
A. android源碼下 怎麼修改內存閥值
android源碼下 修改內存閥值的方法為:
第一步:首先建立一個XXX.txt文件,輸入以下代碼:
#!/system/bin/sh
echo "1536,2048,4096,6144,8192,12288" > /sys/mole/lowmemorykiller/parameters/minfree ;
這個代碼是基於MFM配置3對應的數值,用了幾天這個數值了沒發現問題,所以暫時以這個數值為例。
然後保存,將保存好的XXX.txt文件修改為67-Jasonfix
將這個67-Jasonfix文件用RE管理器放入system/etc/init.d下(這個文件夾裡面都是開機腳本設定。
然後將許可權改為:全部打鉤。
第二步:修改install-recovery.sh(在system/etc目錄下)
(1).找到這些腳本所在行
sh /system/etc/init.d/XXXXX
對應加入
sh /system/etc/init.d/67-Jason
(2).然後找到
echo A,B,C,D,E,F /sys/mole/lowmemorykiller/parameters/minfree
刪除這行並保存即可。
B. 如何在32位ubuntu11.10 下編譯android 4.0.1源碼和goldfish內核
一準備工作
1安裝javasdk6
(1)從jdk官方網站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下載jdk-6u29-linux-i586.bin文件。
(2)執行jdk安裝文件
[html] view plain
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin
(3)配置jdk環境變數
[html] view plain
$sudo vim /etc/profile
[html] view plain
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存後退出編輯,並重啟系統。
2安裝依賴包
[html] view plain
$sudo apt-get install git-core gnupg flex bison gperf build-essential\
zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
libxml2-utils
3用repo工具下載源碼
(1)初始化repo
[html] view plain
$cd ~
$mkdir bin
$curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
$chmod a+x ~/bin/repo
$exportPATH=$PATH:~/bin(導出環境變數)
(2)下載android最新源碼
[html] view plain
$mkdir android
$cd android
$ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
...(輸入用戶名和郵箱名)
$repo sync -j5
...(此處用5個線程開始下載源碼,下載過程及其漫長,需要耐心等待)
二 編譯源碼
1開始編譯
[html] view plain
$source build/envsetup.sh
includingdevice/samsung/maguro/vendorsetup.sh
includingdevice/samsung/tuna/vendorsetup.sh
includingdevice/ti/panda/vendorsetup.sh
includingsdk/bash_completion/adb.bash
$make-j4(此處用4個線程編譯)
編譯完成後,會看到類似的輸出:
[html] view plain
Targetramdisk:out/target/proct/generic/ramdisk.img
Targetuserdatafsimage:out/target/proct/generic/userdata.img
Installedfilelist:out/target/proct/generic/installed-files.txt
2編譯遇到的問題
編譯錯誤:
[html] view plain
<命令行>:0:0:錯誤:「_FORTIFY_SOURCE」重定義[-Werror]
<built-in>:0:0:附註: 這是先前定義的位置
cc1plus:所有的警告都被當作是錯誤
make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]錯誤 1
原因:
因機器上的gcc版本過高,需替換成4.4.6重新進行編譯。
解決方法:
1)安裝4.4版本的gcc和g++
[html] view plain
$ sudo apt-get install gcc-4.4
$ sudo apt-get install g++-4.4
2)設置gcc版本,使gcc鏈接到gcc-4.4
[html] view plain
$ ls -l /usr/bin/gcc*
lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6
$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.4 gcc
3)設置g++版本,使g++鏈接到g++-4.4
[html] view plain
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.4 g++
4)設置完畢後,重新進行編譯即可
3從模擬器啟動編譯後的鏡像文件
1)設置環境變數:
[html] view plain
export PATH=~/android/out/host/linux-x86/bin:$PATH
export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
其中linux-x86/bin存放模擬器emulator工具,proct/generic存在編譯後的鏡像文件。
2)啟動模擬器
[html] view plain
$emulator
emulator:WARNING: system partition size adjusted to match image file (162 MB >66 MB)
啟動後的截圖:
三 編譯androidgoldfish內核
1)進入android4.0.1源碼目錄,下載goldfish內核源碼
[html] view plain
$ mkdir kernel
$ cd kernel
$ git clone http://android.googlesource.com/kernel/goldfish.git
$ cd goldfish
$ git branch -a
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/master
$ git checkout remotes/origin/android-goldfish-2.6.29
2)修改Makefile
[html] view plain
goldfish$ gedit Makefile
修改
[html] view plain
ARCH ?=$(SUBARCH)
CROSS_COMPILE ?=
為
[html] view plain
ARCH ?=arm
CROSS_COMPILE ?=arm-eabi-
3)導出交叉編譯器目錄為環境變數
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
4)編譯內核
[html] view plain
goldfish$ make goldfish_armv7_defconfig
goldfish$ make
編譯完成後,可看到類似如下的輸出:
[html] view plain
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
5)從模擬器中啟動內核鏡像
[html] view plain
$emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &
啟動模擬器後,可從Settings->System->AboutPhone中查看內核版本信息。
C. 大牛們是怎麼讀 Android 系統源碼的
1.顯然Eclipse不是閱讀Android源碼的好工具,不流暢,搜索低效,繼承性關系/調用關系都無法有效查看。推薦Source Insight,在這個工具幫助下,你才可以駕馭巨大數量的Android 源碼,你可以從容在Java,C++,C代碼間遨遊,你可以很快找到你需要的繼承關系。 順便,我們公司一直是Windows+Linux+Samba的工作模式。 2.宏觀上看,Android源碼分為功能實現上的縱向,和功能拓展上的橫向。在閱讀源碼時需要把握好著兩個思路。 譬如你需要研究音頻系統的實現原理,縱向:你需要從一個音樂的開始播放追蹤,一路下來,你發現Jni調用解碼庫,共享內存的創建和使用,路由的切換,音頻輸入設備的開啟,音頻流的開始。 3.Android的功能模塊絕大部分是C/S架構,你心裡一定需要有這個層級關系,你需要思路清晰地找到Server的位置,它才是你需要攻破的城。然後你才能發現HAL和Kernel一層層地剝離。 我大概在三個月前閱讀完Android UI系統的源碼,這是Android最復雜的部分,沒有之一。 我需要先找一個開頭,和UI有直接關系的就是最常見的Activity了吧,我就從它開始解剖。 我從Activity的創建入手,尋找Activity真正的創建位置,setContentview這個方法很明顯和UI有關,這兩方面一結合,我發現了ViewRoot和WindowManager的身影,沿著WM和WMS我發現了Surface,以及draw的函數,它居然在Activity 創建時出現的DeCorView上畫東西。藉助Source Insight我總結了UI Java層的橫向靜態圖。 完成這個靜態UML,我覺得我可以開始功能實現上追蹤了,這部分主要是C++的代碼(這也是我堅定勸阻的放棄Eclipse的原因),我沿著draw函數,看到了各個層級的關系,SurfaceSession的控制和事務處理,SharedBuffer讀寫控制,彪悍的SurfaceFlinger主宰一切,OpenGL ES的神筆馬良。FrameBuffer和FrameBufferDevice的圖像輸出。一氣呵成的完成了。
D. Android源碼和sdk源碼有什麼差別
但是,這個sdk源碼為何能跑得起來?它也是依賴完整的android系統的。android系統源碼是基於linux內核上的一套解決方案,針對ARM平台的做的各種適合嵌入式設備的一套代碼。舉個例子,你如果在windows上編程,用到它的系統api,這些api存在於一些dll中,這個dll就是你的開發所需的東東,類似android sdk,而這個dll之所以能跑起來,完全也是依賴windows系統的,windows系統源碼有幾千萬行代碼,android系統源碼也不會少。
E. 最近下載android4.3的源代碼,可是找不到kernel那部分代碼在什麼目錄下
你從哪裡怎麼下載的?
注意android4.3有兩種源代碼:
android_sdk中附帶的android API源代碼
和android系統源代碼(這個源代碼超級巨大,目前已知最可靠的方案是使用linux從Google伺服器用特殊軟體下載源代碼……)
F. 請問誰有Google android 4.2.2系統的源碼嗎
您好,Android完整源碼很大的,建議可以自己下載安裝然後可以研究一下。下載Android源碼通常會使用repo工具,然後在本地下載。
下載方法可以參考以下文章, 我也是按照這個步驟做的,下載挺快的~希望能夠幫到你。
祝你的問題早日得到解決~~
文章地址:http://blog.csdn.net/mc_hust/article/details/33304733
G. 如何在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
H. 怎樣查看 Android APP源代碼
將apk文件拷貝至sdcard上。
命令順序如下:
進入Android sdk文件夾/tools目錄下
輸入adb shell
輸入su
輸入cd data
輸入cd app
這時就可以看到你安裝的所有的apk文件。輸入cp 空格 對應的apk 空格 /sdcard/
這樣就將apk文件拷貝出來了。
將apk文件後綴直接變成rar格式,可以看到熟悉的目錄結構了,
其中xml文件打開後都是二進制的,無法查看。
這時就用到了一個android4me的AXMLPrinter2工具。(請自行網路搜索)
輸入以下命令,將xml文件解析出來
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
將showtimes_list.xml生成xml文件,則輸入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml > h.xml
目前進行到這一步,只能看到xml文件的內容,其工程中的java源文件還是看不到,看目錄結構下有一個classes.dex文件,我們需要將dex文件變為jar文件。
這里用到了另一個工具dex2jar。(自行搜索下載)
在Windows下解壓之後的目錄如下圖所示:
在命令行中,進入到此目錄下:
在Windows下,輸入以下命令:
dex2jar.bat c:classes.dex
運行完之後,在C盤會多一個classes.dex.dex2jar.jar文件,此文件就是我們需要的jar文件。
利用jd-gui,將jar文件反向工程為java代碼。(請自行搜索下載)
它分為Windows、Linux、和max三個版本,這里我下載的是Windows版本的。
解壓之後,雙擊運行exe文件,選擇classes.dex.dex2jar.jar文件,相應的jar文件中的Java文件就被反向工程顯示出來了!
I. 求大神推薦分析Android4.4 系統源碼的資料(最好是書),急求,非常感謝!
可以參考這個網站上的資料http://www.2cto.com/kf/201401/271219.html
J. 怎樣查看 Android APP 源代碼
用壓縮軟體打開apk文件,解壓出根目錄中的classes.dex文件
使用cmd ,dex2jar.bat classes.dex命令將classes.dex轉換為jar
再用jd-gui打開該jar就可以查看源碼了,如果apk安全性好的話,有些代碼是看不到的