1,如何打开一种语言以及如何设置开机默认语言 ?

           一、如何打开语言支持计划中的语言?
               AndroidKK JB
             请打开文件:mediatek/config/${Project}/ProjectConfig.mk
             找到宏MTK_PRODUCT_LOCALES,把所需的语言代码添加进去,比如添加越南语"vi_VN"如果没有找到        MTK_PRODUCT_LOCALES,可能在mediatek/config/common/ProjectConfig.mk中.

        ANDROID L
MTK_PRODUCT_LOCALES这个宏已经没有使用,使用的是alps\device\公司名字\项目名字\项目名字.mk 中的PRODUCT_LOCALES请添加语言的时候在PRODUCT_LOCALES中添加。
例如我司自己内部的项目代号aubest52那么添加语言路径是(device\mediatek\aubest52\full_aubest52.mk中的PRODUCT_LOCALES后面添加语言)其他流程和KK一致


          二、怎么添加一种新语言

                    (略)

        三、设置开机默认语言
如果想把某种语言设置为开机默认语言,只需把这个语言的代码放到(Android L PRODUCT_LOCALES后面第一个即可
),(Android KK MTK_PRODUCT_LOCALES的第一个即可)。



2,  1) 如何将带源码的 APK 预置进系统?
         2)如何将无源码的APK预置进系统?
         3) 如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?
         4) 如何预置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 整个工程

二、如何将无源码的 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下。
三、如何预置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)
四、如何预置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


3, 从KK(4.4)版本通过OTA升级到L(5.0)版本的问题集锦

data下面,才可以升级
1.SD卡升级
1)在normal mode下,把升级包update.zip,用adb先push到/data下面
2)输入 adb shell,输入 echo "--update_package=/data/update.zip" >
/cache/recovery/command
3)输入 adb shell ,执行 /system/bin/uncrypt
然后系统会自动进入recovery升级。
2. MOTA/FOTA升级
无需上述的命令,主要从DM端download升级包到/data分区后,手机会自动
reboot,uncrypt会自动被执行。
[Case 2] 进入recovery mode的方式
KK:power+volup键,进入LK选择界面,选择recovery mode后,出现小机器人,再按
power键,进入menu界面。
L:power+volup键,进入LK选择界面,选择recovery mode后,出现小机器人,再按

power+volup键,进入menu界面。
[Case 3]关闭L版本的data加密功能
修改 fstab.{ro.hardware} 文件:
alps/device/mediatek/$platform/fstab.{$platform}
将 forceencrypt 修改为 encryptable,如下图

android代码输入泰文_编译 系统


然后重新build boot.img:
make ramdisk-nodeps
make bootimage-nodeps
或者重新build整个load。
关闭加密后,recovery下访问/data分区,如果有出现persimmon denied的问题,可
能是SELinux的问题。
请先按照 FAQ11484 [SELinux] 如何设置确认selinux 模式 先来排查。
如果是SELinux的问题,可以添加如下:
\alps\device\mediatek\common\sepolicy\recovery.te
allow recovery app_data_file:{ file lnk_file } { create_file_perms
relabelfrom relabelto };
allow recovery app_data_file:dir { create_dir_perms relabelfrom relabelto
};
[Case 4]MTK_SHARE_SDCARD 关闭
默认下 MTK_SHARE_SDCARD=y,升级是OK。

如果需要将 MTK_SHARE_SDCARD 改为 no,可能会出现如下的升级错误:
USRDATA 0x58f80000
FAT 0x92b80000
phone_expdb_succeed=1
scatter_expdb_succeed=0
Error: Invalid partition setting
19: fat 1d1380000:92b80000
I:GPT not supported!
Installation aborted.
需要将以下两个文件同时修改:
alps/device/$custom/$project/ProjectConfig.mk
alps/kernel-3.10/arch/arm/configs/$project_debug_deconfig


4, L版本首次开机慢

首次开机慢的原因:
一L版本默认开启了加密功能,影响开机时间。
请参考FAQ关闭加密功能。
[FAQ14128]L版本如何关闭默认加密
二L版本首次开机会提取所有预置apk的odex文件,花费比较多时间。
请参考FAQ修改为预编译时提取apk的odex文件。
[FAQ14131] L版本预编译提取apk的odex文件,如何修改?
[FAQ14105] L版本打开WITH_DEXPREOPT宏后首次开机仍慢
三如果开机之后,发现单个APP优化的时候还比较长,请参考FAQ:
[FAQ14117]单个APP优化时间过长的问题
四如果开机时间还不理想,建议关闭patch oat功能,请参考FAQ:
[FAQ14132] 开启WITH_PREODEX之后,如何减少第一次开机之后data分区的大小
五 如果遇到eng版本make命令生成不了odex文件,请参考FAQ:
[FAQ15081]eng版本make命令生成不了odex的说明
实际测试情况:
使用手机:mt6752L user版本
测试情况:
1关闭WITH_DEXPREOPT且开启手机加密
首次开机时间:4:40
2开启WITH_DEXPREOPT且关闭手机加密
首次开机时间:2:16
上述首次开机时间是mtk内部52手机测试时间,仅供参考。
首次开机时间和贵司具体预置的apk的数量有关。
请知悉,谢谢~
注意:
1 请不要预置太多apk,尽量减少不必要的apk,太多apk会导致开机慢。
相关FAQ:
[FAQ14102]L版本开机提示“Android正在升级或启动”
[FAQ13232]L 预置apk
[FAQ13697]L 版本如何将第三方so库打包到apk



