国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Android 12 AOSP學習】Android內置第三方apk到系統(tǒng)

這篇具有很好參考價值的文章主要介紹了【Android 12 AOSP學習】Android內置第三方apk到系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這篇文章將介紹如何在Android系統(tǒng)中內置第三方apk

一、準備工作

  • 編譯好的Android源碼
  • Android apk文件:也就是安卓應用安裝包

二、步驟

(1)在源碼packages/apps目錄下以我們需要內置的APK名字來創(chuàng)建一個新的文件夾

qqmusic.apk 為例,在Android_12_AOSP/packages/apps目錄下新建qqmusic文件夾

cd Android_12_AOSP/packages/apps/
mkdir qqmusic

(2)將 qqmusic.apk 放入建好的文件夾中,在文件夾中創(chuàng)建 Android.mk 文件

cd Android_12_AOSP/packages/apps/qqmusic/
touch Android.mk

(3)編輯 Android.mk 文件內容,內容如下

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := CarSkin.apk
LOCAL_MODULE_CLASS := APPS
#可以為user、eng、tests、optional,optional代表在任何版本下都編譯
LOCAL_MODULE_TAGS := optional
#編譯模塊的名稱
LOCAL_MODULE := CarSkin
#可以為testkey、platform、shared、media、PRESIGNED(使用原簽名),platform代表為系統(tǒng)應用
LOCAL_CERTIFICATE := PRESIGNED
#不設置或者設置為false,安裝位置為system/app,如果設置為true,則安裝位置為system/priv-app?
LOCAL_PRIVILEGED_MODULE := false
#module的后綴,可不設置
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
# 關閉預編譯,不會生成OAT文件
LOCAL_DEX_PREOPT := true
LOCAL_PRODUCT_MODULE := true
include $(BUILD_PREBUILT)


# Test
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := qqmusic
LOCAL_MODULE_CLASS := APPS
#可以為user、eng、tests、optional,optional代表在任何版本下都編譯
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_DEX_PREOPT := nostripping
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#不設置或者設置為false,安裝位置為system/app,如果設置為true,則安裝位置為system/priv-app
LOCAL_PRIVILEGED_MODULE := true
#可以為testkey、platform、shared、media、PRESIGNED(使用原簽名),platform代表為系統(tǒng)應用
LOCAL_CERTIFICATE :=  platform
#覆蓋安裝
#LOCAL_OVERRIDES_PACKAGES := DeviceTest RKDeviceTest
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MULTILIB := 32
#LOCAL_REQUIRED_MODULES :=
#JNI_LIBS :=
#$(foreach FILE,$(shell find $(LOCAL_PATH)/lib/ -name *.so), $(eval JNI_LIBS += $(FILE)))
#LOCAL_PREBUILT_JNI_LIBS := $(subst $(LOCAL_PATH),,$(JNI_LIBS))

include $(BUILD_PREBUILT)


預裝帶源碼的APP到系統(tǒng)

Android.bp文件

// Android依賴導入
android_library_import {
    name: "com.google.android.material_material",
    aars: ["material-1.6.0.aar"],
    sdk_version: "current",

    min_sdk_version: "14",
    static_libs: [
        "androidx.annotation_annotation",
        "androidx.appcompat_appcompat",
        "androidx.cardview_cardview",
        "androidx.coordinatorlayout_coordinatorlayout",
        "androidx-constraintlayout_constraintlayout",
        "androidx.core_core",
        "androidx.dynamicanimation_dynamicanimation",
        "androidx.annotation_annotation-experimental",
        "androidx.fragment_fragment",
        "androidx.lifecycle_lifecycle-runtime",
        "androidx.recyclerview_recyclerview",
        "androidx.transition_transition",
        "androidx.vectordrawable_vectordrawable",
        "androidx.viewpager2_viewpager2",
        
  "androidx.drawerlayout_drawerlayout",
    ],
}


