android 5.0预制APK方法

第一情况、如何将带源码的APK预置进系统? //曹浩洋的专栏

1)     在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例

2)     将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录

3)     在 Test 目录下创建一个名为 Android.mk的文件,内容如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := Test

include $(BUILD_PACKAGE)

4)     打开文件 device\mediatek\common\device.mk

将 Test 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Test

5)     重新 build 整个工程

Second、如何将无源码的 APK 预置进系统? //曹浩洋的专栏

1)     在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例

2)     将 Test.apk 放到 packages/apps/Test 下面

3)     在  packages/apps/Test 下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Test

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_PREBUILT_JNI_LIBS:= \

@lib/armeabi/libtest.so  \

@lib/armeabi/libtest2.so

LOCAL_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

若无so,删除LOCAL_PREBUILT_JNI_LIBS

若有so,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路径,不要忘记使用@。@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中

若apk支持不同cpu类型的so,针对so的部分的处理:

Ifeq ($(TARGET_ARCH),arm)

LOCAL_PREBUILT_JNI_LIBS := \

@lib/armeabi-v7a/xxx.so\

@ lib/armeabi-v7a/xxxx.so

else ifeq ($(TARGET_ARCH),x86)

LOCAL_PREBUILT_JNI_LIBS := \

@lib/x86/xxx.so

else ifeq ($(TARGET_ARCH),arm64)

LOCAL_PREBUILT_JNI_LIBS := \

@lib/armeabi-v8a/xxx.so

即将和TARGET_ARCH对应的so抽离出来

4)     打开文件 device\mediatek\common\device.mk

将 Test 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Test

5)     重新 build 整个工程

注:如果App使用System Level的permission,需要預置到/system/priv-app底下 (原在/system/app)。

修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。

Third、如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?

1)     在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例

2)     将 Test.apk 放到 packages/apps/Test 下面

3)     在  packages/apps/Test 下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Test

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

# LOCAL_PRIVILEGED_MODULE := true

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

LOCAL_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

4)     打开文件 device\mediatek\common\device.mk

将 Test 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Test

5)     重新 build 整个工程

注意:这个比不能卸载的多了一句

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

4-th、如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?

1在 vendor\mediatek\proprietary\binary\3rd-party\free下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例

2 将Test.apk 放入vendor\mediatek\proprietary\binary\3rd-party\free\Test下面

3 在vendor\mediatek\proprietary\binary\3rd-party\free\Test 下面创建文件 Android.mk,文件内容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Test

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app

include $(BUILD_PREBUILT)

2 打开文件device\mediatek\common\device.mk

将 Test 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Test

3 然后重新build整个工程

若需要apk作为32bit的apk运行,则需要在Android.mk中定义

LOCAL_MULTILIB :=32

时间: 2024-11-10 13:13:33

android 5.0预制APK方法的相关文章

android 5.0预制APK方法,android5.0预制apk

第一情况.如何将带源码的APK预置进系统? //曹浩洋的专栏1) 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例2) 将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录3) 在 Test 目录下创建一个名为 Android.mk的文件,内容如下:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE_

Android之——通用安装apk方法

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46955863 不多说,直接上代码: public void installApk(){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); //根据实际情况获取apk名称 String name = "test.apk"; File file = new File(Environment

MAC OSX上SDK Manager无法下载Android SDK5.0的解决方法

一,修改hosts 在OSX下跟linux一样,进到/private/etc目录下,然后sudo vim hosts,在里面新增一句话: #google_android更新 74.125.237.1 dl-ssl.google.com 二,设置SDK Manager的HTTP Proxy Server 和 Port HTTP Proxy Server里填写:mirrors.neusoft.edu.cn Port填写80 然后勾选Others里的第一个选项:Force https://using

Android 7.0 TextView点击事件无效修复方案

public class PostTextView extends TextView { private Handler handler = new Handler(Looper.getMainLooper()); public PostTextView(Context context) { super(context); } public PostTextView(Context context, AttributeSet attrs) { super(context, attrs); } p

Android 8.0+ 更新安装apk失败的问题

最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况  总结原因是 缺少安装的权限 Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用.在应用权限设置的"特殊访问权限"中,加入了"安装其他应用"的设置. 简单的方法  可以直接在Manifest.xml中加入下面的权限:(亲测可用) <uses-permissionandroid:name="android.permission.REQU

Android 5.0 进程A和APK B依赖关系问题的研究

(本文来自于和博客上一个朋友的聊天,但可惜我回复后一直没收到这位朋友的回答.故在此把这个问题和大家介绍下,希望能抛砖引玉) 这位朋友的问题是这样的: 应用程序A运行时跑在进程A中,它可以在运行时通过ClassLoader加载另外一个应用程序B. 当然,应用程序B也是可以运行的,它运行在进程B中. 在Android 5.0以前,进程B和进程A是没有关系.但是5.0以后,如果进程B被stop的话,进程A一样会被干掉. 这就是Android 5.0带来的进程A/B依赖关系. 这个问题有几个关键技术点:

Android全屏(包含3种隐藏顶部状态栏及标题栏和一种隐藏Android 4.0平板底部状态栏的方法)

方法一 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏状态栏 getWindow().setFlags(WindowManager.La

Android 5.0之后屏幕截图的方法

截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不需要权限.可以截取本应用内任意位置的屏幕截屏,可能会有些webview会截取不到. 注意这种方式只能获取当前应用内的截图(连顶部状态栏中的时间等都信息都获取不到,获取到的状态栏是一片空白). 2.通过Linux底层驱动来实现截屏. linux的图像信息都是通过FrameBuffer来写到显示设备上的

Android 5.0原生bug及修复方法

Android 5.0已经来了,这个版本改动非常大,也意味着会有更多的bug隐藏在其中,我会在这篇文章中一直更新自己遇到的原生bug及修复方法. 1.bug1 现象:5.0中ActivityManagerService.keyguardWaitingForActivityDrawn ()接口替换了4.4中ActivityManagerService.dismissKeyguardOnNextActivity()接口,但是带来了一个显示bug,现象是keyguard隐藏后activity窗口还没显