Android(安卓)源码下编译APK
16lz
2021-01-24
有些时候,我们写的 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指定的名称
更多相关文章
- android 项目练习:自己的词典app——生词本(二)
- 【转】Android自适应不同分辨率或不同屏幕大小的layout布局(横屏
- Android开发之旅:深入分析布局文件
- Android之封装好的异步网络请求框架
- Android(安卓)4.0 Launcher源码分析系列(一)
- Android加密(一)
- eoe 特刊汇总
- android系统图标的使用
- android Sqlite数据库事务处理*.sql 语句集文件