微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > L版本APPIOT常见问题总结(对比机可以复现)

L版本APPIOT常见问题总结(对比机可以复现)

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]

L版本上,一些APPIOT常见问题,对比机同样可以复现。
这类问题如何判别和解决呢?

[SOLUTION]

APPIOT已有FAQ:
ID: FAQ13604L版本APP不兼容问题第一手分析
ID: FAQ04289APPIOT问题第一手分析以及对比测试注意事项
在APPIOT已有的FAQ里均有提到,对比机可以复现的问题可以归结为三方apk issue,非mtk问题。
L版本目前遇到的一些对比机也可以复现的问题总结如下:
1 64bit 应用兼容问题
一些apk在32bit机器中运行OK,在64bit机器中运行有问题。
这类问题需要使用64bit的对比机进行测试,一般为apk对64bit的兼容性问题,需要apk后续改进。
2 memory Layout的引起的appiot问题
一些应用自身有bug,对比机也可以复现问题。
此类问题的现象:
运行时apk会闪退,log里可以看到类似错误:
java.lang.UnsatisfiedLinkError: Bad JNI version returned fROM JNI_OnLoad in
Mtk可以提供workaround方法,但是不建议修改,因为google的默认做法不是这样,一旦后期APP兼
容L 平台 ,就可能导致这些APP在MTK平台上运行不了。
--- //ALPS_SW/MP/L0.MP6/alps/php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks/base/cmds/app_process/app_main.cpp 2014-12-12 03:51:25.000000000
0800
+++ /worktmp/mtk03113/wip/l0.mp6/alps/frameworks/base/cmds/app_process/app_main.cpp 2014-12-12
03:51:25.000000000 0800
@@ -7,15 +7,16 @@
#define LOG_TAG "aPPProc"
+#include <cutils/properties.h>
#include <binder/IPCThreADState.h>
#include <binder/ProcessState.h>
#include <utils/Log.h>
#include <cutils/memory.h>
#include <cutils/process_name.h>
-#include <cutils/properties.h>
#include <cutils/trace.h>
#include <android_runtime/AndroidRuntime.h>
#include <private/android_filesystem_config.h> // for AID_SYSTEM
+#include <sys/personality.h>
#include <stdlib.h>
#include <stdio.h>
@@ -185,6 +186,33 @@
int main(int argc, char* const argv[])
{
+#ifdef __ARM__
+ /*
+ * b/7188322 - Temporarily revert to the compat memory layout
+ * to avoid breaking third party apps.
+ *
+ * THIS WILL GO AWAY IN A FUTURE ANDROID RELEASE.
+ *
+ * http://git.kernel.org/?p=linux/k ... mmitdiff;h=7dbaa466
+ * changes the kernel mapping from bottom up to top-down.
+ * This breaks some programs which improperly embed
+ * an out of date copy of Android's linker.
+ */
+ char value[PROPERTY_VALUE_MAX];
+ property_get("ro.kernel.qemu", value, "");
+ bool is_qemu = (strcmp(value, "1") == 0);
+ if ((getenv("NO_ADDR_COMPAT_LAYOUT_FIXUP") == NULL) && !is_qemu) {
+ int current = personality(0xFFFFFFFF);
+ if ((current & ADDR_COMPAT_LAYOUT) == 0) {
+ personality(current | ADDR_COMPAT_LAYOUT);
+ setenv("NO_ADDR_COMPAT_LAYOUT_FIXUP", "1", 1);
+ execv("/system/bin/app_process32", argv);
+ return -1;
+ }
+ }
+ unsetenv("NO_ADDR_COMPAT_LAYOUT_FIXUP");
+#endif
+
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0) {
// Older kernels don't understand PR_SET_NO_NEW_PRIVS and return
// EINVAL. Don't die on such kernels.
3 ART自有bug引起的APPIOT问题
请申请art的最新patch后再测试
L0:请申请patchALPS02149675
L1:请申请patchALPS02125533
由于ART的影响面比较广,在做APPIOT兼容测试前都请申请ART的最新patch后再进行测试。
谢谢~

沙发   

:):)

楼上的,看出来了,你是来赚RD币的

:lol哈哈

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top