5, L 版本如何将第三方so库打包到apk

1、如何判断第三方库文件是32 bit/64 bit?
使用Linux 命令: file xxx.so
可以看到拿到的xxx.so是哪种格式
2、 如何将没有源码的第三方库打包到apk ?
请把此so 放在apk 目录下,也可以存放在vendor/meidatek/libs/$project/
$folder/xxx.so
采用prebuilt 的方式,在当前so 所在目录下写 Android.mk ,内容类似如下:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := 此so 库名(不加so后缀)
LOCAL_SRC_FILES_32 := xxx.so (表示是32 bit 的so)
LOCAL_SRC_FILES_64 := xxx.so (表示是64 bit的so)
LOCAL_MULTILIB := 32/64/BOTH(只编译32bit/64bit/both)
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(BUILD_PREBUILT)
然后此so 就可以被直接在apk 的Android.mk 使用,例如:
在alps\packages\apps\Tester添加一个apk, Android.mk写法
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := tests

LOCAL_SRC_FILES := $(call all-java-files-under, src)
#需要引用的静态库
LOCAL_STATIC_JAVA_LIBRARIES := \
jxl \
AChartEngine_fat
LOCAL_PACKAGE_NAME :=Tester
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_DEX_PREOPT := false
LOCAL_PROGUARD_ENABLED := disabled
# 对前面prebuilt 的动态库的引用
LOCAL_JNI_SHARED_LIBRARIES +=xxx
# 此apk 限制为32 bit
LOCAL_MULTILIB := 32
include $(BUILD_PACKAGE)
##################################################
# 此apk 引用的静态库(位置:alps\packages\apps\Tester\libs\jxl.jar 与
AChartEngine_fat.jar),
对静态库采用prebuilt 的编译方式
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=jxl: libs/jxl.jar \
AChartEngine_fat: libs/AChartEngine_fat.jar\
LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)
# Use the following include to make our test apk.
include $(callall-makefiles-under,$(LOCAL_PATH))
3、对于没有root权限的user 版本,如何确保第三方so库可以打包到apk 里面, 采用
adb 命令进行install ?
请在apk 对应的Android.mk 将
LOCAL_MODULE_TAGS := tests ,
此apk 默认会被编译到out/target/product/$project/data/app/tester/tester.apk
但不会被安装到system.img,
这种适应于采用adb 命令install此apk的方式,会将需要的库整体打包到apk, 类似
如下apk结构:
引用的三方so 库打包在apk 的 lib 中

android代码输入泰文_android_02

LOCAL_MODULE_TAGS := optional /eng 此apk可以被打包到systemimage,
而引用的三方so库,实际存放在system/lib 或lib64中,
apk结构类似如下:lib中存放三方so 库的链接,实际的so 存储在system/lib 下


android代码输入泰文_android_03


可以采用flashtool download,此apk 可以正常执行对eng 版本和有root 权限的user 版本,install apk 后,需要把so 库也push 进去,否则apk 无法运行!!!


编译命令
preloader
make -j24 pl 2>&1 | tee build.log
lk
make -j24 lk 2>&1 | tee build.log
kernel
make -j24 kernel 2>&1 | tee build.log
make -j24 2>&1 | tee build.log
AOSP Full Build commands
use mt6572v1_phone as an example:
source build/envsetup.sh
lunch full_mt6572v1_phone-eng (Or you can execute lunch and select the project from the menu directly.)
source ./mbldenv.sh
make -j24 2>&1 | tee build.log or
make -j24 -k 2>&1 | tee build.log
("-j24": Use 24 jobs to run multiple compile, "-k": keep going when encounter error, "2>&1 | tee build.log": redirect stderr and stdout to build.log)
AOSP Partial Build commands:
Remember to execute the following build enviroment scripts at least once before using the partial build commands.
source build/envsetup.sh
lunch full_mt6572v1_phone-eng (Or you can execute lunch and select the project from the menu directly.)
source ./mbldenv.sh
1.Build preloader only
make -j24 pl 2>&1 | tee build.log
or
cd bootable/bootloader/preloader
TARGET_PRODUCT=mt6572v1_phone ./build.sh 2>&1 | tee build.log
2.Build LK only
make -j24 lk 2>&1 | tee build.log
or
cd bootable/bootloader/lk
make -j24 mt6572v1_phone 2>&1 | tee build.log
3.Build kernel only
make -j24 kernel 2>&1 | tee build.log
4.Build boot image
make -j24 bootimage
PS. 目前 95, k2 因為SELinux 的關係,完全沒build 過的load,不能直接單獨build bootimage ,
得先
mmm -B external/libselinux
mmm -B external/sepolicy
5.Build system image
make -j24 systemimage
6.Pack System Image

make -j24 snod
7.Build android module
(Please execute FULL BUILD pass first.)
mmm <directory>
example: mmm framework/base
8.Rebuild android module
(Please execute FULL BUILD pass first.)
mmm -B <directory>
example: mmm -B framework/base
9.Build android module by name
make -j24 <module name>
example: make -j24 libjpeg