我是如何在 一加 5T 上运行 ARCore 的

在早期的 ARCore sdk 中,设备检查是在 arcore_client.aar 中的 SupportedDevices.class,方法可以参考这里

我使用的是 1.1.0 版本,发现里面的变化很大,找不到 SupportedDevices 这个类了,于是看了半天里面的代码,发现设备校验是通过底层 so 库做的,并且 sdk 里的 so 又调用了 ARCore 里的 so,很复杂,致使上面的反射方法失效

但是还不甘心,在把 ARCore sdk 捋了一遍后,我又把 ARCore apk 解压反编译了,看了一下大致的代码,然后在 apk 的 assets 目录发现了一个叫 device_profile_database 的目录,赫然发现里面记录的是一个个设备信息,在里面发现了 device_profile_OnePlus5_slash_OnePlus5_colon_7.proto 和 device_profile_OnePlus5_slash_OnePlus5_colon_8.proto 两个文件,用对比工具看了一下,内容完全一样,我觉得 一加 5 和 5t 硬件差别应该不大,所以思路就有了,把这两个文件分别拷贝一份,把设备型号 改成 5T,然后重新打包安装

安装后 ARCore apk 后,运行官方 demo 提示的信息变了,之前提示的是 "设备不支持" ,修改过后,提示 "创建 session 失败" ,查看 logcat 发现一个错误信息:签名校验失败,到这里,我觉得有戏,可以再搞一搞,错误信息是 native 报出来的,但是我发现,检查签名其实是 java 层做的,在 SessionCreateJniHelper 的 checkApkSignature() 函数里

@UsedByNative("session_create.cc")
static boolean checkApkSignature(Context var0) throws NameNotFoundException {
    PackageInfo var1;
    try {
        var1 = var0.getPackageManager().getPackageInfo("com.google.ar.core", 64);
    } catch (NameNotFoundException var9) {
        return true;
    }
    // xxx 是很长的 签名值,这里省略了
    Signature var2 = new Signature("xxx");
    Signature[] var3 = var1.signatures;
    int var4 = var1.signatures.length;

    for(int var5 = 0; var5 < var4; ++var5) {
        Signature var6;
        if ((var6 = var3[var5]).equals(var2)) {
            return true;
        }

        String var7 = var2.toCharsString();
        String var8 = var6.toCharsString();
        Log.w("ARCore-SessionCreateJniHelper", (new StringBuilder(39 + String.valueOf(var7).length() + String.valueOf(var8).length())).append("Signature mismatch.  Expected '").append(var7).append("' got '").append(var8).append("'").toString());
    }
    // 这里是重点
    return var0.getPackageManager().getApplicationInfo(var0.getPackageName(), 128).metaData.getBoolean("com.google.ar.core.disable_security_check", false);
}

代码的最后一行是重点,即只要在 demo 工程的 AndroidManifest.xml 中的 application 节点内添加如下内容即可跳过签名检查

<!-- 跳过 SessionCreateJniHelper 签名检查 -->
<meta-data
    android:name="com.google.ar.core.disable_security_check"
    android:value="true" />

然后重新运行 demo 就顺利跑起来了
下面是运行图


OnePlus5T

白天刚搞完这个,晚上 Google I/O 大会就发布了 ARCore 1.2 ,然后第二天试了上面的方法依然有效,ARCore 1.2 增加了 一加 3T 和 6 但是就是没有 5T 很郁闷
ARCore 1.2 sdk 相对于 1.1 的变化:增加了 Augmented Image 相关 api,并且做了代码混淆

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容