zoukankan      html  css  js  c++  java
  • android系统添加预置APP(so库自动释放)

    将APK直接放入系统目录中,会导致APK找不到so文件。正常情况下的安装是使用PackageManager,它会将so文件拷贝到系统读取的so目录(system/lib或system/lib64)下,提供给App使用;系统应用不会使用PackageManager去安装,所以在使用系统应用前,需要提前将so文件拷贝到system/lib或system/lib64目录下。
    那么有没有方法,在系统应用预装时,就自动提取apk中的so拷贝到system/lib或system/lib64目录下呢。下面阐述一下系统预置app的整个流程,包含对这个问题的解决

    1、前提:

     (1)studio已编译好的app 并已经签名

     (2)拥有系统源码

    2、添加app到系统

    将编译号的app在windows中解压,并得到 lib 文件夹,其中有很多的动态链接库(.so)

    将编译好的apk如test.apk放到系统源码的packages/apps/test(test 自己创建的)中,

    把上面解压的lib文件夹也放到test中。

    3、编写Android.mk文件

    include $(CLEAR_VARS)
    # Module name should match apk name to be installed
    LOCAL_MODULE := Test
    LOCAL_MODULE_TAGS := optional //不管是user 还是eng 版本都会编译此app
    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 //注意前面要用tab键隔开。  通过这种方式来完成半自动提取apk中的so,并拷贝到system/lib或system/lib64目录下
      @lib/armeabi/libtest2.so //这是你需要添加的so。 如果是 armeabi-v7a 直接替换掉armeabi
    LOCAL_CERTIFICATE := PRESIGNED //表示app已经签名
    include $(BUILD_PREBUILT)
    如果so文件是32位,而源码是针对64机器的,那么还需要在android.mk文件中加上
    LOCAL_MULTILIB := 32
    4、在系统预置app的配置文件中添加我们目录

    我的系统源码的配置文件在bulid/target/product/generic.mk 这个文件中又包含其他的配置文件,最终就是在配置文件中的 PRODUCT_PACKAGES 标志下添加你的test目录

    PRODUCT_PACKAGES :=
        Bluetooth
        Camera2
        Gallery2
        Music
        MusicFX
        OneTimeInitializer
        Provision
        SystemUI
        WallpaperCropper

        test

    这样就可以了

  • 相关阅读:
    python 随机字符串
    Ajax
    Django (Form)
    Django (项目)
    Django (二)
    Django (一)
    Django 学生管理系统
    地理坐标系 与 投影坐标系
    shapefile
    图表绘制工具--Matplotlib 3
  • 原文地址:https://www.cnblogs.com/genggeng/p/10563585.html
Copyright © 2011-2022 走看看