• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ++wythern++

            X presents Y for a better Z

            #

            【轉】編譯運行android emulator

            原文在這里


            source buile/envsetup.sh

            lunch sdk-eng

            make sdk -j2

             

            編譯完之后,sdk安裝在了下面的目錄里

            ANDROIID_DIR/out/host/linux-x86/sdk

            在這個目錄下有一個壓縮包,里面就是我們從eclipse里下載的sdk的包。

            如果你做過app開發都會知道,我們只有下載了不同版本的sdk之后才能創建不同版本的模擬器,我們編譯完sdk之后就可以創建模擬器了

            $ cd ANDROIID_DIR/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools

            首先,查看當前sdk的Id號,用于創建一個模擬器

            $ ./android list targets

            Available Android targets:
            ----------
            id: 1 or "android-14"
                 Name: Android 4.0
                 Type: Platform
                 API level: 14
                 Revision: 2
                 Skins: WXGA800, WQVGA400, WXGA720, HVGA, WVGA854, WQVGA432, WVGA800 (default), QVGA, WSVGA
                 ABIs : no ABIs.

             

            創建一個模擬器

            $ ./android create avd -n mydroid -t 1

            -n 表示指定模擬器的名字, -t表示指定創建模擬的版本id

            啟動模擬器

            $ ./emulator &

            由于模擬器要啟動android系統,他要使用幾個映像文件,分別是:kernel-qemu , system.img, userdata.img, ramdisk.img

            kernel-qemu:內核映像文件,它是linux操作系統針對qemu模擬器編譯的內核文件,里面安裝有qemu的仿真硬件驅動,如果將來在開發板或手機上移植android,那么,第一步就是要先make出一個支持開發板或手機的kernel來

            system.img:是android系統的文件系統,里面包含了android系統的應用程序(apk),系統用到的各種庫(jar, so, a)和資源, 配置文件(etc目錄下),系統命令(bin, usr/bin, xbin) ,該映像文件是由out/target/product/PRODUCT/system目錄打包生成的,我們可以對這個目錄里的東西進行定制 化,比如,你要想讓android系統默認為安裝一個應用程序,那么可以將要安裝的apk文件拷貝到out/target/product /PRODUCT/system/app目錄下

            userdata.img:用戶數據映像,里面包含有程序安裝信息,好比如是windows的C:/Program Files/目錄

            ramdisk.img:內存磁盤映像,這個文件對于沒有做過Linux移植的人來說,不好理解,linux內核啟動起來,要掛載一個文件系統作為 自己的根文件系統,通常文件系統是存放在塊設備上的,也就是硬盤或flash上的。一個linux的根文件系統里面通常包含有以下內容:

            usr:最大的目錄,存放應用程序和文件

            bin:常用的命令目錄

            etc:系統相關配置文件目錄

            dev:系統設備目錄

            opt:主機額外安裝的軟件目錄

            boot:存放系統啟動時必須讀取的配置文件,包括核心 (kernel) 在內

            home:普通用戶家目錄

            lib:系統使用庫目錄

            var:日志文件目錄

            lost+found:系統不正常產生錯誤時,會將一些遺失的片段放置于此目錄下

            mnt:外設的掛載點目錄

            proc:虛擬文件目錄,是系統信息的映射

            root:root用戶家目錄

            sbin:超級命令所在目錄

            tmp:一般使用者或者是正在執行的程序暫時放置文件的地方

            而ramdisk.img這個映像,其實里面就是上述目錄和一些基本配置文件的打包映像,ramdisk是將映像加載到內存里,然后將內存當做一個塊設備(硬盤)來使用,所以說通常ramdisk.img通常比較小。當然,除了上面的FHS標準的Linux文件系統目錄以外,android系統里,還增加了data,system目錄。

            前面所述的userdata.img和system.img映像,其實就是掛載到data,system目錄下的。

            我們可以通過下面的命令,來指定模擬器,啟動哪個內核,使用哪些文件系統:

            ./emulator -avd mydroid -system ANDROIID_DIR/out/target/product/generic/system.img  -data ANDROIID_DIR/out/target/product/generic/userdata.img -ramdisk ANDROIID_DIR/out/target/product/generic/ramdisk.img  -kernel ANDROIID_DIR/prebuilt/android-arm/kernel/kernel-qemu-armv7
            -system指定system.img

            -data指定userdata.img

            -ramdisk指定ramdisk.img

            -kernel指定內核映像

            實驗:對androd系統進行瘦身

            android系統抽屜里顯示的應用存放在out/target/product/PRODUCT/system/app目錄里,我們可以將一些不 常用的,不想用的apk文件刪除,一來減小Android的體積,二來可以加快系統啟動速度,因為在系統啟動時,會掃描system/app目錄下的 apk文件,對比有沒有安裝更新。

            刪除一些apk,去掉計算器,日歷,電話,短信

            $ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Calculator.*

            $ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Calendar.*

            $ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Email.*

            $ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Message.*

            $ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Telephone.*

            刪除了之后,執行下面的命令,只編譯system.img,而不去檢查依賴關系,這樣很快就能編譯完

            $ make snod

            注:上述命令必須要保證執行了source buile/envsetup.sh和lunch full-eng之后,以后只要是說make,都指已經執行了前述兩步驟

            snod的意思是編譯system imge no dependency

            然后,再重新啟動模擬器,指定自己編譯的system.img,查看抽屜里有沒有我們刪除的應用

            ./emulator -avd mydroid -system ANDROIID_DIR/out/target/product/generic/system.img  -data ANDROIID_DIR/out/target/product/generic/userdata.img -ramdisk ANDROIID_DIR/out/target/product/generic/ramdisk.img  -kernel ANDROIID_DIR/prebuilt/android-arm/kernel/kernel-qemu-armv7

            思考:我們能不能將全部的system/app下的apk刪除掉,如果不能,哪些必須要保留,為什么?

            posted @ 2013-01-06 16:34 wythern 閱讀(3504) | 評論 (0)編輯 收藏

            畫了幾張圖,關于Android DisplayManagerService.

            1. DisplayManageService 的簡單類關系圖


            2. Time Flow of Overlay Display Simulation in Android 4.2 Setting





            嗯,隨便畫畫,不懂的好多。。。。。

            posted @ 2012-12-27 18:19 wythern 閱讀(1176) | 評論 (0)編輯 收藏

            去掉Android屏幕周邊閃爍的紅框

            disable StrictMode,在Setting->Developer Options下面。
            如果不成功,試試
            setprop persist.sys.strictmode.visual 0

            setprop persist.sys.strictmode.disable 1


            重啟以后看看生效了沒有。

            posted @ 2012-12-18 16:26 wythern 閱讀(613) | 評論 (0)編輯 收藏

            [轉] 為Gnome-shell或Unity添加程序啟動圖標

            http://qing.weibo.com/1544809353/5c13eb8933001usw.html

            為Gnome-shell或Unity添加程序啟動圖標

            2012年07月21日 14:19

            使用Gnome-shell或Unity桌面時,我喜歡直接按win鍵,輸入程序的英文名稱,(通常只需要打幾個字母)把程序過濾出來之后,按回車就啟動 了,比起點開”開始菜單“去找,快速很多。但如果自己手工下載或編譯的程序,也要通過打名稱來啟動的話,就需要為Gnome-shell或Unity或開 始菜單創建一個入口。通常系統都自帶了一個工具叫”主菜單編輯器“,直接輸入命令:”alacarte“ 啟動,可以很容易地編輯程序的分類,刪除程序入口,創建新的程序入口。

            posted @ 2012-12-17 17:12 wythern 閱讀(446) | 評論 (0)編輯 收藏

            在家怎么訪問公司網絡

            做個記號先~

            穿越內網,在家訪問公司內部網絡
            http://blog.csdn.net/panpanloveruth/article/details/6394834

            家里怎么才能遠程桌面連接公司的電腦?介紹一個軟件"應用虛擬網 Gport"

            http://coolerfeng.blog.51cto.com/133059/55528/

            posted @ 2012-12-13 14:06 wythern 閱讀(345) | 評論 (0)編輯 收藏

            一些lib頭文件找不到的解決辦法

            幾個編譯問題:

            1.XText.h
            X11/extensions/XTest.h:沒有那個文件或目錄 編譯中斷。
            sudo apt-get install xorg-dev

            2.openssl.h
            sudo apt-get install libssl-dev

            3.SDL.h
            sudo apt-get install libsdl1.2-dev

            順便看了看SDL的介紹:SDL是Simple DirectMedia Layer(簡易直控媒體層)的縮寫。它是一個跨平臺的多媒體庫,以用于直接控制底層的多媒體硬件的接口。主要用在開發游戲上。
            以后有機會研究一下!

            4.jack.h
            sudo apt-get install libjack-dev

            5.videodev.h
            sudo apt-get install libv4l-dev; #注意這里是 libv4L 而不是 libv41;

            可是,現在你繼續安裝,依然會出現上述錯誤。這是由于這樣安裝的 libv4L 庫把頭文件名稱改為

            /usr/include/libv4l1-videodev.h

            等。知道了原因,解決辦法也很簡單,只需要把出錯這行代碼的 #include 頭文件改掉,即把

            #include <linux/videodev.h>

            改為

            #include <libv4l1-videodev.h>

            或者創建一個軟鏈接

            sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h


            6. bzlib.h

            sudo apt-get install libbz2-dev


            7. faac.h

            sudo apt-get install libfaac-dev


            8. lame.h

            sudo apt-get install liblame-dev


            9. theoraenc.h:

            sudo apt-get install libtheora-dev


            10. x264.h

            sudo apt-get install libx264-dev 


            11. xvidcore.h
            sudo apt-get install libxvidcore-dev 


            12. vdpau.h
            sudo apt-get install libvdpau-dev 


            sudo apt-get install yasm








            posted @ 2012-11-21 11:25 wythern 閱讀(3078) | 評論 (0)編輯 收藏

            [轉]給firefox火狐添加自定義搜索引擎

            原文請猛擊這里

            http://mycroft.mozdev.org/

            在這里有火狐自帶的10個搜索引擎分地區和分語言的搜索代碼,直接點擊你要添加的代碼,就ok了。。

            例如添加Google搜索引擎:

            點擊進入網頁上Google頁面有如下顯示

            A9 √  Google (google.com) by Mycroft Project [Review]

            直接點擊Google就行了。。。

            A9 √  Google CN - 中文網頁 (google.cn) by Mycroft Project [Review]

            直接點擊Google CN - 中文網頁就行了。。。

             

            另外,雖然這些是火狐的官方網站的代碼,ie下添加也可用~

            posted @ 2012-10-01 22:33 wythern 閱讀(1174) | 評論 (0)編輯 收藏

            [轉]Android系統systemProperties設置分析

            作者:徐建祥(netpirate@gmail.com)
            日期:2009/11/11
            網址:http://www.anymobile.org

            Android 的系統屬性包括兩部分:文件保存的持久屬性和每次開機導入的cache屬性。前者主要保存在下面幾個文件中:

            bionic/libc/include/sys/_system_properties.h
            1     #define PROP_SERVICE_NAME "property_service"
            2     #define PROP_PATH_RAMDISK_DEFAULT  "/default.prop"
            3     #define PROP_PATH_SYSTEM_BUILD     "/system/build.prop"
            4     #define PROP_PATH_SYSTEM_DEFAULT   "/system/default.prop"
            5     #define PROP_PATH_LOCAL_OVERRIDE   "/data/local.prop"

            后者則通過frameworks/base/core/java/android/os/SystemProperties.java的接口定義,

             1     private static native String native_get(String key);
             2     private static native String native_get(String key, String def);
             3     private static native void native_set(String key, String def);
             4     public static void set(String key, String val) {
             5         if (key.length() > PROP_NAME_MAX) {
             6             throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
             7         }
             8         if (val != null && val.length() > PROP_VALUE_MAX) {
             9             throw new IllegalArgumentException("val.length > " +
            10                 PROP_VALUE_MAX);
            11         }
            12         native_set(key, val);
            13     }

            該接口類在初始化運行環境中注冊對應的cpp接口android_os_SystemProperties.cpp,實際操作通過JNI調用的是cpp文件對應的接口:

            frameworks/base/core/jni/AndroidRuntime.cpp
            1     namespace android {
            2     extern int register_android_os_SystemProperties(JNIEnv *env);
            3     }

            frameworks/base/core/jni/android_os_SystemProperties.cpp
             1     static void SystemProperties_set(JNIEnv *env, jobject clazz, jstring keyJ, jstring valJ)
             2     {
             3         int err;
             4         const char* key;
             5         const char* val;
             6         key = env->GetStringUTFChars(keyJ, NULL);
             7         if (valJ == NULL) {
             8             val = "";       /* NULL pointer not allowed here */
             9         } else {
            10             val = env->GetStringUTFChars(valJ, NULL);
            11         }
            12         err = property_set(key, val);
            13         env->ReleaseStringUTFChars(keyJ, key);        
            14         if (valJ != NULL) {
            15             env->ReleaseStringUTFChars(valJ, val);
            16         }
            17     }

            設置key的value時,需要作鑒權,根據設置程序所在進程的fd獲知uid值,比如system server進程可以設置net打頭的key,不可以設置gsm打頭的key,相關的定義如下:

            system/core/include/private/android_filesystem_config.h
            1     #define AID_ROOT             0  /* traditional unix root user */
            2     #define AID_SYSTEM        1000  /* system server */
            3     #define AID_RADIO         1001  /* telephony subsystem, RIL */
            4     #define AID_DHCP          1014  /* dhcp client */
            5     #define AID_SHELL         2000  /* adb and debug shell user */
            6     #define AID_CACHE         2001  /* cache access */
            7     #define AID_APP          10000 /* first app user */

            system/core/init/property_service.c
             1     #define PERSISTENT_PROPERTY_DIR  "/data/property"
             2     struct {
             3         const char *prefix;
             4         unsigned int uid;
             5     } property_perms[] = {
             6         { "net.rmnet0.",    AID_RADIO },
             7         { "net.gprs.",      AID_RADIO },
             8         { "ril.",           AID_RADIO },
             9         { "gsm.",           AID_RADIO },
            10         { "net.dns",        AID_RADIO },
            11         { "net.usb0",       AID_RADIO },
            12         { "net.",           AID_SYSTEM },
            13         { "dev.",           AID_SYSTEM },
            14         { "runtime.",       AID_SYSTEM },
            15         { "hw.",            AID_SYSTEM },
            16         { "sys.",        AID_SYSTEM },
            17         { "service.",    AID_SYSTEM },
            18         { "wlan.",        AID_SYSTEM },
            19         { "dhcp.",        AID_SYSTEM },
            20         { "dhcp.",        AID_DHCP },
            21         { "debug.",        AID_SHELL },
            22         { "log.",        AID_SHELL },
            23         { "service.adb.root",    AID_SHELL },
            24         { "persist.sys.",    AID_SYSTEM },
            25         { "persist.service.",   AID_SYSTEM },
            26         { NULL, 0 }
            27     };
            28     int property_set(const char *name, const char *value)
            29     {
            30         property_changed(name, value);
            31         return 0;
            32     }
            33     int start_property_service(void)
            34     {
            35         int fd;
            36 
            37         load_properties_from_file(PROP_PATH_SYSTEM_BUILD);
            38         load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
            39         load_properties_from_file(PROP_PATH_LOCAL_OVERRIDE);
            40         /* Read persistent properties after all default values have been loaded. */
            41         load_persistent_properties();
            42 
            43         fd = create_socket(PROP_SERVICE_NAME, SOCK_STREAM, 066600);
            44         if(fd < 0return -1;
            45         fcntl(fd, F_SETFD, FD_CLOEXEC);
            46         fcntl(fd, F_SETFL, O_NONBLOCK);
            47 
            48         listen(fd, 8);
            49         return fd;
            50     }
            51     void handle_property_set_fd(int fd)
            52     {
            53         switch(msg.cmd) {
            54         case PROP_MSG_SETPROP:
            55             msg.name[PROP_NAME_MAX-1= 0;
            56             msg.value[PROP_VALUE_MAX-1= 0;
            57 
            58             if(memcmp(msg.name,"ctl.",4== 0) {
            59                 if (check_control_perms(msg.value, cr.uid)) {
            60                     handle_control_message((char*) msg.name + 4, (char*) msg.value);
            61                 } else {
            62                     ERROR("sys_prop: Unable to %s service ctl [%s] uid: %d pid:%d\n",
            63                             msg.name + 4, msg.value, cr.uid, cr.pid);
            64                 }
            65             } else {
            66                 if (check_perms(msg.name, cr.uid)) {
            67                     property_set((char*) msg.name, (char*) msg.value);
            68                 } else {
            69                     ERROR("sys_prop: permission denied uid:%d  name:%s\n",
            70                           cr.uid, msg.name);
            71                 }
            72             }
            73             break;
            74 
            75         default:
            76             break;
            77         }
            78     }

            在開機啟動后的init操作中,會執行一個loop循環,當檢測到有新的設置時,進入設置流程,鑒權失敗會提示相關的異常,如sys_prop: permission denied uid:1000  name:gsm.phone.id

            system/core/init/init.c
             1     void property_changed(const char *name, const char *value)
             2     {
             3         if (property_triggers_enabled) {
             4             queue_property_triggers(name, value);
             5             drain_action_queue();
             6         }
             7     }
             8     int main(int argc, char **argv)
             9     {
            10         parse_config_file("/init.rc");
            11         qemu_init();
            12         device_fd = device_init();
            13         property_init();
            14         fd = open(console_name, O_RDWR);
            15         property_set_fd = start_property_service();
            16         ufds[0].fd = device_fd;
            17         ufds[0].events = POLLIN;
            18         ufds[1].fd = property_set_fd;
            19         ufds[1].events = POLLIN;
            20         ufds[2].fd = signal_recv_fd;
            21         ufds[2].events = POLLIN;
            22         fd_count = 3;
            23         for(;;) {
            24             if (ufds[0].revents == POLLIN)
            25                 handle_device_fd(device_fd);
            26 
            27             if (ufds[1].revents == POLLIN)
            28                 handle_property_set_fd(property_set_fd);
            29             if (ufds[3].revents == POLLIN)
            30                 handle_keychord(keychord_fd);
            31         }
            32         return 0;
            33     }

            posted @ 2012-09-29 10:35 wythern 閱讀(374) | 評論 (0)編輯 收藏

            給Android JellyBean添加internal resource

            想給Androird JellyBean 4.1.0的framework里面添加一個res,把xml寫好以后編譯時候報錯

                    int ticker = com.android.internal.R.string.xxxxxxxxxx;
                                                              ^
            frameworks/base/services/java/com/android/server/StatusBarManagerService.java:143: cannot find symbol
            symbol  : variable xxxxxxxxxx
            location: class com.android.internal.R.drawable

            解決辦法很簡單,在MakeJavaSymbols.sed里面有:
            # Run this on the errors output by javac of missing resource symbols,
            # to generate the set of <java-symbol> commands to have aapt generate
            # the symbol for them.
            #
            # For example: make framework 2>&1 | sed -n -f MakeJavaSymbols.sed | sort -u

            重新編譯會產生
              <java-symbol type="string" name="xxxxxxxxxx" />
            把這個copy到publlic.xml。再重新編譯一次就搞定了。

            public.xml也提到
            <!-- Private symbols that we need to reference from framework code.  See
                   frameworks/base/core/res/MakeJavaSymbols.sed for how to easily generate
                   this.
              -->

            看起來所有private的internal res都必須在這里聲明一下。JellyBean以前貌似沒有這么麻煩。好在他提供了一個sed,免得全部手寫。





            posted @ 2012-09-20 14:40 wythern 閱讀(2261) | 評論 (2)編輯 收藏

            [轉]解決eclipse鍵盤輸入無響應的問題

            原文在這里

            很簡單,在終端輸入:
            im-switch -s scim-bridge
            然后注銷重新登錄即可。

            具體詳情請參考一下國外網站的鏈接:
            https://bugs.launchpad.net/ubuntu/+sour ... bug/293001

            posted @ 2012-08-22 16:14 wythern 閱讀(516) | 評論 (0)編輯 收藏

            僅列出標題
            共6頁: 1 2 3 4 5 6 
            久久99精品久久久久久噜噜| 免费久久人人爽人人爽av| 久久97精品久久久久久久不卡| 国产精品视频久久| 合区精品久久久中文字幕一区 | 国产一久久香蕉国产线看观看| 99re久久精品国产首页2020| 国产精品欧美久久久久天天影视| 日韩十八禁一区二区久久| 99久久精品免费看国产一区二区三区| 久久99精品国产自在现线小黄鸭| 国内精品久久久久久久久电影网| 久久福利资源国产精品999| 久久被窝电影亚洲爽爽爽| 精品久久人人爽天天玩人人妻| 伊人久久大香线焦综合四虎| 亚洲色大成网站www久久九 | 老司机国内精品久久久久| 欧美亚洲国产精品久久久久| 精品多毛少妇人妻AV免费久久| 色8久久人人97超碰香蕉987| 日本欧美国产精品第一页久久| 99国产欧美久久久精品蜜芽| 亚洲精品乱码久久久久久蜜桃图片| 久久综合久久综合九色| 精品久久8x国产免费观看| 一本色道久久综合狠狠躁| 中文字幕久久亚洲一区| 亚洲精品99久久久久中文字幕| 97超级碰碰碰碰久久久久| 久久国产精品99久久久久久老狼| 色综合久久久久无码专区| 综合人妻久久一区二区精品| 精品国产乱码久久久久软件| 性做久久久久久免费观看| 热RE99久久精品国产66热| 日日狠狠久久偷偷色综合免费| 久久丝袜精品中文字幕| 亚洲日本va午夜中文字幕久久| 思思久久99热免费精品6| 久久亚洲AV成人无码|