//
// Build rule for  app.
//
android_app {
    //name: "DebuggingRestrictionController",
    //srcs: ["app/src/main/java/**/*.java", "soong/BuildConfig.java", "soong/FirebaseApplication.java"],
    //resource_dirs: ["app/src/main/res"],
    //manifest: "soong/AndroidManifest.xml",
    //sdk_version: "system_current",
    //certificate: "platform",
    //privileged: true,
    //optimize: {
    //    enabled: true,
    //    proguard_flags_files: ["app/proguard-rules.pro"],
    //},
    
    name: "CarSkin",
    
    //使用以下構建標記向 product 分區(qū)中安裝模塊。
    product_specific: true,
    
    //導入 src 文件內容
    srcs: [
        "src/**/*.java"
 
    ],
    
    //資源導入模塊,如果aar包中帶資源文件,需要將aar包解壓拷貝資源文件,在源碼根目錄下新建一個 res-lottie 文件夾,將資源文件拷入此目錄
    //resource_dirs: [
    //    "res-lottie",
    //],
    
    libs: [
      "res-lottie"
    ],
    
    //libs: [],
    
    sdk_version: "current",
    min_sdk_version: "14",
    target_sdk_version: "current",
    
    //platform_apis:true,
    certificate: "platform",
    //privileged: true,
    //system_ext_specific: true,

    //導入manifest文件
    manifest: "app/src/main/AndroidManifest.xml",
    //添加manifest文件模塊
    //additional_manifests: [
      //  "AndroidManifest-common.xml",
    //],
    
    //導入靜態(tài)庫
    static_libs: [
        "com.google.android.material_material"
    ],
    
    //apptflags: [
    //  "--extra-packages",
    //  "com.google.android.material" //導入aar包包名,用于生成 R 文件
    //],

}

(4)下面我們需要將將創(chuàng)建的qq音樂編譯模塊加入到編譯系統(tǒng),我們找到 /Android_12_AOSP/build/make/target/product/handheld_product.mk

文件,在文件下面這個位置加入qqmusic

PRODUCT_PACKAGES += \
    apps \
    qqmusic 

進入源碼根目錄,重新編譯

cd Android_12_AOSP/
source build/envsetup.sh # 導入環(huán)境
lunch 12  # 選擇系統(tǒng)
make -j6  # 編譯
make snod  # 快速打包生成最新的system.img文件

問題記錄:

注意:每次內置應用或修改mk文件時,一定要重新編譯 system.img 然后在啟動模擬器

錯誤1

FAILED: out/target/common/obj/APPS/qqmusic_intermediates/enforce_uses_libraries.
status
/bin/bash -c "(rm -f out/target/common/obj/APPS/qqmusic_intermediates/enforce_us
es_libraries.status ) && (build/soong/scripts/manifest_check.py     --enfo
rce-uses-libraries     --enforce-uses-libraries-status out/target/common/obj/
APPS/qqmusic_intermediates/enforce_uses_libraries.status     --aapt out/hos
t/linux-x86/bin/aapt                         packages/apps/qqmusic/
qqmusic.apk )"
error: mismatch in the <uses-library> tags between the build system and the manifest:
  - required libraries in build system: []
                   vs. in the manifest: []
  - optional libraries in build system: []
                   vs. in the manifest: [org.apache.http.legacy]
  - tags in the manifest (packages/apps/qqmusic/qqmusic.apk):
    uses-library-not-required:'org.apache.http.legacy'
note: the following options are available:
  - to temporarily disable the check on command line, rebuild with RELAX_U
SES_LIBRARY_CHECK=true (this will set compiler filter "verify" and disable AOT-c
ompilation in dexpreopt)
  - to temporarily disable the check for the whole product, set PRODUCT_BR
OKEN_VERIFY_USES_LIBRARIES := true in the product makefiles
  - to fix the check, make build system properties coherent with the manif
est
  - see build/make/Changes.md for details

12:19:02 ninja failed with: exit status 1

解決方法

修改Android.mk,添加LOCAL_ENFORCE_USES_LIBRARIES := false

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Module name should match apk name to be installed
LOCAL_MODULE := SogouInput
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_ENFORCE_USES_LIBRARIES := false

include $(BUILD_PREBUILT)

錯誤2

輸入命令報錯

adb install -r /home/lai/下載/SogouInput_v11.7_Build_40e311fcaf0_20220714_android_sweb.apk
adb: failed to install /home/lai/下載/SogouInput_v11.7_Build_40e311fcaf0_20220714_android_sweb.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

問題當前的app使用的native libraries與模擬器的CPU架構不一致所導致的

錯誤3

[100% 1/1] Creating out/target/product/generic_car_x86/VerifiedBootParams.textproto
FAILED: out/target/product/generic_car_x86/VerifiedBootParams.textproto
/bin/bash -c "(export AVBTOOL=out/host/linux-x86/bin/avbtool; device/generic/goldfish/tools/mk_vbmeta_boot_params.sh out/target/product/generic_car_x86/vbmeta.img     out/target/product/generic_car_x86/system.img out/target/product/generic_car_x86/VerifiedBootParams.textproto)"
/home/lai/Android_12_AOSP/out/host/linux-x86/bin/avbtool: Given image does not look like a vbmeta image.
/home/lai/Android_12_AOSP/out/host/linux-x86/bin/avbtool: Given image does not look like a vbmeta image.
expr: 語法錯誤:“+” 后缺少參數(shù)
ninja: build stopped: subcommand failed.
14:25:23 ninja failed with: exit status 1

