大家好,今天来为大家分享gets apps的一些知识点,和getsapps.apk的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
本文目录
android.media.AsyncPlayer这个类应该怎么用如何查询oracle 数据库性能,sql资源占用cs高手来support you还是support for you如何用 Intellij 导入 Android 源码android.media.AsyncPlayer这个类应该怎么用代码结构:
OpenCore的代码在Android代码的External/Opencore目录中。这个目录是OpenCore
的根目录,其中包含的子目录如下所示:
android:这里面是一个上层的库,它实现了一个为Android使用的音视频采集,播放的接口,和DRM数字版权管理的接口实现。
baselibs:包含数据结构和线程安全等内容的底层库
codecs_v2:音视频的编解码器,基于OpenMAX实现
engines:核心部分,多媒体引擎的实现
extern_libs_v2:包含了khronos的OpenMAX的头文件
fileformats:文件格式的解析(parser)工具
nodes:提供一些PVMF的NODE,主要是编解码和文件解析方面的。
oscl:操作系统兼容库
pvmi:输入输出控制的抽象接口
protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容
pvcommon:pvcommon库文件的Android.mk文件,没有源文件。
pvplayer:pvplayer库文件的Android.mk文件,没有源文件。
pvauthor:pvauthor库文件的Android.mk文件,没有源文件。
tools_v2:编译工具以及一些可注册的模块。
本文主要介绍AndroidMediaPlayer的架构,主要由OpenCore里的PVPlayer来实现的。
1.概述
Android的MediaPlayer包含了Audio和Video的播放功能,Music和Video两个应用程序都是调用MediaPlayer实现的。
代码主要分布在以下的目录中:
JAVA程序的路径:
packages/apps/Music/src/com/android/music/
JAVA类的路径:
frameworks/base/media/java/android/media/MediaPlayer.java
JAVA本地调用部分(JNI):
frameworks/base/media/jni/android_media_MediaPlayer.cpp
编译为libmedia_jni.so
头文件:
frameworks/base/include/media/
多媒体库:
frameworks/base/media/libmedia/
编译为libmedia.so
多媒体服务:
frameworks/base/media/libmediaplayerservice/
编译为libmediaplayerservice.so
具体实现:
external/opencore/
编译为libopencoreplayer.so
libopencoreplayer.so是主要的实现部分,其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。
2.框架
在各个库中,libmedia.so位于核心的位置,它对上层的提供的接口主要是MediaPlayer类,libmedia_jni.so通过调用MediaPlayer类提供对JAVA的接口,并且实现了android.media.MediaPlayer类。
libmediaplayerservice.so是Media的服务器,它通过继承libmedia.so的类实现服务器的功能,而libmedia.so中的另外一部分内容则通过进程间通讯和libmediaplayerservice.so进行通讯。libmediaplayerservice.so的真正功能通过调用PV
Player来完成。
MediaPlayer部分的头文件在frameworks/base/include/media/目录中,这个目录是和libmedia.so库源文件的目录frameworks/base/media/libmedia/相对应的。主要的头文件有以下几个:
IMediaPlayer.h
IMediaPlayerClient.h
IMediaPlayerService.h
mediaplayer.h
MediaPlayerInterface.h
mediaplayer.h提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。
整个MediaPlayer库和调用的关系如下图所示:
运行的时候,大致可以分成Client和Server两个部分,分别在两个进程中运行,使用Binder机制实现IPC通讯。从框架结构上来看,IMediaPlayerService.h、IMediaPlayerClient.h和MediaPlayer.h三个类定义了MeidaPlayer的接口和架构,MediaPlayerService.cpp和mediaplayer.cpp两个文件用于MeidaPlayer架构的实现,MeidaPlayer的具体功能在PVPlayer(库libopencoreplayer.so)中的实现。
2.1IMediaPlayerClient.h
描述一个MediaPlayer客户端的接口
classIMediaPlayerClient:publicIInterface
{
public:
DECLARE_META_INTERFACE(MediaPlayerClient);
virtualvoidnotify(intmsg,intext1,intext2)=0;
};
classBnMediaPlayerClient:publicBnInterface
{
public:
virtualstatus_tonTransact(uint32_tcode,
constParcel&data,
Parcel*reply,
uint32_tflags=0);
};
在定义中,IMediaPlayerClient类继承IInterface,并定义了一个MediaPlayer客户端的接口,BnMediaPlayerClient继承了BnInterface,这是为基于Android的基础类Binder机制实现在进程通讯而构建的。事实上,根据BnInterface类模版的定义,BnInterface类相当于双继承了BnInterface和ImediaPlayerClient,这是Android一种常用的定义方式。
2.2mediaplayer.h
对外的接口类,它最主要是定义了一个MediaPlayer类:
classMediaPlayer:publicBnMediaPlayerClient
{
public:
MediaPlayer();
~MediaPlayer();
voidonFirstRef();
voiddisconnect();
status_tsetDataSource(constchar*url);
status_tsetDataSource(intfd,int64_toffset,int64_tlength);
status_tsetVideoSurface(constsp&surface);
status_tsetListener(constsp&listener);
status_tprepare();
status_tprepareAsync();
status_tstart();
status_tstop();
status_tpause();
boolisPlaying();
status_tgetVideoWidth(int*w);
status_tgetVideoHeight(int*h);
status_tseekTo(intmsec);
status_tgetCurrentPosition(int*msec);
status_tgetDuration(int*msec);
status_treset();
status_tsetAudioStreamType(inttype);
status_tsetLooping(intloop);
status_tsetVolume(floatleftVolume,floatrightVolume);
voidnotify(intmsg,intext1,intext2);
staticspdecode(constchar*url,uint32_t*pSampleRate,int*
pNumChannels);
staticspdecode(intfd,int64_toffset,int64_tlength,uint32_t
*pSampleRate,int*pNumChannels);
//……
}
从接口中可以看出MediaPlayer类刚好实现了一个MediaPlayer的基本操作,例如播放(start)、停止(stop)、暂停(pause)等。
另外的一个类DeathNotifier在MediaPlayer类中定义,它继承了IBinder类中的DeathRecipient类:
classDeathNotifier:publicIBinder::DeathRecipient
{
public:
DeathNotifier(){}
virtual~DeathNotifier();
virtualvoidbinderDied(constwp&who);
};
事实上,MediaPlayer类正是间接地继承了IBinder,而MediaPlayer::DeathNotifier类继承了IBinder::
DeathRecipient,这都是为了实现进程间通讯而构建的。
2.3IMediaPlayer.h
主要的的内容是一个实现MediaPlayer功能的接口:
classIMediaPlayer:publicIInterface
{
public:
DECLARE_META_INTERFACE(MediaPlayer);
virtualvoiddisconnect()=0;
virtualstatus_tsetVideoSurface(constsp&surface)=0;
virtualstatus_tprepareAsync()=0;
virtualstatus_tstart()=0;
virtualstatus_tstop()=0;
virtualstatus_tpause()=0;
virtualstatus_tisPlaying(bool*state)=0;
virtualstatus_tgetVideoSize(int*w,int*h)=0;
virtualstatus_tseekTo(intmsec)=0;
virtualstatus_tgetCurrentPosition(int*msec)=0;
virtualstatus_tgetDuration(int*msec)=0;
virtualstatus_treset()=0;
virtualstatus_tsetAudioStreamType(inttype)=0;
virtualstatus_tsetLooping(intloop)=0;
virtualstatus_tsetVolume(floatleftVolume,floatrightVolume)=0;
};
classBnMediaPlayer:publicBnInterface
{
public:
virtualstatus_tonTransact(uint32_tcode,
constParcel&data,
Parcel*reply,
uint32_tflags=0);
};
在IMediaPlayer类中,主要定义MediaPlayer的功能接口,这个类必须被继承才能够使用。值得注意的是,这些接口和MediaPlayer类的接口有些类似,但是它们并没有直接的关系。事实上,在MediaPlayer类的各种实现中,一般都会通过调用IMediaPlayer类的实现类来完成。
2.4头文件IMediaPlayerService.h
描述一个MediaPlayer的服务,定义方式如下所示:
classIMediaPlayerService:publicIInterface
{
public:
DECLARE_META_INTERFACE(MediaPlayerService);
virtualspcreate(pid_tpid,const
sp&client,constchar*url)=0;
virtualspcreate(pid_tpid,const
sp&client,intfd,int64_toffset,int64_tlength)=
0;
virtualspdecode(constchar*url,uint32_t*pSampleRate,int*
pNumChannels)=0;
virtualspdecode(intfd,int64_toffset,int64_tlength,uint32_t
*pSampleRate,int*pNumChannels)=0;
};
classBnMediaPlayerService:publicBnInterface
{
public:
virtualstatus_tonTransact(uint32_tcode,
constParcel&data,
Parcel*reply,
uint32_tflags=0);
};
由于有纯虚函数,IMediaPlayerService
以及BnMediaPlayerService必须被继承实现才能够使用,在IMediaPlayerService定义的create和decode等接口,事实上是必须被继承者实现的内容。注意,create的返回值的类型是sp,这个IMediaPlayer正是提供实现功能的接口。
3实现
3.1App
在packages/apps/Music/src/com/android/music/里的MediaPlaybackService.java文件中,包含了对MediaPlayer的调用。
在MediaPlaybackService.java中包含对包的引用:
importandroid.media.MediaPlayer;
在MediaPlaybackService类的内部,定义了MultiPlayer类:
privateclassMultiPlayer{
privateMediaPlayermMediaPlayer=newMediaPlayer();
}
MultiPlayer类中使用了MediaPlayer类,其中有一些对这个MediaPlayer的调用,调用的过程如下所示:
mMediaPlayer.reset();
mMediaPlayer.setDataSource(path);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
reset,setDataSource和setAudioStreamType等接口就是通过JAVA本地调用(JNI)来实现的。
3.2Jni
在frameworks/base/media/jni/android_media_MediaPlayer.cpp中实现,其中android_media_MediaPlayer_reset函数的实现如下所示:
staticvoidandroid_media_MediaPlayer_reset(JNIEnv*env,jobjectthiz)
{
spmp=getMediaPlayer(env,thiz);
if(mp==NULL){
jniThrowException(env,"java/lang/IllegalStateException",NULL);
return;
}
process_media_player_call(env,thiz,mp->reset(),NULL,NULL);
}
先获取一个MediaPlayer指针,通过对它的调用来实现实际的功能。
register_android_media_MediaPlayer用于将gMethods注册为的类"android/media/MediaPlayer",其实现如下所示。
staticintregister_android_media_MediaPlayer(JNIEnv*env)
{
jclassclazz;
clazz=env->FindClass("android/media/MediaPlayer");
//......
returnAndroidRuntime::registerNativeMethods(env,
"android/media/MediaPlayer",gMethods,NELEM(gMethods));
}
"android/media/MediaPlayer"对应JAVA的类android.media.MediaPlayer。
3.3libmedia.so
frameworks/base/media/libmedia/mediaplayer.cpp文件实现mediaplayer.h提供的接口,其中一个重要的片段如下所示:
constsp&MediaPlayer::getMediaPlayerService()
{
Mutex::Autolock_l(mServiceLock);
if(mMediaPlayerService.get()==0){
spsm=defaultServiceManager();
spbinder;
do{
binder=sm->getService(String16("media.player"));
if(binder!=0)
break;
LOGW("MediaPlayerServicenotpublished,waiting...");
usleep(500000);//0.5s
}while(true);
if(mDeathNotifier==NULL){
mDeathNotifier=newDeathNotifier();
}
binder->linkToDeath(mDeathNotifier);
mMediaPlayerService=interface_cast(binder);
}
LOGE_IF(mMediaPlayerService==0,"noMediaPlayerService!?");
returnmMediaPlayerService;
}
其中最重要的一点是binder=
sm->getService(String16("media.player"));这个调用用来得到一个名称为"media.player"的服务,这个调用返回值的类型为IBinder,根据实现将其转换成类型IMediaPlayerService使用。
一个具体的函数setDataSource如下所示:
status_tMediaPlayer::setDataSource(constchar*url)
{
LOGV("setDataSource(%s)",url);
status_terr=UNKNOWN_ERROR;
if(url!=NULL){
constsp&service(getMediaPlayerService());
if(service!=0){
spplayer(service->create(getpid(),this,url));
err=setDataSource(player);
}
}
returnerr;
}
如何查询oracle 数据库性能,sql资源占用作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作。下面简单介绍下一些查看oracle性能的一些实用方法:
1、查询每台机器的连接数
selectt.MACHINE,count(*)fromv$sessiontgroupbyt.MACHINE
这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数,以websphere为例,在数据源中,每个数据源都有配置其最大/最小连接数。
执行SQL后,可以看到每个服务器连接oracle数据库的连接数,若某个服务器的连接数非常大,或者已经达到其最大连接数,那么这台服务器上的应用可能有问题导致其连接不能正常释放。
2、查询每个连接数的sql_text
v$session表里存在的连接不是一直都在执行操作,如果sql_hash_value为空或者0,则该连接是空闲的,可以查询哪些连接非空闲,web3是机器名,就是WebSphereApplicationServer的主机名。
selectt.sql_hash_value,t.*fromv$sessiontwheret.MACHINE='web3'andt.sql_hash_value!=0
这个SQL查询出来的结果不能看到具体的SQL语句,需要看具体SQL语句的执行下面的方法。
3、查询每个活动的连接执行什么sql
selectsid,username,sql_hash_value,b.sql_text
fromv$sessiona,v$sqltextb
wherea.sql_hash_value=b.HASH_VALUEanda.MACHINE='web3'
orderbysid,username,sql_hash_value,b.piece
orderby这句话的作用在于,sql_text每条记录不是保存一个完整的sql,需要以sql_hash_value为关键id,以piece排序,如图
Username是执行SQL的数据库用户名,一个sql_hash_value下的SQL_TEXT组合成一个完整的SQL语句。这样就可以看到一个连接执行了哪些SQL。
4、.从V$SQLAREA中查询最占用资源的查询
selectb.usernameusername,a.disk_readsreads,a.executionsexec,
a.disk_reads/decode(a.executions,0,1,a.executions)rds_exec_ratio,
a.sql_textStatement
fromv$sqlareaa,dba_usersb
wherea.parsing_user_id=b.user_id
anda.disk_reads>100000
orderbya.disk_readsdesc;
用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。
V$SQL是内存共享SQL区域中已经解析的SQL语句。
该表在SQL性能查看操作中用的比较频繁的一张表,关于这个表的详细信息大家可以去http://apps.hi.baidu.com/share/detail/299920#上学习,介绍得比较详细。我这里主要就将该表的常用几个操作简单介绍一下:
1、列出使用频率最高的5个查询:
selectsql_text,executions
from(selectsql_text,executions,
rank()over
(orderbyexecutionsdesc)exec_rank
fromv$sql)
whereexec_rank<=5;
该查询结果列出的是执行最频繁的5个SQL语句。对于这种实用非常频繁的SQL语句,我们需要对其进行持续的优化以达到最佳执行性能。
2、找出需要大量缓冲读取(逻辑读)操作的查询:
selectbuffer_gets,sql_text
from(selectsql_text,buffer_gets,
dense_rank()over
(orderbybuffer_getsdesc)buffer_gets_rank
fromv$sql)
wherebuffer_gets_rank<=5;
这种需要大量缓冲读取(逻辑读)操作的SQL基本是大数据量且逻辑复杂的查询中会遇到,对于这样的大数据量查询SQL语句更加需要持续的关注,并进行优化。
3、持续跟踪有性能影响的SQL。
SELECT*FROM(
SELECTPARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea
ORDERBYdisk_readsDESC
)
WHEREROWNUM<10
这个语句在SQL性能查看中用的比较多,可以明显的看出哪些SQL会影响到数据库性能。
本文主要介绍了使用SQL查询方式查看oracle数据库SQL性能的部分常用方法。此外还有许多工具也能实现SQL性能监控,大家可以在网上搜索相关知识进行学习。
转载仅供参考,版权属于原作者
cs高手来脚本可以更改CS游戏ENGINE里的很多默认的程序参数.这样以来CS打起来的效果会不一样.从键盘设定到操作功能到显示数据很多东西都可以改.一般1.6正版装好后脚本就是C:\ProgramFiles\Valve\Steam\SteamApps\帐号名称\counter-strike\cstrike文件夹里的config.cfg,也是游戏的默认程序参数.要更改它可以但是一般都设置一个userconfig.cfg用来做自己的个人脚本.这样你到那里都可以带自己的习惯操作模式.
总之是通过修改这个文件脚本来实现更简易的操作和更适合自己习惯的操作
比如可以修改这个脚本轻易实现大跳缩小准星武器套装甚至还有一些脚本是用来实现自动开枪点射的
和传统意义上的作弊器是不一样的不过某些参数的修改是被认为作弊的例如自动点射还有准星缩小和准星回应时间缩短这样的
CS脚本编辑大全
脚本,已经成为很多CS玩家所关注的东西,但是大家对于脚本的理解到底有多少呢??下面就给你们详细的介绍一下,如果你能坚持看完,那么你就会发现你真的学会了些东西~~~
首先介绍脚本的基本知识:
什么是bind?
Bind就是分配一个命令到指定的键,它同样能够分配一个alias到指定的键。
比如:
bind"MOUSE1""+attack"
表示分配+attack(攻击)这个命令到指定的键MOUSE1(鼠标左键)
什么是alias?
Alias就是给一组命令定义一个名称,当你定义过后,CS就认为此alias为一个普通的命令,你可以用bind命令分配一个键给这个alias,也可以在其他的alias中使用它。
比如:
aliashw"sayHelloWorld!"
则当你在控制台(console)中输入hw这条命令回车执行后你就对服务器里所有的玩家说了HelloWorld!这句话,你还可以用bind命令:
bindv"hw"当你按过v键后你同样对服务器里所有的玩家说了HelloWorld!这句话。
又比如:
aliasbuym"buy;menuselect3;menuselect1"
aliasbuyv"buy;menuselect8;menuselect1"
aliasbuysay"buym;buyv;hw"
bindj"buysay"
则表示当你执行buysay命令(如按下由bind分配好的j键)后购买MP5和普通防弹衣然后对服务器里所有的玩家说HelloWorld!这句话。此alias实现的方法为:第一步执行buym命令,buym命令已经定义好为"打开购买菜单;选择菜单第3项;再选择菜单第1项"即实现了购买MP5的功能,第二步执行buyv命令,buyv命令已经定义好为"打开购买菜单;选择菜单第8项;再选择菜单第1项"即实现了购买普通防弹衣的功能,第三步执行之前已经定义好的hw命令:对服务器里所有的玩家说HelloWorld!这句话。把这三步命令定义为一个新的命令buysay然后用bind命令分配一个键(此处为j键)给这个alias(此处为buysay)则当你按下j键后就实现了这三步命令的功能。
注意:alias语句不能超过259个字符即下面这行字符的长度在Half-Life:Counter-Strike里:
什么是脚本(Script)?
脚本(Script)就是含有bind和alias等命令的集合,你可以把这个集合存为一个独立的文件然后在需要的时候执行,这样就可以方便你在CS中的使用。脚本可以存为后缀名为.cfg的文件放在cstrike文件夹下,执行时在控制台输入:
exec脚本文件名.cfg即可。比如将以上的脚本存为buys.cfg文件,则在控制台中输入:
execbuys.cfg则可以实现我们所需要的功能。
比如:我们执行了一系列命令,执行这一系列命令有一个过程。
用一个命令把这一过程定义(alias)好,最后分配(bind)一个键位给这个命令,以后只要按分配好的键位,就可以实现这一过程。所有的脚本都是通过这一方法实现的。
所有可以用Bind命令设定的键位:
字母键
ABCDEFGHIJKLMNOPQRSTUVWXYZ
数字键
1234567890
鼠标键
MOUSE1MOUSE2MOUSE3MOUSE4AUX5AUX6
MWHEELUPMWHEELDOWN
手柄键
JOY1JOY2JOY3JOY4AUX5AUX6
特殊键
EnterSpaceShiftCtrlPause
AltBackspaceTabEscape
功能键
F1F2F3F4F5F6
F7F8F9F10F11F12
编辑键
Ins
Del
Home
End
Pgdn
Pgup
方向键
Leftarrow
Rightarrow
Uparrow
Downarrow
小键盘键
kp_leftarrow
kp_del
kp_end
kp_downarrow
kp_pgup
kp_ins
kp_5
kp_plus
kp_uparrow
kp_enter
kp_pgdn
kp_rightarrow
kp_slash
kp_minus
kp_home
其他键
,
.
/
;
\'
*
[
]
-
=
~
所有可以设定的命令/变量
命令/变量的名称服务端/客户端使用基本的设定种类注释
+attack客户端玩家攻击
+attack2客户端玩家特殊攻击/功能(如开瞄准镜、单倍放大等等)
+back客户端玩家退后
+duck客户端玩家蹲下
+forward客户端玩家前进
+jump客户端玩家跳跃
+klook客户端玩家用键盘看
+left客户端玩家向左转
+lookdown客户端玩家向下看
+lookup客户端玩家向上看
+mlook客户端鼠标用鼠标看
+movedown客户端玩家向下移动(如爬梯子、游泳)
+moveleft客户端玩家向左平移
+moveright客户端玩家向右平移
+moveup客户端玩家向上移动(如爬梯子、游泳)
+reload客户端玩家换子弹
+right客户端玩家向右转
+showscores客户端玩家显示玩家的分数和Ping值
+speed客户端玩家让玩家走路如果奔跑时;奔跑如果走路时
+strafe客户端玩家平移键
+use客户端玩家使用键(拆炸弹、救人质等等)
adjust_crosshair客户端玩家改变准星颜色
alias"cmd1;cmd2"客户端玩家定义命令批量处理变量
allowupload客户端上传/下载是否允许上传本地的文件到服务器。
ambient_fade100客户端音频设定周围声音多远距离消失
ambient_level0.300客户端音频设定周围声音的等级
appenddemo客户端demo在该录像文件后继续录像,不覆盖原录像
bind客户端玩家设定键位用于执行命令
bottomcolor6客户端玩家设定玩家人物模型的底部颜色
brightness1客户端视频设定亮度
buy客户端玩家打开购买武器菜单
buyequip客户端玩家打开购买装备菜单
buyammo1客户端玩家买主弹药
buyammo2客户端玩家买手枪弹药
cancelselect客户端玩家取消选择
changeteam客户端玩家打开队伍选择菜单
cl_allowdownload0客户端上传/下载客户端是否允许下载
cl_allowupload0客户端上传/下载客户端是否允许上传
cl_anglespeedkey0.670客户端玩家设定方向键改变视角的速度
cl_backspeed400客户端玩家客户端设定后退的速度
cl_bob0.010客户端玩家客户端设定奔跑时手臂摆动的幅度
cl_bobcycle0.800客户端玩家客户端设定奔跑时手臂摆动的频率
cl_bobup0.500客户端玩家客户端设定奔跑时手臂摆动的范围
cl_download_ingame0客户端上传/下载客户端设定是否允许在游戏里下载
cl_forwardspeed400客户端玩家客户端设定前进的速度
cl_gaitestimation1客户端玩家开启估计玩家的运动步幅
cl_gg0客户端玩家开关游戏的标准模式
cl_himodels客户端玩家客户端设定是否允许使用高质量模型
cl_messages客户端玩家客户端设定显示服务器信息
cl_movespeedkey0.300客户端玩家设定键盘移动速度
cl_nopred0客户端玩家开关玩家的预先选择
cl_pitchdown客户端玩家设定玩家向下看的最大角度,默认:89
cl_pitchspeed225客户端玩家设定角速度
cl_pitchup客户端玩家设定玩家向上看的最大角度,默认:89
cl_showfps1客户端玩家显示你的FPS值
cl_shownet0客户端玩家显示你的网络传输包值
cl_slist10客户端玩家设定列出的服务器个数
cl_solid_players1客户端玩家开关固定玩家模型
cl_upspeed320客户端玩家设定向上移动(如爬梯子、游泳)的速度
cl_waterdist4客户端玩家设定在水下最深所能到达的距离
cl_yawspeed210客户端玩家设定转身的速度(由服务器最大值设定)
clear客户端玩家清除控制台上的信息
cmd客户端玩家执行命令
cmdlist客户端/服务端所有列出所有命令
connect客户端玩家连接到服务器用输入IP的方式
cvarlist客户端/服务端所有列出所有变量
developer0客户端开发者开关调试信息
disconnect客户端玩家从服务器上断开连接
drawradar客户端玩家显示雷达
drop客户端玩家扔掉当前武器/装备
echo"message"客户端玩家显示"message"中的文字信息
enableconsole客户端玩家允许控制台
escape客户端玩家取消键
exec客户端/服务端所有执行一个脚本文件
exit客户端/服务端所有退出游戏
fakelag0客户端玩家模拟Lag延迟
fakeloss0客户端玩家模拟Loss网络丢包
force_centerview客户端玩家强制玩家回到正前方的视角
fps_lan客户端玩家设定局域网游戏中的最大FPS值
fps_modem客户端玩家设定互联网游戏中的最大FPS值
fps_single客户端玩家设定单人游戏中的最大FPS值
fullinfo客户端玩家显示用户信息
fullserverinfo客户端玩家显示服务器信息
gamma3客户端视频设定gamma亮度值
getcertificate客户端玩家www.WON.net上获取CD-Key认证
getsv客户端玩家列出服务器的IP地址和服务器的总数
gl_alphamin0.250客户端视频设定最小alpha混合等级
gl_clear0客户端视频开关对画面上各个模型连接的部分的连贯渲染
gl_cull1客户端视频是否只对可以看到的画面进行渲染
gl_d3dflip0客户端视频在Direct3D模式中开关反向渲染命令
gl_dither1客户端视频开关颜色抖动
gl_dump客户端视频列出显卡的信息
gl_flipmatrix0客户端视频开关特殊的准星修正当适用3DNow和3DfxMiniOpenGL驱动时
gl_keeptjunctions0客户端视频开关显示材质间的缝隙
gl_lightholes0客户端视频光洞效果开关
gl_max_size256客户端视频贴图材质的最大解析度
gl_monolights0客户端视频开关统一光源(无阴影)OpenGL适用
gl_overbright0客户端视频开关最大亮度模式
gl_palette_tex0客户端视频开关调色贴图值、材质
gl_picmip0客户端视频环境贴图效果(0-3)
gl_playermip0客户端视频玩家模型的贴图效果(0-3)
gl_polyoffset4客户端视频设定多边形补偿
gl_round_down3客户端视频设定材质循环
gl_smoothmodels0客户端视频玩家模型光滑处理开关
gl_spriteblend0客户端视频开关子画面混合
gl_texels客户端视频报告传输到显卡的texel数量
gl_texsort0客户端视频开关一个texel的种类
gl_texturemode[type]客户端视频设定渲染模式[type]的类型:gl_nearest_mipmap_nearest,gl_linear_mipmap_nearest(这两个进行双线性过滤处理)和gl_nearest_mipmap_linear,gl_linear_mipmap_linear(这两个进行三线性过滤处理)
gl_zmax4096客户端视频设定Z-Buffer缓存的最大值
gl_ztrick1客户端视频开关3Dfx的加速渲染模式
graphheight64客户端玩家设定r_netgraph的显示高度
graphhigh512客户端玩家设定r_netgraph显示的最大值
graphmean1客户端玩家设定r_netgraph显示的平均值
graphmedian128客户端玩家设定r_netgraph显示的中间值
hideconsole客户端玩家隐藏控制台
hideradar客户端玩家隐藏雷达
hisound1客户端音频是否使用高品质音频
hud_centerid0客户端玩家是否在屏幕中间显示玩家的ID名字
hud_fastswitch0客户端玩家是否快速切换武器
hud_saytext_time5客户端玩家设定文字在屏幕上停留的时间
impulse100客户端玩家开关战术手电
impulse201客户端玩家喷图
lastinv客户端玩家切换到上一次使用的武器
invnext客户端玩家切换到下一种武器
invprev客户端玩家切换到上一种武器
kill客户端玩家在游戏中自杀
lightgamma2.500客户端视频设定光线的gamma值
listdemo客户端demo列出录像的信息
lookspring0客户端鼠标开关自动回复视角到中心当mlook关闭时
lookstrafe0客户端鼠标开关鼠标平移当mlook开启时
m_filter0客户端鼠标开关鼠标调整(使移动平滑)
m_forward客户端鼠标设定鼠标向前时的递增灵敏度
m_pitch0.022客户端鼠标设定鼠标上下移动时的递增灵敏度
m_side0.800客户端鼠标设定鼠标平移时的递增灵敏度
m_yaw0.022客户端鼠标设定鼠标偏转时的递增灵敏度
menuselect客户端玩家从菜单中选择项目
messagemode客户端玩家对服务器上的所有玩家发文字信息
messagemode2客户端玩家对队友发文字信息
motd客户端玩家显示服务器上的motd.txt文件内容信息
name客户端玩家玩家改ID名字
net_graph1客户端玩家显示网络速度图形(0-3)
nosound0客户端音频开关声音
pingsv客户端玩家ping一个服务器
play客户端音频播放一个指定的.wav文件
playdemo客户端demo使用正常速度,播放录像
playvol9客户端demo设置录像播放的次数
pushlatency-100客户端玩家设定这个数字来抵消你的ping值以帮助你的反应时间
quit客户端/服务端所有退出游戏
r_decals250客户端玩家设定最大的细节数据
r_drawviewmodel0客户端玩家是否显示武器模型
r_dynamic0客户端视频动态光影效果开关
r_mmx0客户端玩家开关CPU的MMX支持
radio1客户端玩家打开语音信息菜单1
radio2客户端玩家打开语音信息菜单2
radio3客户端玩家打开语音信息菜单3
r_netgraph0客户端玩家开关网络情况图形显示
rate5000客户端玩家设定客户端的数据速率1000-5000互联网上的10000局域网上的
reconnect客户端玩家重新连接到当前的服务器
record客户端demo录制demo录像
retry客户端玩家重试4次连接到当前已连接失败的服务器
s_2dvolume1客户端音频设定在2D声音中的最大音量(0-1.0)
s_a3d0客户端音频开关A3D的支持
s_automax_distance30客户端音频设定最大距离的音量
s_automin_distance2客户端音频设定最小距离的音量
s_bloat2.0客户端音频多边形的膨胀因素A3D2.0适用
s_buffersize65536客户端音频设定缓冲的大小
s_disable_a3d0客户端音频开关屏蔽A3D的功能
s_distance60客户端音频调整声音发声的距离(0-n)
s_doppler0.0客户端音频调整doppler(0-10)
s_eax0客户端音频开关EAX支持
s_enable_a3d客户端音频打开A3D支持
s_geometry0客户端音频开关声音的几何渲染A3D2.0适用
s_max_distance1000客户端音频声源到听众的最大距离(\'s_min_distance\'-n)
s_min_distance5客户端音频声源到听众的最小距离(0-\'s_max_distance\')
s_numpolys200客户端音频最大的声音反射多边形值A3D2.0适用(0-n)
s_occfactor0.250客户端音频金属传递声音的值(0-1.0)
s_occlude0客户端音频开关声音通过金属时的声音A3D2.0适用
s_refdelay4客户端音频声源到达最近的反射面的延迟A3D2.0适用(0-100)
s_refgain0.4客户端音频设定声音随着距离远近的反射强度A3D2.0适用(0-10)
s_verbwet0.25客户端音频控制混合回响的干湿度A3D适用(0-1.0)
say"message"客户端玩家与当前服务器里的所有玩家交谈
say_team"message"客户端玩家与前服务器里的队友交谈
scr_centertime2客户端玩家设定服务器信息在屏幕上停留的时间
scr_conspeed600客户端玩家设定控制台的卷动速度
scr_printspeed7客户端玩家设定屏幕上的打字速度
screenshot客户端玩家抓图
sensitivity9客户端鼠标设定鼠标的速度
serverinfo客户端玩家显示服务器信息
setdemoinfoinfo客户端demo增加一个录像信息,例如一段文字,渐进渐出或者快进快退
setinfo客户端玩家设定信息
showbriefing客户端玩家显示当前地图的简报
showinfo0客户端玩家是否显示信息
showpackets0客户端玩家是否显示网络传输包信息
showpause0客户端玩家是否显示暂停的文字信息
showram0客户端玩家是否显示可用的内存信息
sizedown客户端玩家缩小屏幕提高FPS值
sizeup客户端玩家增大屏幕降低FPS值
slot1客户端玩家选择1
slot2客户端玩家选择2
slot3客户端玩家选择3
slot4客户端玩家选择4
slot5客户端玩家选择5
slot6客户端玩家选择6
slot7客户端玩家选择7
slot8客户端玩家选择8
slot9客户端玩家选择9
slot10客户端玩家选择10
snapshot客户端玩家抓图
speak客户端玩家使用对讲机/麦克风说话
startdemos客户端demo开始循环播放一段demo录像
stop客户端demo停止录制录像
stopdemo客户端demo停止播放录像
stopsound客户端音频停止播放当前声音
swapdemo客户端demo交换录像中两处片断位置
timedemo客户端demo播放一段录像,同时显示最大fps及返回平均fps(测试显卡时使用)
toggleconsole客户端玩家开关控制台
topcolor30客户端玩家设定玩家人物模型的顶部颜色
unbind客户端玩家取消到某键的bind
unbindall客户端玩家取消到所有键的bind
use客户端玩家使用装备或武器
vid_config_x800客户端视频设定屏幕的水平分辨率
vid_config_y600客户端视频设定屏幕的垂直分辨率
vid_d3d0客户端视频开关Direct3D模式的支持
vid_describemode客户端视频显示视频模式的设定
vid_mode0客户端视频设定视频模式
vid_nopageflip0客户端视频开关屏蔽视频页面翻动
vid_wait0客户端视频视频同步(sync)开关
viewframe客户端视频打开wire-frame显示-只适用OpenGL显示模式
violence_ablood0客户端玩家开关血渍的显示
volume1.0客户端音频设定游戏中的音量(0-1.0)
weapon_客户端玩家
手枪-glock18/usp/deagle/p228/elite/fiveseven
冲锋枪-mp5navy/p90/tmp/mac10/ump45
突击步枪-ak47/sg552/m4a1/aug霰弹枪-m3/xm1014
狙击步枪-scout/awp/g3sg1/sg550重机枪-m249
其他装备-c4/knife手雷-flashbang/hegrenade/smokegrenade
这些可以直接选中你所选的武器/装备
wait客户端玩家一个极小的暂停,用来执行脚本。
脚本的几种形式:
1:基本式脚本:
在脚本文件中//作用为注释,CS系统不会执行//后的文字。如在脚本中加入:
//单身的至尊宝制作
系统并不会管理这行文字而是忽略掉//及之后的文字。
在脚本文件中""作用为alias的开始和结束标志。
在脚本文件中;的作用是分开两条命令语句。
首先你必须了解developer这一命令这是关于调试信息的命令:在控制台输入developer1后所有载控制台中显示的信息都会在游戏的屏幕上显示出来。相反输入developer0则关闭显示信息。注意:这些信息只是你本身的客户端能看到,并不会发送的其他的玩家那里。
比如我想要在屏幕的上方显示ThisScriptEditedbyNick这条信息,可以在控制台中用命令echoThisScriptEditedbyNick实现,但在游戏时是不可能看得到的(被控制台挡住了)怎样实现呢?我们可以用一个alias脚本实现:
aliasnick"developer1;echoThisScriptEditedbyNick;developer0"
然后bindv"nick"关闭/隐藏控制台后在你按下v键后屏幕的上方就会显示ThisScriptEditedbyNick这条信息。
其次你可以使用alias语句使一些系统默认的命令简化,如:
aliasdvon"developer1"
aliasdvoff"developer0"
则上一条脚本可以简化成:
aliasnick"dvon;echoThisScriptEditedbyNick;dvoff"这对我们编辑较长的脚本时十分有用。
wait命令在脚本中也是十分常用的,它的作用是在执行脚本时做一个极小的暂停,当你的延迟情况不是很严重时可以只使用几个wait命令,当你的延迟情况比较糟糕时可以多用几个wait命令来使你的脚本得以完整/正确的执行。如:
aliasclmenu"wait;wait;wait;slot10"
这条命令是用来清除屏幕上的菜单信息的,在开头的买枪脚本中买完枪后并没有清除购买菜单我们需要按0键来清除菜单,而如果使用了这里的clmenu命令则可以清除购买菜单,slot10的功能就是选择菜单上的0项。而前面的几个wait命令就是为了防止由网络延迟引起的系统忽略了slot10这条命令,还可以更保险一些把clmenu命令写成:
aliasclmenu"wait;wait;wait;slot10;wait;wait;slot10"选两次0项来清除购买菜单。
如果你需要较多的延迟也可以写出下面的命令:
aliasw1"wait;wait;wait;wait;wait;wait;wait;wait;wait;wait"然后在需要时用w1命令代替wait命令。
2:购买式脚本:
首先了解购买式脚本的基本命令:
buy打开武器购买菜单
buyequip打开装备购买菜单
menuselectx从菜单中选择项目x
buyammo1购买一个弹夹的主武器子弹。默认为,键。
buyammo2购买一个弹夹的手枪子弹。默认为.键。
其次做一些准备工作:
file://------------------------------------------file://|设置买子弹、清除菜单等功能
file://------------------------------------------
aliasnick"dvon;echoThisScriptEditedbyNick;dvoff"
aliasdvon"developer1"
aliasdvoff"developer0"
file://在控制台中输入clmping即可切换ping值高和低时清除菜单的速度
alias"clmping""clmenu400"
file://选择菜单上的项目0,清除菜单(ping值>400时使用)
alias"clmenu400""aliasclmpingclmenu;wait;wait;wait;wait;slot10;wait;slot10;wait;slot10;wait;slot10"
file://选择菜单上的项目0,清除菜单(ping值<50时使用)
alias"clmenu""aliasclmpingclmenu400;wait;wait;wait;slot10;wait;wait;slot10"
alias"fammo""buy;menuselect6;buy;menuselect7;"//买满主武器和手枪的弹夹,满的所有弹夹
alias"wammo""buy;menuselect6;"//买满主武器的弹夹
alias"sammo""buy;menuselect7;"//买满手枪的弹夹
alias"b1""buyammo1;"//1个主弹夹
alias"b2""buyammo1;buyammo1;"//2个主弹夹
alias"b3""buyammo1;buyammo1;buyammo1;"file://3个主弹夹
alias"b4""buyammo1;buyammo1;buyammo1;buyammo1;"//4个主弹夹
alias"b5""buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;"//5个主弹夹
alias"b6""buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;"//6个主弹夹
alias"b7""buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;"//7个主弹夹
alias"b8""buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1"//8个主弹夹
alias"b9""buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;buyammo1;"//9个主弹夹
alias"bs1""buyammo2;"//1个手枪弹夹
alias"bs2""buyammo2;buyammo2;"//2个手枪弹夹
alias"bs3;""buyammo2;buyammo2;buyammo2;"//3个手枪弹夹
alias"bs4""buyammo2;buyammo2;buyammo2;buyammo2;"//4个手枪弹夹
alias"bs5""buyammo2;buyammo2;buyammo2;buyammo2;buyammo2;"//5个手枪弹夹
编写购买脚本:
file://-----------------------------file://|一键买枪
file://-----------------------------alias"ak/m4""buy;menuselect4;menuselect1;buy;menuselect4;menuselect3;fammo;clmenu;say_teamIamTake[KalashnikovAK-47/ColtM4A1Carbine]"file://买AK47/M4A1和所有子弹
alias"sg552/aug""buy;menuselect4;menuselect2;buy;menuselect4;menuselect4;fammo;clmenu;say_teamIamTake[SG552Commando/SteyrAug]"file://买SG552/Aug和所有子弹
alias"awp""buy;menuselect4;menuselect6;fammo;clmen
support you还是support for you1.supportn.支持不可数名词
Ineedmyfriends’support.
我需要我朋友们的支持。
Myneighboursgavemealotofsupport.
我的邻居给予我很多支持。
短语:supportforsth.有关…的支持
Tedneedsoursupportforhisproject.
泰德需要我们支持他的项目。(有关他的项目的支持)
Weneedalotofsupportfortheenvironmentprotection.
我们在环境保护方面需要很多支持。(有关环境保护的支持)
短语:supportof/fromsb.来自…的支持
Ihadthefullsupportofmyfamily.
我有我家人的全力支持。
Yourteamgetsalotofsupportfromyourfans.
你的小组得到了你的粉丝们的大力支持。
2.supportv.支持
supportsb./sth.支持某人/某事
Idon’tlikewar.Idon’tsupportwar.
我不喜欢战争。我不支持战争。
YoucansupportusbywearingourT-shirt.
你可以通过穿我们的T恤来支持我们。
Jackcompletelysupportsmydecision.
杰克完全支持我的决定。
如何用 Intellij 导入 Android 源码针对定制源码或者原生源码来说,这些准备步骤都是必须的,没必要再强调了。
2-2配置导入及使用
2-2-1编译源码idegen模块及生成AS配置文件(*.ipr)
在开始编译idegen模块前,你一定知道需要先全局编译出out目录及相关文件吧,这个不再过多说了,我们通过如下命令编译idegen模块:
mmmdevelopment/tools/idegen/1
这行命令的意思是编译idegen这个模块项目,然后生成idegen.jar文件(不信你自己去查看这个模块的Android.mk的目标吧,不多解释)。运行完以后如果看到如下信息则说明编译OK:
......
####makecompletedsuccessfully(7seconds)####12
接着执行如下脚本:
development/tools/idegen/idegen.sh1
这行命令的意思是在根目录生成对应的android.ipr、android.imlIEDA工程配置文件。等待片刻得到类似如下信息说明OK:
Readexcludes:21ms
Traversedtree:194799ms12
通过如上操作我们就完成了基本的源码配置工作。
2-2-2导入AndroidStudio前的一些客户化操作
大家都知道使用Eclipse倒入源码很慢,AndroidStudio导入源码时也慢,所以建议修改android.iml文件(将自己不用的代码去掉),然后再导入Studio。
就像下面摘取的android.iml文件1887行开始的这些一样:
<sourceFolderurl="file://$MODULE_DIR$/./sdk/testapps/userLibTest/src"isTestSource="true"/>
<sourceFolderurl="file://$MODULE_DIR$/./tools/external/fat32lib/src/main/java"isTestSource="false"/>
<excludeFolderurl="file://$MODULE_DIR$/out/eclipse"/>
<excludeFolderurl="file://$MODULE_DIR$/.repo"/>
<excludeFolderurl="file://$MODULE_DIR$/external/bluetooth"/>
<excludeFolderurl="file://$MODULE_DIR$/external/chromium"/>
<excludeFolderurl="file://$MODULE_DIR$/external/icu4c"/>
<excludeFolderurl="file://$MODULE_DIR$/external/webkit"/>
<excludeFolderurl="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolderurl="file://$MODULE_DIR$/out/host"/>
<excludeFolderurl="file://$MODULE_DIR$/out/target/common/docs"/>
<excludeFolderurl="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/>
<excludeFolderurl="file://$MODULE_DIR$/out/target/product"/>
<excludeFolderurl="file://$MODULE_DIR$/prebuilt"/>1234567891011121314
我们可以仿照上面这段代码的<excludeFolderurl="file://$MODULE_DIR$/.repo"/>写法一样过滤掉不需要的内容,这样在导入时就会快很多。
也可以通过AndroidStudio的ProjectStucture打开左侧Modules,然后将右侧Sources中一些目录Excluded掉。
2-2-3使用AndroidStudio导入源码工程
有了如上的这些操作以后,我们打开AndroidStudio,然后选择打开一个现有的AndroidStudio项目,然后选择打开源码根目录下的android.ipr文件,然后出现如图一样的索引即可等待导入就行:tu
到目前为止我们就可以方便的使用AndroidStudio查看源码啦。如下图所示:
吊不屌!!!
2-3使用技巧
上图我们看见了,可以通过AndroidStudio搜索整套源码的代码了。但是这时候如果你打开一个Service.java类,然后把鼠标放在其中任意方法的Intent参数上按住CTRL+鼠标左键跳转到Intent类你会发现跳转过去的是一个Intent.class文件,为啥呢?因为他跳转的是你的默认SDK中的jar内部的class文件。既然要修改查看整套源码,这么跳转得多蛋疼啊,所以我们需要配置让其能跳转到Intent.java文件,具体做法如下:
首先删掉依赖中的所有依赖,只保留下图中没被选中的那两个(当然你可以选择保留一些你用到的其他jar),如下:
接着点击加号的JARsordirectories将你源码的frameworks及external和你用到的其他跳转目录添加到依赖中,然后apply即可。
这时候我们在像上面一样打开Service.java跳转Intent,你会发现像下图一样直接跳转到你源码路径下的Intent.java文件了,如下:
到此对于平时只是查看源码的人来说已经够用了。
3总结
俗话说工欲善其事必先利其器,你会发现使用AndroidStudio比Eclipse和SourceInsight都好很多(当然了,SubText还是很强大的),无论是代码提示还是跳转、还是PythonShell等插件支持等都很强大,慢慢体验吧。
顺带说一句,Google的野心真的很大,看来AndroidStudio即将要被他们打造为全能IDE了。
4附加README
附上原版的英文README文档,英语高手直接看这里就行:
IDEGenautomaticallygeneratesAndroidIDEconfigurationsforIntelliJIDEA
andEclipse.YourIDEshouldbeabletocompileeverythinginareasonable
amountoftimewithnoerrors.
Ifyou’reusingIntelliJ…
IfthisisyourfirsttimeusingIDEGen...
IDEAneedsalotofmemory.Add"-Xms748m-Xmx748m"toyourVMoptions
in"IDEA_HOME/bin/idea.vmoptions"onLinuxor
"IntelliJIDEA.app/Contents/Info.plist"onOSX.
CreateaJDKconfigurationnamed"1.6(NoLibraries)"byaddinganew
JDKlikeyounormallywouldandthenremovingallofthejarentries
underthe"Classpath"tab.Thiswillensurethatyouonlygetaccessto
Android'scorelibrariesandnotthosefromyourdesktopVM.
Fromtheproject'srootdirectory...
Repeatthesestepsaftereachsync...
1)make(toproducegenerated.javasource)
2)development/tools/idegen/idegen.sh
3)Openandroid.iprinIntelliJ.Ifyoualreadyhavetheprojectopen,
hitthesyncbuttoninIntelliJ,anditwillautomaticallydetectthe
updatedconfiguration.
IfyougetunexpectedcompilationerrorsfromIntelliJ,tryrunning
"Build->RebuildProject".SometimesIntelliJgetsconfusedafterthe
projectchangessignificantly.
Ifyou’reusingEclipse…
IfthisisyourfirsttimeusingIDEGen...
Editeclipse.ini("Eclipse.app/Contents/MacOS/eclipse.ini"onOSX)and
add"-Xms748m-Xmx748m"toyourVMoptions.
ConfigureaJREnamed"1.5(NoLibraries)"under"Preferences->Java->
InstalledJREs".Removeallofthejarentriesunderneath"JREsystem
libraries".Eclipsewillnotletyousaveyourconfigurationunlessat
leastonejarispresent,soincludearandomjarthatwon'tgetinthe
way.
Fromtheproject'srootdirectory...
Repeatthesestepsaftereachsync...
1)make(toproducegenerated.javasource)
2)development/tools/idegen/idegen.sh
3)ImporttheprojectrootdirectoryintoyourEclipseworkspace.Ifyou
alreadyhavetheprojectopen,simplyrefreshit(F5).
Excludingsourcerootsandjars
IDEGenkeepsanexclusionlistinthe"excluded-paths"file.Thisfile
hasoneregularexpressionperlinethatmatchespaths(relativetothe
projectroot)thatshouldbeexcludedfromtheIDEconfiguration.We
useJava'sregularexpressionparser(seejava.util.regex.Parser).
Youcancreateyourownadditionalexclusionlistbycreatingan
"excluded-paths"fileintheproject'srootdirectory.Forexample,you
mightexcludeallappsexcepttheBrowserinyourIDEconfigurationwith
thisregularexpression:"^packages/apps/(?!Browser)".
Controllingsourcerootordering(Eclipse)
YoumaywantsomesourcerootstocomebeforeothersinEclipse.Simply
createafilenamed"path-precedence"inyourproject'srootdirectory.
Eachlineinthefileisaregularexpressionthatmatchesasourceroot
path(relativetotheproject'srootdirectory).Ifagivensourceroot's
pathmatchesaregularexpressionthatcomesearlierinthefile,that
sourcerootwillcomeearlierinthegeneratedconfiguration.Ifasource
rootdoesn'tmatchanyoftheexpressionsinthefile,itwillcomelast,
soyoueffectivelyhaveanimplicit".*"ruleattheendofthefile.
Forexample,ifyouwantyourapplications'ssourceroottocomefirst,
youmightaddanexpressionlike"^packages/apps/MyApp/src$"tothetop
ofthe"path-precedence"file.Tomakesourcerootsunder./outcomelast,
add"^(?!out/)"(whichmatchesallpathsthatdon'tstartwith"out/").
关于本次gets apps和getsapps.apk的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。