android 中android 编译版本选择,最小版本,目标版本都有什么区别

关于创建android项目时最低版本的配置
在创建Android项目的时候,需要配置最低使用版本,一般会填4,即android
1.6版本。不过,随着Android快速的更新换代,应该改改习惯了,创建Android项目时最低版本至少填8,即2.2版本。这样,当运行项目时,Eclipse会根据你填的最低版本号启动相应版本的模拟器,当然,前提是已经创建了相应的模拟器。
这里的设置还会牵扯到另一个问题,就是有时候随着Android系统的更新换代,其所带的API也会更新,进而有些旧的函数就会被弃用。因此,当我们创建项目时选了最低版本后,创建的项目就是相应的Android
开发包,这个时候就不要再去手动的改变开发包的版本了。否则有可能出现问题。
例如:一开始最低版本选了1.6,后来将项目的开发包改为2.2版本,而在开发时又刚好用到了一个2.2版本才有的函数void
fun2.2(),这样就会出现一种情况,在编译时使用的是2.2版本的开发包,因此没有错误,但是由于创建项目时选择了1.6作为最低版本,因此启动的模拟器是1.6的,当程序在模拟器里运行时调用的自然就是1.6的开发包,这样当程序运行到需要调用void
fun2.2()的时候就会出现错误了!报出找不到fun2.2()的异常。
本文系由于使用Service的onStartCommand方法时遇到上述问题而写。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。下次自动登录
现在的位置:
& 综合 & 正文
android编译user版本,如何启用user版本的adb
今天需要编译一个android4.2.2 的user版本来测试;
android编译相关的东西在源码的build目录下,全编前需要执行
. build/envsetup.sh
执行上面的shell脚本会include一些其他目录下的shell脚本,以及声明一些命令函数,比如说接下来执行的choosecombo命令;
function choosecombo()
choosetype $1
chooseproduct $2
choosevariant $3
set_stuff_for_environment
printconfig
choosecombo release msm8960
release表示的是Build type;(choose type) type有release和debug两个选项
msm8960表示的是product;(choose product) product有genric和msm8960,当然product根据项目不同是有不同选项的;
eng表示的是版本类型;(choose variant) variant有user,userdebug,eng三个选项
通过adb shell中执行getprop persist.sys.usb.config,可以看到系统usb的相关选项,persist.sys.usb.config显示的就是当前系统关于usb选项的系统配置;
diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
全编脚本中make命令会调用build/core/**main.mk**,在里面可以看到一段关于debuggable的编译选项,赋值ADDITIONAL_DEFAULT_PROPERTIES;
ifeq (true,$(strip $(enable_target_debugging)))
# Target is more debuggable and adbd is on by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
# Include the debugging/testing OTA keys in this build.
INCLUDE_TEST_OTA_KEYS := true
else # !enable_target_debugging
# Target is less debuggable and adbd is off by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
endif # !enable_target_debugging
include $(BUILD_SYSTEM)/Makefile
在build/core/Makefile中的
# default.prop
INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_TARGET)
ADDITIONAL_DEFAULT_PROPERTIES :=
$(call collapse-pairs, $(ADDITIONAL_DEFAULT_PROPERTIES))
ADDITIONAL_DEFAULT_PROPERTIES +=
$(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))
ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component,
$(ADDITIONAL_DEFAULT_PROPERTIES),=)
$(INSTALLED_DEFAULT_PROP_TARGET):
@echo Target buildinfo: $@
@mkdir -p $(dir $@)
$(hide) echo "#" & $@;
echo "# ADDITIONAL_DEFAULT_PROPERTIES" && $@;
echo "#" && $@;
$(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES),
echo "$(line)" && $@
build/tools/post_process_props.py $@
执行**post_process_props.py**脚本文件,**post_process_props.py会根据main.mk中的ro.debuggable指定的值来生成default.prop的persist.sys.usb.config;**
** 不过打开之后,对于user 版本adb shell 开启的还是shell 权限,而不是root 权限,如果您需要root 权限,需要再改一下system/core/adb/adb.c 里面的should_drop_privileges()
这个函数,在#ifndef ALLOW_ADBD_ROOT 时return 0; 而不是return 1; 即可。
# If ro.debuggable is 1, then enable adb on USB by default
# (this is for userdebug builds)
if prop.get("ro.debuggable") == "1":
val = prop.get("persist.sys.usb.config")
if val == "":
val = "adb"
val = val + ",adb"
prop.put("persist.sys.usb.config", val)
# UsbDeviceManager expects a value here.
If it doesn't get it, it will
# default to "adb". That might not the right policy there, but it's better
# to be explicit.
if not prop.get("persist.sys.usb.config"):
prop.put("persist.sys.usb.config", "none");
如果想要编译user版本的时候打开adb,修改
prop.put("persist.sys.usb.config", "none");
prop.put("persist.sys.usb.config", "adb");
eng版本的default.prop
# ADDITIONAL_DEFAULT_PROPERTIES
ro.secure=0
ro.allow.mock.location=1
ro.debuggable=1
persist.sys.usb.config=adb
默认user版本default.prop
# ADDITIONAL_DEFAULT_PROPERTIES
ro.secure=1
ro.allow.mock.location=1
ro.debuggable=0
persist.sys.usb.config=none
以上结论经过自己验证可行,如有错误之处,希望能够指出;
另外,针对user版本上无法进行usb debug,可以在settings-About phone-Build number上点击N次,然后就会提示“No need,you are already a developer”,这时,settings中
就会出现Develper options选项,进去就可以打开usb debug了;
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 最小的c语言编译器 的文章

 

随机推荐