1、某个应用可以编译,只是不在Launcher上显示Icon。
只需要修改该应用的AndroidManifest.xml文件。
修改如下:
<activity
android:name="com.example.noiconapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- 要想在桌面不显示图标,只需注释掉APP入口Activity中的下面这句即可,或者把下面的LAUNCHER改成DEFAULT也行 -->
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->
</intent-filter>
</activity>
一般情况下,当我们的APK在被安装后,系统会自动创建我们的APK程序,系统Launcher(系统桌面应用程序)会自动检测系统已经安装的应用软件的包名,然后把这些APP的图标和名称解析出来后显示在应用程序列表里,一旦我们像上面那样设置不显示APK图标,则APK程序在运行后只会显示在“正在运行”的程序列表中,而不会在桌面上显示图标和名字。
2、将Android应用放在packages\apps\下面一起编译,单独进入应用mm编译,可以安装到out下面的system/app/下面,但是在根目录make却不会。
原因:
LOCAL_MODULE_TAGS := optional 的模块会被编译,但不会安装到image里面。
要想让optional的模块安装的话,需要将模块名加入到相关的product的PRODUCT_PACKAGES里面。
修改方法:
将应用对应的名称加入到PRODUCT_PACKAGES里面。
因此,你不想编译模块进image中,你就在对应product的PRODUCT_PACKAGES := 下的模块名删除就可以了。
一种更暴力更直接的方法:
将packages/apps下对应的该模块直接删除。
或者是,注释掉对应模块下的Android.mk里的内容。
3、LOCAL_MODULE_TAGS
LOCAL_MODULE_TAGS := user eng tests optional
user:指该模块只在user版本下才编译;
eng:指该模块只在eng版本下才编译;
tests:指该模块只在tests版本下才编译;
optional:指该模块在所有版本下都编译。