#### failed to build some targets (04:34 (mm:ss)) ####

錯誤4

問題:系統(tǒng)卡在開機動畫進不去

原因:內置一個apk時,因為軟件簽名問題,導致系統(tǒng)服務啟動不了

解決方法:將軟件刪掉重新編譯就行

過程中常用的命令

通過adb安裝應用

adb install -r /home/lai/下載/SogouInput_v11.7_Build_40e311fcaf0_20220714_android_sweb.apk

通過adb查看安裝的應用包名

adb shell pm list packages  #只顯示應用包名 
adb shell pm list packages -f #顯示應用包名及路徑
adb shell dumpsys package > ./package.txt
adb shell am switch-user 10
adb shell pm list users

執(zhí)行make clean將會會刪除out/目錄下所有內容。

make clean

執(zhí)行make clobber效果等同于make clean,也是刪除out/目錄下所有內容。

make clobber

執(zhí)行make installclean將會刪除installclean_files,installclean_files

make installclean

查詢手機cpu命令行:

adb shell getprop ro.product.cpu.abi

開機日志的獲?。?/p>

adb logcat -b main -b system -b radio -b events -v time > bootLog.log

adb 日志獲取

adb logcat

通過關鍵字查找文件所在位置

grep "Calendar" ./ -rn
grep "Contacts" ./ -rn

自定義內置apk流程

(1)在源碼根目錄 /vendor 下新建一個test 文件夾

mkdir test

(2)在 test 文件目錄下新建一個 test.mk 文件

touch test.mk

(3)在源碼test目錄下以我們需要內置的APK名字來創(chuàng)建一個新的文件夾

  • 以 ABC.apk為例,在test目錄下新建ABC文件夾
mkdir ABC

(4)將 ABC.apk 放入ABC文件夾中,在文件夾ABC中創(chuàng)建 Android.mk 文件

touch Android.mk

Android.mk文件的內容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := ABC
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := ABC.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_PRIVILEGED_MODULE := false
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)

(5)打開我們建好的 test.mk 文件,在里面加入以下內容,將ABC模塊加入到編譯系統(tǒng)

PRODUCT_PACKAGES += \
    ABC \
    user 

(6)將我們建的 test.mk 加入到編譯環(huán)境中,這樣我們后面需要新加入模塊就能直接在test.mk里配置了

我們在源碼根目錄下找到 device/rockchip/rk3588/device.mk 文件

注:這個路徑以及上面的/vendor目錄一般是項目中存放內置apk的路徑,不同項目路徑可能不同,根據(jù)自己實際路徑來選擇,一般都是在源碼根目錄的 /device 目錄下

將下面內容加入到文件如下對應位置

#$(call inherit-product-if-exists, vendor/rockchip/common/npu/npu.mk)

$(call inherit-product-if-exists, vendor/test/test.mk) # 我們配置的文件,加入進來
$(call inherit-product-if-exists, vendor/firefly/firefly.mk)

(7)最后我們進入源碼根目錄重新編譯源碼

進入源碼根目錄,重新編譯

source build/envsetup.sh # 導入環(huán)境
lunch   # 選擇系統(tǒng),選擇自己的系統(tǒng)
make installclean # 清除out目錄下對應板文件夾中的內容
make -j6  # 編譯,如果這一步生成了最新的鏡像文件,那不需要進行下一步了
make snod  # 快速打包生成最新的system.img文件

后面我們如果需要繼續(xù)添加新apk,只需要重復(3)(4)(5)(7)步驟就行文章來源地址http://www.zghlxwxcb.cn/news/detail-786414.html

