Android linux下編譯與使用

1.CTS測試路徑:/sofia_5.1/cts/tests/tests/widget
  查看行數: :set nu   
  恢復某次提交的狀態,恢復動作本身也創建次提交對象:git revert <$id>   
   
2.查找文件:find . -name "RelativeLayoutTest*"
  查找單詞:grep -rn "hello,world!" ./ 
  查看當前目錄下的文件狀態:./repo/repo/repo status
  同步服務器代碼:repo sync
  ./drivers/rtc/rtc-xgold-core.c
  vendor/intel/images/hex/      bootcore相關:查看最新代碼是否有衝突
3.編譯內核到kernel目錄下:  
 3.1 cd  ~/Android/kernel  (編過有一次就可以不再繼續編)  
 3.2 make i386_sofia_defconfig -j4
      make SF_3GR-tablet.dtb
      make bzImage -j6
4.編譯生成固件
   4.1 source build/envsetup.sh
   4.2 setpaths
   4.3 lunch (根據需要選擇  make installclean -j24 (清理之前已經生成的apk等) 編譯模式,CTS測試一般是user模式,平常一般是userdebug模式)  
   4.4 make installclean -j24  (清理安裝包文件)
   4.5 make -j64(編固件)     mm -B -j24(編譯apk代碼常用,一般在該應用下編譯即可)  
         可以使用複合指令:  make installclean -j24 && make -j24(包含4.4和4.5)
   4.6 ./mkimage.sh SF_3GR-phone.dtb(Sofia手機固件打包)     ./mkimage.sh SF_3GR-tablet.dtb(打包生成平板固件fls用)
         ./mkimage-hengchen.sh(橫晨打包用,sh腳本已經設置好打包方式
       (如果是找不到要打包的dtb可以直接用:ls | grep mkimage(查找項) 

kernel:清理

make mrproper命令會刪除所有的編譯生成文件、內核配置文件(.config文件)和各種備份文件,所以幾乎只在第一次執行內核編譯前才用這條命令。

make clean命令則是用於刪除大多數的編譯生成文件,但是會保留內核的配置文件.config,還有足夠的編譯支持來建立擴展模塊。所以你若只想刪除前一次編譯過程的殘留數據,只需執行make clean命令。

##### To clean kernel if it not clean make -C kernel mrproper

 
5.left|center”是一個常量,表示水平居左,垂直居中  
6.打開具體一行:vim ./src/android/widget/cts/RelativeLayoutTest.java +130
7.清屏幕 clear all

8.// 獲取文本中原有的URLSpan類型的文本,保存起來
        int end = textWithLinkText.length();
        URLSpan[] urls = textWithLinkText.getSpans(0, end, URLSpan.class);

9.Linkify是一個將一段話中的一小部分變成鏈接的方法。參考鏈接:Linkify:  http://blog.163.com/xueli_007/blog/static/715336072011495313670/
    Linkify.addLinks 靜態方法接受一個View來製作連接,還包括一個或多個默認內容類型的結果。Linkify類提供了一些內容類型:
    WEB_URLS、EMAIL_ADDRESSES、 PHONE_NUMBERS和ALL。

10.開發者選項中《允許模擬位置》的開關沒有打開,開關的默認值是     在/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
11.cts verifier(兼容性測試):http://www.cnblogs.com/zh-ya-jing/p/4452675.html
     cts參考文檔:http://www.360doc.com/content/14/0512/16/426085_376982454.shtml

12.android  API:SpannableString->追溯到父類在父類中SpannableStringInternal(framework/base/下)構造函數時進行處理
    http://www.apihome.cn/api/android/Linkify.html
    http://www.apihome.cn/api/android/SpannableStringBuilder.html
    http://www.cnblogs.com/zdwillie/p/3314565.html
13.處理android.text的fail項:sercureCrt連小偉服務器-》編譯-》WinSCP登錄小偉203服務器-》找到編譯好的測試apk-》
   下載到本機-》替換TestCase裏面的apk-》cts下運行測試

14.解bug時,如果是佈局文件值或者屬性值的修改,可以直接在項目中搜索該詞語。
15.install_applications <string name="install_applications" msgid="4872012136210802181">"未知來源"</string>
    修改:(可以查看目錄frameworks/base)frameworks/base/packages/SettingsProvider/res/values/defaults.xml
16.修改未知來源默認值:
    1.grep -rn "未知來源" ./ (查找到 '未知來源'詞語對應的name"INSTALL_APPLICATIONS")
    2.在settings下查找INSTALL_APPLICATIONS,知道isNonMarketAppsAllowed()中有INSTALL_NON_MARKET_APPS對應值
    3.此時無法在settings中繼續找到需要的值,進入/frameworks/base顯示出當前的包,進入packages(不同問題不一樣)
    4.查找INSTALL_NON_MARKET_APPS,發現SettingsProvider:包含SettingsProvider.java中有對應的值
    5.loadBooleanSetting(stmt,Settings.Secure.INSTALL_NON_MARKET_APPS,R.bool.def_install_non_market_apps);
    6.找到def_install_non_market_apps修改對應的值即可。
17.傳感器Sensor:sofia_5.1/hardware/rockchip/sensor/st/sensors.c
    ./kernel/arch/x86/boot/dts/SF_3GR-tablet.dts
    SF_3GR-tablet.dts 修改poll_delay_ms(修改值減少,降低延遲ms)
   ./kernel/drivers/misc/xgold-vibra.c

18.junit.framework.AssertionFailedError: Video size 176x144 for profile ID 0 must be one of the camera device supported video size! at junit.framework.Assert.fail(Assert.java:50) 
找到devices->rockchip->sofia_phone->camera-profile.xml加176x144即可
19.在103服務器,hxw@rksz-server103:~/sofia_5.1/packages/apps/Launcher3/res/xml$ vim default_workspace_5x5.xml  修改主界面UI
default_workspace_4x4.xml  default_workspace_5x5.xml  default_workspace_5x6.xml  unread_support_shortcuts.xml  update_workspace.xml
20.<appwidget>爲添加相應的widget;<search>爲添加google搜索框;<favorite>爲添加程序的快捷方式;
21.存入數據庫的數據在重新加載UI界面時(如主界面),出現無法重新加載時,要在settings中apps下Launcher3將數據清理一下,因爲佈局文件加載完後,不會再次加載。

22.make: *** 沒有規則可以創建“out/host/common/obj/JAVA_LIBRARIES/launcher_protoutil_lib_intermediates/javalib.jar”需要的目標“out/host/linux-x86/framework/host-libprotobuf-java-2.3.0-nano.jar”。 停止。
解決辦法:external/protobuf目錄下編譯一個模塊生成 2.3.0-nano.jar,然後再進行make
*** No rule to make target `kernel/arch/x86/boot/vmlinux.bin', needed by `out/target/product/sofia3gr/kernel'.  Stop. 

23.SNWTool寫sn等號碼,要在ptest模式下進行,通過在cmd下輸入adb reboot ptest
     然後再將設置好的sn等信息燒寫到機器上。
     騰中電子跟蹤:https://redmine.rockchip.com.cn/issues/73035
25.橫晨 mid1018
26.~/sofia_5.1/device/rockchip/common$ ../../../.repo/repo/repo sync .
     a.顯示修改日誌:git log 
     b.顯示具體編號日誌:git show 0180625fb930003eb731e541113e1281801e7a72
     c.將(b)的日誌生成補丁文件:git show 0180625fb930003eb731e541113e1281801e7a72>aa.patch
     d.打上補丁:git apply aa.patch
      (參考)打上補丁:patch -p0 <to-file.patch
    取消補丁:patch -RE -p0<to-file.patch
27.保存資料時格式:用途+類別+版本

28.服務器同步代碼用:

1、把repo文件複製到Linux下,chmod 777 repo賦予repo文件權限

2、新建一個文件夾用於存放安卓源碼(android)

3、進入android目錄下,執行../repo init --repo-url=ssh://[email protected]/tools/repo -u ssh://[email protected]/platform/manifest -b sofia/phone/5.1/develop -m sofia3gr.xml
命令,初始化

4、同步源碼  .repo/repo/repo sync,下載源碼

5、編譯內核
5.1 到kernel目錄下 cd  ~/Android/kernel
5.2 make i386_sofia_defconfig -j4
    make bzImage -j6
6、編譯Android
cd  ~/Android
source build/envsetup.sh 
Make -j64(./build.sh )

10.下載世紀天元 204服務器代碼:
    1. (內部服務器) ../repo init --repo-url ssh://git@10. 10.10.29/tools/repo -u ssh://[email protected]/repo-release/rk/platform/manifest -b android_lollipop_ext -m sofia3gr_lollipop_release.xml
          (對外服務器)  ../repo init -u ssh://gitolite@www.rockchip.com.cn:928/repo-release/rk/platform/manifest -b android_lollipop_ext -m sofia3gr_lollipop_release.xml
     2.   .repo/repo/repo sync
     .repo/repo/repo status  查看更新狀態
   同步代碼時出錯(sofia5.1項目爲cts測試專用代碼):
     與服務器代碼衝突,將本地代碼清掉,再.repo/repo/repo/sync:git prior sync failed; rebase still in progress
   到packages/apps/Settings/下將修改git checkout ./: error: packages/apps/Settings/: contains uncommitted changes
    3.產品sofia3gr_phone_u10000及sofia3gr_phone_u50000 編譯固件方式如下:
1.source build/envsetup.sh && setpaths
2.lunch      //請根據提示選擇對應的產品選項,u50000
3.編譯內核:make i386_sofia_defconfig && make bzImage -j32
4.make
5.   ./mkimage.sh SF_3GR-phone-u50000.dtb

如果固件爲user,直接adb root是進不了的,須改成userdebug的固件纔可以。

7. 在根目錄下 ./mkimage.sh SF_3GR-tablet.dtb,之後會在sofia_5.0/rockdev/Image-sofia3gr/下生成許多fls文件,拷出來,放到工具裏面

8. 在工具上,要先取消自定義順序,然後再選定,讓它自動排列後,全選文件,點擊next按鈕。

9、運行FlashUSB_Driver_1_0_1_1/x64/setup.exe

10、平板關機,連上電腦,等待燒寫畢自動重啓。



VMM項目:另一個倉庫,
 repo init --repo-url=ssh://[email protected]/tools/repo -u ssh://[email protected]/platform/manifest -b sofia/phone/5.1/develop -m sofia3gr_bootcore.xml

1、在使用icc時需要source下,具體操作:     
source /opt/intel/compiler_special_14.0.0.002/bin/compilervars.sh ia32 && make -j24
2. 生成替換文件,用於替換bootsystem修改:
cp -rf vmm_Android/vendor/intel/images/debug/* cts_5.1_r3/vendor/intel/images/debug/ && vmm_Android/vendor/intel/images/hex/* cts_5.1_r3/vendor/intel/images/hex/
cp  vmm_Android/vendor/intel/images/hex  到cts_5.1_r3/vendor/intel/images/phone_slb/
kaka@rk-intel-1:~$ cp vmm_Android/vendor/intel/images/hex/slb.hex  cts_5.1_r3/vendor/intel/images/phone_slb/slb.hex 
phone(比較特殊)

sofia3gr  android M:
repo init --repo-url ssh://[email protected]/tools/repo -u ssh://[email protected]/platform/manifest -b sofia/6.0/pdb -m default.xml 
bootcore:
repo init --repo-url ssh://[email protected]/tools/repo -u ssh://登錄名@10.10.10.204:29419/RKDB/bootcore/manifests -b sofia_rkdb_6.0

編譯kernel:
make xmm6321_watch_watret_defconfig 
(    ./arch/arm/configs/xmm6321_watch_watret_defconfig   kernel編譯文件 )
make zImage -j24
6321項目:編譯前需進入6321\kitkat,執行export
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
export JAVA_HOME=/usr/lib/jvm/java-6-sun
再進行編譯
source build/envsetup.sh  && setpaths && lunch     -> 19
172.16.10.213   

修改系統APP

1、找到/home/jorge/android/device/rockchip/sofia3gr/BoardConfig.mk,修改WITH_DEXPREOPT:=false
     把jar包優化成odex包: 在編譯腳本.mk裏面定義"WITH_DEXPREOPT:=true" 這樣做,系統在第一次起來的速度比較快
     WITH_DEXPREOPT=false,含義:dex預優化將被關掉
     或者直接在apk裏面進行修改        LOCAL_DEX_PREOPT := false
2、在/home/jorge/android/packages/apps目錄下找到需要修改的應用,下載到本地,用Source Insight進行修改編輯

3、把修改了的文件上傳到/home/jorge/android/packages/apps/具體APP目錄,

4、SecureCRT進入到/home/jorge/android/packages/apps/具體APP目錄,執行mm -B編譯APP

5、將編譯完成的APP導入到本地

6、進入CMD先後執行adb root, adb remount, adb push 源 目的地(adb push Contacts.apk /system/priv-app/Contacts)

7、adb reboot重啓系統後修改生效

SoundRecorder沒有添加到GMS包:
找到yuyongzhen/sofia5.1-sdk/device/rockchip/sofia3gr$ vim device.mk
找到PRODUCT_PACKAGES將SoundRecoder(packages/apps/SoundRecorder$ vim Android.mk  對應的LOCAL_PACKAGE_NAME := SoundRecorder)加進來

修改SystemUI路徑:(patch路徑)D:\forcompany\WinscpUSE\Sofia-hengchen-tablefls\hengchen-patch
sofia5.1-sdk/frameworks/base/packages/SystemUI/res/layout$ vim status_bar.xml

8.燒寫固件時:1.psi的問題,燒了一部分,prg的話,壓根不能燒
                        2.

 source build/envsetup.sh && setpaths && lunch 3 && make clean && cd kernel/ && make i386_sofia_defconfig &&  make bzImage -j32 && cd ../ && ./build.sh && ./mkimage.sh SF_3GR-wifionly-wm7.dtb 



現在的筆記本主要的都是win7+64位的系統,遇到STT安裝不成功和安裝之後無法使用的情況。按如下方法解決:
1.       在控制面板中卸載當先所有Microsoft Visual C++ xxx Redistributable 程序。
2.       卸載所裝的JRE及STT程序;
3.       重新啓動機器
4.       下載 如下的MS redistributable包 http://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE),並安裝;
5.       安裝 JRE,安裝程序jre-7u60-windows-i586。
6.       安裝STT程序 14.46版本;
7.       重新啓動機器(must)。

8.修改secureCRT字體顏色時,不要勾選ANSI顏色。


單獨打包boot.fls:
1.修改配置類文件(如rc,xml文件等),一般可以直接打包,不需再編譯,直接執行編譯腳本打包./mkimage.sh SF_3GR-tablet.dtb  再將boot.fls拖出即可
2.若是修改到代碼(framework等),需要編譯,生成庫或者apk(out下)之類的,將對應的庫或者apk  push到機器即可
3.如果改代碼,沒有生成庫或者apk,只能全編譯。

 版本對比:D:\forcompany\WinscpUSE\version_compare
將要對比的版本manifest.xml推到服務器上,在項目主目錄執行patch.sh 

串口使用:
1.電腦須有Com3口,驅動在D:\forcompany\常用文件\FT232R驅動程序
2.串口線,串口轉化器
3.打開SecureCRT,選擇Serial-COM會話。會話選項-串行-com3端口

 可以通過命令adb shell :getprop查看手機上所有屬性狀態值。或者 getprop init.svc.bootanim制定查看某個屬性狀態
 使用setprop init.svc.bootanim start 設置某個屬性的狀態
如果屬性名稱以“ro.”開頭,那麼這個屬性被視爲只讀屬性。一旦設置,屬性值不能改變。
如果屬性名稱以“persist.”開頭,當設置這個屬性時,其值也將寫入/data/property。
如果屬性名稱以“net.”開頭,當設置這個屬性時,“net.change”屬性將會自動設置,以加入到最後修改的屬性名。
(這是很巧妙的。 netresolve模塊的使用這個屬性來追蹤在net.*屬性上的任何變化。)
屬性“ ctrl.start ”和“ ctrl.stop ”是用來啓動和停止服務。每一項服務必須在/init.rc中定義.系統啓動時,與init守護
進程將解析init.rc和啓動屬性服務。一旦收到設置“ ctrl.start ”屬性的請求,屬性服務將使用該屬性值作爲服務名找到該服務,啓動該服務。
這項服務的啓動結果將會放入“ init.svc.<服務名>“屬性中。客戶端應用程序可以輪詢那個屬性值,以確定結果。
本質上來說庫是一種可執行代碼的二進制形式,可以被操作系統載入內存執行;庫有兩種:靜態庫(.a.lib)和動態庫(.so.dll
當此Activity實例化時,會動態將MyBroadcastReceiver註冊到系統中。當此Activity銷燬時,動態註冊的MyBroadcastReceiver將不再接收到相應的廣播。

系統屬性文件,調用set()和get()方法可進行屬性讀寫:
./frameworks/base/core/java/android/os/SystemProperties.java

eclipse 修改空格標準化:
1.選擇preferences->General->Editors->Text Editors(選定)在右側勾選show whitspace characters
ctrl+o:查看函數調用關係

No rule to make target `out/target/common/obj/JAVA_LIBRARIES/universal-image-loader-1.8.6-with-sources_intermediates/javalib.jar', needed by `out/target/common/obj/APPS/ImageBrowse_intermediates/classes-full-debug.jar'.  Stop
源碼根目錄:  make clobber
   make -j2

配置ANT環境變量參考:
ANT_HOME    C:/ apache-ant-1.8.1
path             D:\forcompany\InstallSofware\ANT\apache-ant-1.9.6\bin
classpath      C:/apache-ant-1.8.1/lib

1.系統服務被殺掉後一般都會自動重啓(由init控制)
2.JNI層必須實現爲動態庫的形式,才能確保被Java虛擬機能加載並調用
3.MediaScanner是Android平臺中多媒體系統的重要部分,主要用於掃描媒體文件,得到諸如歌曲時長、作者等信息,
並存入數據庫中,供其他程序使用
代碼理解:
static{
       System.loadLibrary("media_jni");//加載對應的JNI庫,media_jni是JNI庫的名字,
        native_init();            //實際加載時爲libmedia_jni.so,而在Windows平臺爲media_jni.dll
}

刪除system/priv-app/下的apk需要先:
adb root
adb remount
再adb shell進去到對應的目錄下rm -rf 刪除
LOCAL_DEX_PREOPT := false
前面引起不能訪問apk:


http://forum.xda-developers.com/showthread.php?t=2024780

搜索關鍵字:
在setting中沒搜索就到package/app目錄下搜索

還沒有就到frameworks/base/package中搜索

還沒有就是內置應用在device中搜索

還沒有就全局搜索 

 1.android M編譯說明:
 
• source build/envsetup.sh && setpaths 
• lunch   後面選對應的產品       
    sofia3gr                     是phone,當前r25可用
    sofia3gr_tablet           是tablet,SDK可用
• make 
• ./mkimage.sh    對應產品的 dtb  文件。
-----------------------------------------------
大家注意gerrit的時候,請記得激活郵箱,不然相互reveiw時,無法接收到通知。
有push權限的,是 gate_keeper分組,在提交完後,在 review界面,除了相關的模塊人員,一定要把這個組添加進去。 

RKDB:
請各位已下載mr0(即通過:repo init --repo-url ssh://git@10.10.10.29/tools/repo -u ssh://登錄名@10.10.10.204:29419/RKDB/android/manifests -b sofia_rkdb_6.0)
更新方式,直接在android的根目錄執行(未下載同事也可以直接使用如下地址下載)
repo init --repo-url ssh://git@10.10.10.29/tools/repo -u ssh://登錄名@10.10.10.204:29419/RKDB/android/manifests -b rkdb_m_mr1
.repo/repo/repo sync    提交方式,本地代碼我應爲第二種


/.repo$ rm manifests -rf
然後再git init 再更新
RKDB編譯方式:
完整編譯:
    1.cd android 
    2.lunch x 
    3.make -jx 
    4.cd kernel/sofia-3gr 
    5.make xxx_defconfig;make bzImage -jx 
    6../mkimage.sh xxx.dtb

單獨編譯kenrel
    1,拷貝boot.fls到kenrel更目錄
    2,make xxx_defconfig;make xxx.fls -jx

添加review組:android: ad_gate_keeper
                         bootcore/kernel:vk_gate_keeper 
vmm編譯方式沒變

使用SharedPreference:
寫數據:
//實例化SharedPreferences對象
SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); 
//實例化SharedPreferences.Editor對象 
SharedPreferences.Editor editor = mySharedPreferences.edit(); 
//用putString的方法保存數據 
editor.putString("name", "Karl"); 
editor.putString("habit", "sleep"); 
//提交當前數據 (必須做,不然無效)
editor.commit(); 

讀數據:
//在讀取SharedPreferences數據前要實例化出一個SharedPreferences對象 
SharedPreferencessharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); 
// 使用getString方法獲得value,注意第2個參數是value的默認值 
String name =sharedPreferences.getString("name", ""); 
String habit =sharedPreferences.getString("habit", ""); 
 
PreferenceActivity:
http://blog.csdn.net/lincyang/article/details/20609673

Settings中打開gps另一種方式
Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 1);

6.0  各位在203等共同工作的服務器上進行編譯時,遇到:

即:jack 的錯誤,是因爲系統資源緊張導致,可以通過配置個人目錄下.jack文件:
sensor等調試用:
adb shell進入機器後,然後再getevent

SecureCRT:串口時獲取如Sensor事件。
shell@sofia3gr:/ $ su
root@sofia3gr:/ # getevent

/AllAppList :Project->Build Automatically會主動去編譯項目,文件有錯就會報錯誤
R.java 文件import com.rk.allapp.R;  要根據包package="com.rk.allapp" 來執行(import的時候要看對應的文件是正確)   

 build/core/base_rules.mk:157: *** packages/apps/Settings: MODULE.TARGET.APPS.Settings already defined by Settings.  Stop. 

應用重複,導致錯誤,檢查主目錄,pacakage/apps/下是否應用重複了

把不要編譯的apk加入override路徑下就可以不再編譯該應用,前提是oveiide應用不互相關聯。

 usb口問題
  檢查網絡是否連好:    java.util.concurrent.ExecutionException: java.net.UnknownHostException: Unable to resolve host "watch.rkdatabase.com": No address associated with hostname
   andorid xml文件中:文字用sp, 佈局用dip(dp)或px  
   so庫:apk放置位置,4.4之前在mk文件中加LOCAL_PREBUILT_JNI_LIBS := lib/librkinfoDeviceTest.so配置路徑,將so庫放到system/lib目錄下
在5.1裏,將apk對應的so庫放到apk/libs/目錄下,同樣在mk文件中加上對應的路徑
  
採集apk聲音問題log:
setprop persist.audio.log 2   //抓取,開始播放的時候那一段的LOG採集下就行 
提取 tinycap /data/afe_out.wav -d 3 -c 2 -r 48000 -p 240 -n 2
播放時候會有AUD_HAL AUD_IMAS LOG生成,輸入tinycap /data/afe_out.wav -d 3 -c 2 -r 48000 -p 240 -n 2,  把生成的文件 pull出來
adb shell , su , touch data/pcm_play.pcm, chmod 777 data/pcm_play.pcm, 重啓, 復現,然後把data/pcm_play.pcm pull出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章