Android编译选项eng、user、userdebug的区别

1. eng:debug版本;2. user:release版本;3. userdebug版本:部分debug版本

Android.mk文件中有配置项:LOCAL_MODULE_TAGS,一般配置值为:user/eng/optional/test四个值。

那么LOCAL_MODULE_TAGS设置为不同值有何作用呢?下面是对应不同值编译的结果:

1、user:只有在user版本时该模块才被编译进去(用户版本);

2、eng:只有在eng版本时该模块才被编译进去(工程版本);

3、test:只有在tests版本时该模块才被编译进去;

4、optional:在所有版本中都编译该模块进去。

其中的值可设置为1个或多个,分别对应编译选项的同一个或多个。那么eng、user、userdebug的区别是什么呢?

1、当make eng时,也即相当于make。此时BuildType为eng,那么其编译进去的内容包括:

· Intended for platform-level debugging

· Installs modules tagged with: eng, debug, user, and/or development

· Installs non-APK modules that have no tags specified

· Installs APKs according to the product definition files, in addition to tagged APKs

· Sets ro.secure=1

· Sets ro.debuggable=0

· Sets ro.kernel.android.checkjni=1

· adbd is enabled by default

2、当make user时,此时BuildType为user,那么其编译进去的内容包括:

· Intended to be the final release

· Installs modules tagged as user

· Installs non-APK modules that have no tags specified

· Installs APKs according to the product definition files (tags are ignored for APK modules)

· Sets ro.secure=1

· Sets ro.debuggable=0

· adbd is disabled by default

3、当make userdebug时,此时BuildType为userdebug,那么其编译进去的内容包括:

the same as user, except:

· Intended for limited debugging

· Installs modules tagged with debug

· Sets ro.debuggable=1

· adbd is enabled by default

各版本之间的差异:

(1) Debug/LOG 方面,原则上user 版本只能抓到有限的资讯,eng 可以抓到更多的资讯,Debug 能力更强,推崇使用eng 版本开发测试

*       因user/eng 版本设置ro.secure不同,导致user 版本adb 只拥有shell 权限,而eng 版本具有root 权限

*       MTK System LOG 在ICS 以后,在user 版本默认关闭全部LOG, 在eng 版本中默认打开,以便抓到完整的资讯

*       在eng 版本上,LOG 量 >= user 版本的log 量,一些地方会直接check eng/user 版本来确认是否打印LOG

*       user 版本默认关闭uart, eng 版本默认开启uart

*       在eng 版本上,开启ANR 的predump, 会抓取ftrace,可以得到更多ANR的资讯

*       在eng 版本上,可用rtt 抓取backtrace,可开启kdb 进行kernel debug, 可用ftrace 抓取cpu 执行场景

*       MTK aee 在ENG 版本抓取更多的异常资讯,比如native exception 会抓取core dump 信息

(2) 性能方面,原则上进行性能测试请使用user 版本测试

*       user 版本为提高第一次开机速度,使用了DVM 的预优化,将dex 文件分解成可直接load 运行的odex 文件,ENG 版本不会开启这项优化

*       更少的LOG 打印,uart 的关闭,原则上user 版本的性能要优于eng 版本

(3) 如何确认user/eng 版本

*       Java 层,check android.os.Build 类中的TYPE 值

*       native 层,property_get("ro.build.type", char* value, "eng"); 然后check value 值

*       Debug 时, adb shell getprop ro.build.type 返回值如果是user 即user 版本,eng 即eng 版本

*       Log 确认,  mobile log/Aplog_xxxxx/versions 中查看ro.build.type 属性

(4) 如何编译user/eng 版本

*       默认编译是eng 版本,如果需要编译user 版本,请加入参数 -o=TARGET_BUILD_VARIANT=user 如:

./mk -o=TARGET_BUILD_VARIANT=user mt6577_phone new

eng工程版本:adb默认是打开的,且设置向导是可选的。

user用户版本:adb默认是关闭的,dex打开(提高速度)

时间: 2024-08-07 07:28:42

Android编译选项eng、user、userdebug的区别的相关文章

【整理】Android中的gravity和layout_gravity区别

[背景] 在Android中,想要设置个按钮的水平对齐,都累死了: [已解决]ADT中已设置TableLayout布局的情况下如何设置按钮居中对齐    所以现在有必要搞清楚,到底gravity和layout_gravity到底有啥区别. 1.参考: Android – gravity and layout_gravity Android中gravity与layout_gravity的区别 中的解释,可以总结为: android:gravity : 表示当前View,即控件,内部的东西的,对齐方

Android support V3 v7 v13的区别

简单翻译: V4用于1.6到更高的API使用. V7是2.1到更高的API使用,其中包含ACtionBar. V13是3.2到更高的API的使用. 原文: v4 Support Library This library is designed to be used with Android 1.6 (API level 4) and higher. It includes the largest set of APIs compared to the other libraries, inclu

android:id="@android:id/tabhost" 、android:id="@+id/llRoot" 、android:id="@id/llRoot" 之间的区别

由于快要放暑假了,所以最近这俩周把Android方面的知识复习一下,准备找个实习工作. 顺便把自己的总结更大家分享一下,共同进步,谢谢.... 一. android:id="@android:id/tabhost"   是调用系统内部的ID 和代码中 mTabContent = (FrameLayout) findViewById(com.android.internal.R.id.tabcontent); 是一回事. 二. android:id="@+id/llRoot&q

二、 Android中gravity与layout_gravity的区别

android:gravity:设置的是控件自身上面的内容位置 android:layout_gravity:设置控件本身相对于父控件的显示位置. 看下如下代码段 <?xml version="1.0" encoding="utf-8"?><!-- android:gravity设置了按钮上面的文字的显示位置,而android:layout_gravity设置了按钮在布局中的显示位置.--><LinearLayout xmlns:and

Android之WebViewClient与WebChromeClient的区别

Android之WebViewClient与WebChromeClient的区别 2012-05-05      0个评论       收藏    我要投稿 ANDROID应用开发的时候可能会用到WEBVIEW这个组件,使用过程中可能会接触到WEBVIEWCLIENT与WEBCHROMECLIENT,那么这两个类到底有什么不同呢?WebViewClient主要帮助WebView处理各种通知.请求事件的,比如: onLoadResourceonPageStartonPageFinishonRece

Android中Rect和RectF的区别与联系

Android中Rect和RectF的区别与联系 1. 联系: 都是用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作.这块矩形区域,需要用左上和右下两个坐标点表示. 2. 区别: (1).精度不一样.Rect是使用int类型作为数值,RectF是使用float类型作为数值. (2).两个类型提供的方法也不是完全一致. 3. 代码部分 package com.pansoft.viewdemo.view; import android.content.Context; import andr

【Android】android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在

Android Serializable与Parcelable原理与区别

一.序列化.反序列化是什么? (1) 名词解释 对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程.对象的反序列化:把字节序列恢复为Java对象的过程. (2) 序列化详细解释 对象的序列化涉及三个点关键点:Java对象.字节序列.存储. 1. Java对象的组成?Java对象包含变量与方法.但是序列与反序列化仅处理Java变量而不处理方法,序列与反序列化仅对数据进行处理. 2. 什么是字符序列?字符序列是两个词,字符是在计算机和电信领域中,字符(Character)是一个

android ImageView setImageDrawable 和 setImageResource 的区别

1. setImageResource是同步的,资源图片的读取和解码都是在主线程中进行的.setImageDrawable是异步的. 2. 加载速度的区别.setImageResource要快于setImageDrawable和setImageBitmap. /** * Sets a drawable as the content of this ImageView. * * <p class="note">This does Bitmap reading and deco