1. 程式人生 > >Android MTK平臺原始碼環境下預置APK方法

Android MTK平臺原始碼環境下預置APK方法

[DESCRIPTION]

1, 如何將帶原始碼的 APK 預置進系統?

2, 如何將無原始碼的APK預置進系統?

3, 如何預置APK使得使用者可以解除安裝,恢復出廠設定時不能恢復?

4, 如何預置APK使得使用者可以解除安裝,並且恢復出廠設定時能夠恢復?

[SOLUTION]

一、如何將帶原始碼的APK預置進系統?

1) packages/apps下面以需要預置的 APK名字建立一個新資料夾,以預置一個名為TestAPK 為例

2) Test APKSource 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)開啟檔案 build/target/product/${Project}.mk(其中 ${Project} 表示工程名)

 Test 新增到 PRODUCT_PACKAGES 

裡面。

5)重新 build 整個工程

二、如何將無原始碼的 APK 預置進系統?

1) packages/apps下面以需要預置的 APK 名字建立資料夾,以預置一個名為TestAPK為例

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_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

4)開啟檔案 build/target/product/${Project}.mk(其中 ${Project} 表示工程名)

 Test 新增到 PRODUCT_PACKAGES 裡面。

5)將從Test.apk解壓出來的 so庫拷貝到alps/vendor/mediatek/${Project}/artifacts/out/target/product/${Project}/system/lib/目錄下,若無 so 庫,則去掉此步;

6)重新 build 整個工程

注:GoogleKK上修改protection LevelSystempermission控管機制

如果App使用System Levelpermission,需要預置到/system/priv-app底下 (原在/system/app)

舉例來講:

關於獲取副SD卡的寫入許可權的案例,App需要在AndroidManifest.xml宣告WRITE_MEDIA_STORAGE permission獲取副卡的寫入許可權

(Ref: KK/alps/frameworks/base/core/res/AndroidManifest.xml)

已知android.permission.WRITE_MEDIA_STORAGE屬於SystemOrSignature levelpermission,定義如下:

KK上,您需要採用以下方法,獲取該permission

修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true宣告app需要放在/system/priv-app

三、如何預置APK使得使用者可以解除安裝,恢復出廠設定時不能恢復?

1) packages/apps 下面以需要預置的 APK 名字建立資料夾,以預置一個名為TestAPK為例

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_CERTIFICATE := PRESIGNED

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

include $(BUILD_PREBUILT)

4)開啟檔案 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)

 Test 新增到 PRODUCT_PACKAGES 裡面。

5)重新 build 整個工程

注意:這個比不能解除安裝的多了一句

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

四、如何預置APK使得使用者可以解除安裝,並且恢復出廠設定時能夠恢復?

有兩種方法:

方法一:預置apksystem/vendor/operator下面

具體做法如下:

packages/apps下面以需要預置的 APK 名字建立資料夾,以預置一個名為TestAPK為例:

1)Test.apk 放到 packages/apps/Test 下面;

2)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_CERTIFICATE := PRESIGNED

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

include $(BUILD_PREBUILT)

3)開啟檔案 build/target/product/${Project}.mk(其中 ${Project} 表示工程名),  Test 新增到 PRODUCT_PACKAGES 裡面

4)重新 build 整個工程

方法二:使用MTK_SPECIAL_FACTORY_RESET,再配合.keep_list / .restore_list

為了讓使用者在將預置的 APK 解除安裝後,恢復出廠設定時能恢復,敝司做了一個 Feature,但在ALPS.GB.TDFD.MP.V1.7 ALPS.GB.FDD2.MP.V4.7版本後支援,若貴司版本低於此版本,請申請Patch ALPS00092543

大致的做法是:
  - 
vendor/mediatek/project_name/artifacts/out/target/product/project_name/system目錄下新建一個名為appbackup的資料夾,將該應用的apk檔案copyappbackup資料夾下
  - 
mediatek/config/project_name/ProjectConfig.mk檔案中新增定義:MTK_SPECIAL_FACTORY_RESET=yes
   - 