到了這里,關于【Android 12 AOSP學習】Android內置第三方apk到系統(tǒng)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • android 12.0 第三方輸入法app設置系統(tǒng)默認輸入法

    在12.0的產品開發(fā)中,有功能需要要求設置默認輸入法,替換掉系統(tǒng)的輸入法,所以這就需要了解設置輸入法的相關功能需求,然后根據(jù)輸入法包名來設置默認輸入法 在設置系統(tǒng)默認輸入法中 每個系統(tǒng)輸入法的id不同 根據(jù)id設置輸入法 需要先根據(jù)需要設置默認輸入法的id,來

    2024年02月07日
    瀏覽(100)
  • Java 音頻播報(內置 + 第三方)

    ? ? ? ? jdk內置的可以使用,不過呢就是聲音太原始了,這是同過輸入文字然后識別讀出來的。 1、導入JL的依賴 2、代碼實現(xiàn) ? ? ? ? 這個是通過文件播報的,可以在網(wǎng)上下載自己需要的音頻 最近在做項目,做外賣的,其中有一個功能就是接單,商家接單就需要用到這個功

    2024年02月02日
    瀏覽(22)
  • Android Pdf第三方框架

    導入AndroidPdfViewer 在 repositories 里面添加庫 布局文件引用PDFView PdfViewer 為我們提供了以下幾種讀取文件的方法: Configurator 主要方法 PDFView 其他方法 github地址: https://github.com/barteksc/AndroidPdfViewer 導入mupdf 在 repositories 里面添加庫 mupdf提供了解析代碼, Document 讀取pdf文件, Androi

    2024年02月13日
    瀏覽(98)
  • Android 解決第三方庫版本沖突

    在開發(fā)游戲SDK時會使用一些第三方庫,例如上文提到的 OkHttp ,或者集成某些第三方,而這些第三方使用的系統(tǒng)庫(例如 supportv7)和項目組使用的版本不一致,在編譯時就會出現(xiàn)版本沖突問題。解決辦法有兩個: 盡量不使用第三庫,例如針對 OkHttp ,如果沒有特殊的需求(比

    2023年04月27日
    瀏覽(88)
  • Android Studio查看第三方庫依賴樹

    Android Studio查看第三方庫依賴樹

    在Android開發(fā)過程中,我們或多或少都會引入第三方庫,引入的庫越多,越容易產生庫之間的依賴沖突,所以我們今天一起來了解Android Studio查看第三方庫依賴樹。 下面就拿我遇到的問題還原一下: 之前接人容聯(lián)客服系統(tǒng)的時候,集成完成后進入客服頁面發(fā)生閃退,我們回顧

    2024年02月08日
    瀏覽(24)
  • 【Android Studio】第三方庫 圖表(MPAndroidChart)使用

    【Android Studio】第三方庫 圖表(MPAndroidChart)使用

    項目目錄-app-build.gradle 項目目錄-app-setting.gradle ? 該類是圖表的控件,類似于按鍵、圖片,是從 xml 文件中通過 id 獲取到的。 獲取/創(chuàng)建 常用方法 方法名 描述 chart.setDrawBorders( boolean ) 是否顯示圖表邊界,true:顯示,默認 false chart.setScaleEnabled( boolean ) 是否使能縮放,true:使

    2024年02月06日
    瀏覽(16)
  • Android Studio引用第三方庫的方式

    title: 大小端詳解 date: 2023-06-06 21:01:24 comments: true #是否可評論 toc: true #是否顯示文章目錄 categories: #分類 - gradle - android studio tags: #標簽 - gradle - android studio summary: android stduio 導入第三方庫方式 這里描述的第三方庫文件格式指的是 so aar so庫介紹一種方法 Aar介紹兩種方法 libs目錄

    2024年02月08日
    瀏覽(22)
  • Android Studio連接使用第三方模擬器

    Android Studio連接使用第三方模擬器

    ? ? ? ?使用Android Studio自帶的模擬器,第一會比較卡,第二配置容易出錯,第三,自帶的模擬器很吃電腦配置。如果電腦配置較差,會比較耽誤事。所以為例解決上面三個問題,可以在電腦上按照第三方手機模擬器,例如:夜神模擬器、雷電模擬器、MUMU模擬器等等,不管是

    2024年01月15日
    瀏覽(22)
  • Android 項目調用第三方庫so動態(tài)庫

    Android 項目調用第三方庫so動態(tài)庫

    在Android NDK開發(fā)中,可以通過自己編寫C/C++代碼來構建so動態(tài)庫進行調用之外,還可以把so動態(tài)庫提供給第三方使用;接下來,我將介紹在新創(chuàng)建的Android 項目(或已存在的Android 項目)中如何調用第三方so動態(tài)庫。 關于如何進行NDK開發(fā),實現(xiàn)JNI,以及編寫C++與Java交互(Java調用

    2024年02月16日
    瀏覽(30)
  • Android常用的第三方庫--.jar、.aar

    Android常用的第三方庫--.jar、.aar

    JAR(Java Archive,Java 歸檔文件)是與平臺無關的文件格式,它允許將許多文件組合成一個壓縮文 件。JAR是 Java 的一種文檔格式,是一種與平臺無關的文件格式,可將多個文件合成一個文件。只包含了class文件與清單文件 , 不包含資源文件,如圖片等所有res中的文件 。 JAR的優(yōu)

    2024年02月03日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包