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://git@10.10.10.29/tools/repo -u ssh://git@10.10.10.29/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://gitolite@10.10.10.204/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://git@10.10.10.29/tools/repo -u ssh://git@10.10.10.29/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://git@10.10.10.29/tools/repo -u ssh://git@10.10.10.29/platform/manifest -b sofia/6.0/pdb -m default.xml 
bootcore:
repo init --repo-url ssh://git@10.10.10.29/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出来

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值