AndroidプリセットApkメソッド


仕事のために、システムアプリを開発したり、統合したりすることが多いので、Androidの統合システムアプリケーションを収集して記録する方法として、後で調べる準備をしています.
一、プリセットapk方法
Case 1:ソースコード付きAPKをシステムにプリセットする方法
  • packages/appsの下にプリセットが必要なAPKの名前で新しいフォルダを作成し、TestというAPKをプリセットする例
  • Test APKのSourceコードをTestフォルダにコピーし、/binおよび/genディレクトリ
  • を削除
  • 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)
    
  • ファイルを開くmk、PRODUCT_にTestを追加PACKAGESの中.
  • PRODUCT_PACKAGES += Test
    
  • 再build工事全体
  • Case 2:どのようにしてソースコードのないAPKをシステムにプリセットしますか?
  • packages/appsの下にプリセットが必要なAPK名でフォルダを作成し、TestというAPKをプリセットする例
  • Test.apkはpackages/apps/Testの下
  • に置く
  • 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抽出
  • ファイルを開くmk PRODUCT_にTestを追加PACKAGESの中.PRODUCT_PACKAGES += Test
  • 再build工事全体
  • tip:AppがSystem Levelのpermissionを使用する場合は、/system/priv-appの下(元は/system/app)にプリセットする必要があります.Androidを修正mk、LOCAL_を追加PRIVILEGED_MODULE:=trueで、appを/system/priv-appの下に置く必要があることを宣言します.
    Case 3:APKをプリセットしてユーザーがアンインストールできるようにするには、出荷時の設定を復元しても復元できませんか?
  • packages/appsの下にプリセットが必要なAPK名でフォルダを作成し、TestというAPKをプリセットする例
  • Test.apkはpackages/apps/Testの下
  • に置く
  • 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)
    
  • ファイルを開くmk PRODUCT_にTestを追加PACKAGESの中.
  • PRODUCT_PACKAGES += Test
    
  • 再build全体の工事注意:これはアンインストールできないより1つ多い
  • LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
    

    Case 4:APKを事前に設定することで、ユーザーがアンインストールでき、出荷時の設定を復元できますか?
  • vendormediatekproprietarybinary3 rd-partyfreeの下にプリセットが必要なAPK名でフォルダを作成し、TestというAPKをプリセットする例
  • Test.apkはvendormediatekproprietarybinary3 rd-partyfreeTestの下に
  • を入れます
  • vendormediatekproprietarybinary3 rd-partyfreeTestの下にファイル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)
    
  • ファイルを開くmk PRODUCT_にTestを追加PACKAGESの中.
  • PRODUCT_PACKAGES += Test
    
  • その後、
  • 工事全体を再build
    32 bitのapkとしてapkを実行する必要がある場合はAndroid.mkで定義
    LOCAL_MULTILIB :=32
    

    二、Android.mkファイルパラメータ説明
    LOCAL_MODULE_TAGS := optional
    optionalとは、このモジュールがすべてのバージョンでコンパイルされていることを意味します.
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    ディレクトリのjavaファイルの取得
    LOCAL_PACKAGE_NAME := Test
    パッケージ名
    LOCAL_CERTIFICATE := platform
    署名、PRESIGNEDはapkファイルを保持する前の署名を表し、platformはapkに対して再署名を行う
    LOCAL_PROGUARD_ENABLED := disabled
    コード混同ツールを使用して混同しないでください
    転載情報:
    作者:雨と風
    リンク:https://www.jianshu.com/p/9af0a34d3eed
    出典:簡書