vendor/mediatek/project_name/artifacts/out/target/product/project_name/data/app下建立一個.restore_list,並且在其中新增語句:
/system/appbackup/xxx.apk(注意,.restore_list中的每一行都要以"/system” 開頭)

當解除安裝了data/app下的apk後,再恢復出廠設定,系統會從 .restore_list 中讀取apk的名字,然後從 appbackup 檔案中把apk重新拷貝到data/app下,從而恢復data/app下已經解除安裝了的apk

同時,還需要在vendor/mediatek/project_name/artifacts/out/target/product/project_name/data/app目錄下建立一個空檔案,命名為.keep_list(.keep_list的用途是,如果安裝了A,B,C三個APKDATA,在恢復出廠設定時,想要將A保留,那麼就將A寫入到.KEEP_LIST,這樣,A會被保留,B,C會被刪除。如果沒有這個檔案,那麼所有的APK都會被保留。具體可以參考FAQ03437FAQ05341)。

以上操作過程,DCC 上面也有相應的文件可供參考,文件的名字叫:Android SD upgrade application note.docx,裡面有一項:MTK special factory reset,就詳細地介紹了以上操作步驟。

注:該方法從kk開始不建議使用,原因:從KK版本開始,DVMdex檔案的路徑變成了絕對路徑,而PMSinstalld用的都是檔案路徑,如果用MTK_SPECICAL_FACTORY_RESET配合.restore_list的方式恢復apk的話,這種上下不sync會導致一些問題,比如:恢復出廠設定後三方應用報錯、恢復出廠設定後user

相關推薦

Android MTK平臺原始碼環境預置APK方法

[DESCRIPTION] 1, 如何將帶原始碼的 APK 預置進系統? 2, 如何將無原始碼的APK預置進系統? 3, 如何預置APK使得使用者可以解除安裝,恢復出廠設定時不能恢復? 4,

Android模擬按鍵——原始碼環境開發應用程式

   在http://blog.csdn.net/ericahdu 的幫助下,實現了模擬按鍵,在此,首先表示感謝:) 在原始碼下寫程式可以擺脫SDK的限制,畢竟SDK開放的API有限,比如我們實現模擬按鍵時,需要用到IWindowManager這個類, 但是SDK中是不提供這個類的 首先下載編譯原始碼,然後在

Android 開發之Windows環境Android Studio安裝和使用教程(圖文詳細步驟)

9.png 虛擬機 jdk版本 編寫 clip 開發平臺 集成開發 arc 電腦安裝 鑒於谷歌最新推出的Android Studio備受開發者的推崇,所以也跟著體驗一下。 一、介紹Android Studio Android Studio 是一個Android

React-Native 學習筆記-Android開發平臺-開發環境搭建

環境變量 最新版 下載 and 系統 系統環境變量 新版本 開發環境 studio 詳細步驟請查看官網對應文檔,BUT,有些註意事項請註意! 1,優先安裝Node.js,因為後面可以使用npm安裝軟件, 2,註意不要使用CNPM!!!!!!!!! 3,Android

Linux樂彩平臺搭建環境Memcached安裝及問題解決

https 問題 3.2 解決 問題解決 lin 新版 all ann 一. 樂彩平臺搭建安裝論壇:haozbbs.com Q1446595067 步驟 1.1 安裝libevent,當前最新版本為2.1.8,官網:http://libevent.org/ wget htt

ubuntu14.04+android-ndk-r10b+arm環境交叉編譯openssl-1.1.1記錄

相關依賴: android-ndk-r10b:ubuntu14.04搭建Android-NDK開發環境 android-arm:ubuntu14.04搭建Android-arm交叉編譯環境 1.開啟一個新的Terminal,進入Android平臺工作空間:cd AndroidWork

Android Studio工程如何放到Android 4.X原始碼環境中編譯

        現有專案需要用到RecyclerView、Leanback、Cardview等一些比較新的Support庫,且用來編譯的buildToolsVersion已經需要用到最新的23.0.1,targetSdkVersion是23。         之前嘗試在Ec

Android正式和開發環境切換操作,BuildConfig幫你一步到位

在Android開發中,正式和測試環境的切換,一般情況下我們都會去設定一個tag,通過此tag來改變開發環境。 以前的寫法一般都是: public class BaseApplication extends Application { public boolean

Android MTK 拷貝第三方App 內建apk檔案到系統目錄

MTK 的第三方App檔案或者so庫,都存在在Vendor目錄下面 vendor\retch\thirdapp 我們要實現App 的拷貝,可以在pacakage\apps 下面去新建一個資料夾RetchApp然後加入一個RetchApp.mk檔案去執行 //拷貝到 ope

android studio 安裝assets目錄apk包出現解析錯誤的問題

當你使用新版的android studio 直接run專案時,如果應用是需要安裝assets目錄下的apk包可能會出現以下問題: 這是因為新版的android studio中預設使用instant run,當直接run 部署到真機或者模擬器上時編譯專案可能會出現問題,導致

Edison平臺eclipse環境通過MRAA庫使用IIC、SPI、UART例程(BMI160、MS8607)

MRAA庫IIC例程:以下程式是操作MS8607感測器mraa_init();/* initialize I2C on bus 0 */m_i2c = mraa_i2c_init(1);mraa_i2c_frequency(m_i2c,MRAA_I2C_FAST);//400

Android AS平臺jni環境配置

廢話不多說! <1> : 新建一個DurianAsJni的android工程. <2> : 新建一個jni的java介面類: package org.durian.durianasjni; /** * Project name : DurianA

Android工程在Maven環境打包

一、Maven開發環境搭建 1、下載安裝Maven: http://maven.apache.org/download.html 2、配置Maven環境變數: 配置好環境變數以後,在cmd中執行mvn -v來檢查maven環境變數是否配置完成,見下圖: 3、配置Ma

Android MTK平臺最完備的開機動畫修改教程

修改手機的開機動畫不是什麼難事兒。 但修改一款很冷門的“山寨機”,就不太好修改第一屏了。 手機是MTK的一款手機,雖然比較貴(價格超過三星Note3),但在我看來跟山寨機木有啥區別。 很冷門的手機,百度谷歌都翻了個天,都木有刷機包,更別提recovery了。 好了,root

關於android 如何安裝 assets檔案apk

本來來源於為了得分回答別人的問題,不詳細思考,不驗證,就把百度的答案貼上去,所以在此,先道歉http://bbs.csdn.net/topics/390432635。 留有問題,當沒有SD卡又不知道內部儲存路徑時,這時候我本打算將APK 存到 /data/data/<

Android MTK平臺 客製化系統來電介面(遮蔽 InCallUI 提供介面給客戶自行展示來電去電頁面)

OS: Android 8.1 # 需求分析 1、禁止系統來電鈴聲,提供介面給客戶自己播放鈴聲 2、禁止系統拉起來去電頁面(InCallActivity),訊息通知客戶拉起自己的來去電頁面 3、禁止來電訊息 Notification 顯示(包括未接來電),點選跳轉至 InCallActivity(未接

Linux環境Swap配置方法

cache post /etc/ setting 情況 buffers 是否 mks sta Linux環境下Swap配置方法 場景: 今天下午安裝一個CentOS6.5操作系統,忘記配置swap分區。看看如何安裝系統之後,增加和刪除swap分區。方法如下:1.內存占

Android安全與逆向之簡單破解APK方法

1、下載apktool 網上百度下載apktool 2 、去找String.xml裡面的關鍵資訊的資原始檔 資原始檔在res\values\string.xml檔案裡面 找到關鍵字串,比如“無效使用者名稱或者註冊碼” 複製name 3、通過資原始檔找到id 再到res\va

tomcat8.0環境解決get方法中文引數亂碼問題

環境:java 1.7 ,tomcat8.0問題:tomcat8.0環境下,使用get方法提交由英文字母數字組合的內容顯示正常,但提交中文引數編碼亂碼,然而使用post方法程式一切正常,不出現亂碼問題。 原因:高版本tomcat 中,get 與 post 方法對引數內容

anaconda環境配置與windows環境pip使用方法

作業系統:Win10 在已經安裝python3的情況下,再安裝anaconda,如果忘了選擇”Add path to your environment”,該如何處理。 未配置環境變數的情況 配置過程 1.找到你安裝anaconda的系統地址