jasmine1

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

0
阅读(1229)

L版本APPIOT常见问题总结(对比机可以复现)[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后再进行测试。

谢谢~