有些时候,我们写的 app 需要获取系统的一些权限,比如获取联系人信息,Mail 信息等等,就需要在 android 源码下编译APK,让app与系统源码具有一样的签名。

1、在源码目录下运行$ . build/envsetup.sh 目的是使mm/mmm命令可用

2、修改 AndroidManifest.xml(非必须,除非app需要system ID) 添加: android:sharedUserId="android.uid.system" ---与系统一样 userID

例:

<manifest xmlns:Android="http://schemas.android.com/apk/res/android"      package="com.wpstar.Wifi_Test1"      android:versionCode="1"      android:sharedUserId="android.uid.system"      android:versionName="1.0">    <uses-sdk Android:minSdkVersion="8" />
3、工程目录拷贝到:[源码目录]/packages/apps/ 在其中添加Android.mk文件,内容如下:

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_SDK_VERSION := currentLOCAL_PACKAGE_NAME := bright-yinjkLOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)include $(call all-makefiles-under,$(LOCAL_PATH))
注意:对于4.0ics 以上编译 apk 需要加入 WITH_DEXPREOPT := false 或者 LOCAL_DEX_PREOPT := false 才能编译生成APK文件,默认生成的不可独立安装运行。
4、cd [源码目录]/packages/apps/ 下自己的工程目录,直接 -mm 命令就可以了,在 [源码目录]/out//target/product/generic/system/app 下就可以看到编译生成的APK文件。

注意:

1、必须保证 android 源码已经 make 过了。

2、对于 apk 安装出现 Failure [INSTALL_FAILED_OLDER_SDK]

打开[源码目录]/build/core/version_defaults.mk 文件

ifeq "" "$(DEFAULT_APP_TARGET_SDK)"# This is the default minSdkVersion and targetSdkVersion to use for# all .apks created by the build system.  It can be overridden by explicitly# setting these in the .apk's AndroidManifest.xml.  It is either the code# name of the development build or, if this is a release build, the official# SDK version of this release.ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"    DEFAULT_APP_TARGET_SDK := $(PLATFORM_SDK_VERSION)else    DEFAULT_APP_TARGET_SDK := $(PLATFORM_VERSION_CODENAME)endifendif
将DEFAULT_APP_TARGET_SDK直接赋值相应的API等级即可,

或者 把

ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"   DEFAULT_APP_TARGET_SDK := $(PLATFORM_SDK_VERSION)else   DEFAULT_APP_TARGET_SDK := $(PLATFORM_VERSION_CODENAME)endif

注释即可。

3、对于包含.so文件的工程,编译的Android.mk文件中 LOCAL_MODULE := lib[.so文件名] 而非 NDK 编译中的 LOCAL_MODULE := [.so文件名]。

4、对于我编译的sdk,如果需要在模拟器启动完成后,就已经安装了该应用那么还需要在该目录下添加如下编译脚本:

[源码根目录]/vendor/xxxvendor/build/product/xxx_sdk.mk文件中添加如下内容:

PRODUCT_PACKAGES += \
com.tencent.qqpinyin \
bright-yinjk //既Anroid.mk文件中 LOCAL_PACKAGE_NAME指定的名称


更多相关文章

  1. android 项目练习:自己的词典app——生词本(二)
  2. 【转】Android自适应不同分辨率或不同屏幕大小的layout布局(横屏
  3. Android开发之旅:深入分析布局文件
  4. Android之封装好的异步网络请求框架
  5. Android(安卓)4.0 Launcher源码分析系列(一)
  6. Android加密(一)
  7. eoe 特刊汇总
  8. android系统图标的使用
  9. android Sqlite数据库事务处理*.sql 语句集文件

随机推荐

  1. ndroid:paddingLeft与android:layout_mar
  2. 【Android】直接连接SqlServer
  3. Android开发如何正确使用WebView
  4. Android学习——MediaScanner源码分析
  5. android中android:src和android:backgrou
  6. 【Android(安卓)开发】:数据存储之 SQLite
  7. Android(安卓)内核相关内容总结
  8. Android之Adapter用法总结
  9. 为什么我说 Android(安卓)很糟糕
  10. Android开发易错点总结