【AOSP】JackServer疑难杂症解决

前言

JackServer是AOSP自带的一个编译Java代码的服务器,每次执行make的时候会判断当前用户是否安装了JackServer,如果没有,就会自动安装。但这玩意经常报各种错。本文记录解决这些错误的方法。

开发环境

AOSP开发极其依赖开发环境,介绍一下我的开发环境作为参考:

硬件环境

Ubuntu 16.04虚拟机或实体机
编译源码要有至少8G的内存,如果要用AS或者ASFP打开源码目录,需要16G以上内存,不然会中途报错
硬盘空间300G以上,推荐500G以上避免报错

软件环境

用apt安装这堆东西:

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig libxml2-utils

Java需要openjdk1.8

sudo apt-get install openjdk-8-jdk

python2.7,系统自带的就可以

JackServer目录和使用方式

JackServer的目录在~/.jackserver/
设置文件在.jack-server/config.properties~/.jack-settings
日志文件在~/.jack-server/logs/

启动指令:

先cd到AOSP根目录下
./prebuilts/sdk/tools/jack-admin start-server

停止指令:

./prebuilts/sdk/tools/jack-admin kill-server

多数情况下不需要手动启动和停止JackServer

查看错误指令:

要先source build/envsetup.sh才能找到命令
jack-diagnose

但是这个指令大多数情况下是不会真的报错的,更常用的是下面这个指令:
输出log:

./prebuilts/sdk/tools/jack-admin dump-report

疑难杂症

SSL报错

症状:控制台输出这句话

Jack server failed to ,SSL error when connecting to the Jack server. Try ‘jack-diagnose‘

要改两个文件,JackServer自带的配置和openJdk的配置,分别在以下两个位置:

gedit [你的AOSP源码路径]/prebuilts/jdk/jdk8/darwin-x86/jre/lib/security/java.security
sudo gedit /etc/java-8-openjdk/security/java.security

删掉TLSv1, TLSv1.1,,然后重启Ubuntu

OOM

内存不足导致的,控制台会输出这句话

Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by android-jack-team@google.com)).
GC overhead limit exceeded.

编辑~/.jack-settings
加入这行

JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g -Xms1g"

Ubuntu内存不够的话可以用zram和swap缓解,有条件最好上大内存。

SETTING_VERSION未绑定的变量

症状:控制台输出这句话

jack-admin: 行 55: SETTING_VERSION: 未绑定的变量

编辑~/.jack-settings
加入这行

SETTING_VERSION=4

服务器地址不匹配

报错信息我忘了,反正就是说服务器的地址不匹配的意思。打开源码会发现里面匹配localhost,但服务器的地址是127.0.0.1
当时看见这个报错的时候...我真的很想把谷歌程序员脑子打开看看里面装的什么东西。本地有jdk不用,非要搞什么服务器,自己服务自己就算了。丫的判断地址是不是一致,不ping一下,搁这字符串判断,还localhost和127.0.0.1都不设置个别名...国际大厂的水平就这?

解决办法,没错,还是上面那个~/.jack-settings,加入这行

SERVER_HOST=localhost

端口被占用

改了就是了,这次要改两个文件。
第一个还是~/.jack-settings,加入这两行

SERVER_PORT_SERVICE=8074
SERVER_PORT_ADMIN=8075

第二个是~/.jack-server/config.properties修改这两行

jack.server.service.port=8074
jack.server.admin.port=8075

然后设置权限

chmod 0600 .jack-server/config.properties 
chmod 0600 .jack-settings 

权限错误

查看~/.jack-server/logs/的日志,发现最新的文件有以下内容:

SEVERE: com.android.jack.launcher.ServerLauncher: Server 1 Exception
com.android.jack.server.api.v01.ServerException: '.' has the following invalid permissions ---rwxrwx
    at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:71)
    at com.android.jack.launcher.ServerLauncher$3.run(ServerLauncher.java:392)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: '.' has the following invalid permissions ---rwxrwx
    at com.android.jack.server.PosixFileAccess.checkAccessibleOnlyByOwner(PosixFileAccess.java:62)
    at com.android.jack.server.JackHttpServer.getCurrentUser(JackHttpServer.java:1232)
    at com.android.jack.server.JackHttpServer.<init>(JackHttpServer.java:525)
    at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:66)
    ... 2 more

谷歌真的有毛病,还非要求文件的权限长什么样,777还不行。就我一个人用的电脑,就一个账户,搞那么多乱七八糟的干嘛,纯纯有毛病。
两个解决办法,一个是改权限:

  • ~/.jack-server 目录本身权限设置为700
  • ~/.jack-server/logs 目录及目录下文件设置为777
  • ~/.jack-server/jack 目录及目录下的文件设置为777
  • ~/.jack-server/ 目录下其他文件设置为600

第二个办法是不惯着这逼玩意,直接改JackServer的源码

git clone https://android.googlesource.com/platform/tools/jack
find . -name "PosixFileAccess.java"

找到checkAccessibleOnlyByOwner这个方法,改为空实现。然后重新编译JackServer,替换原来的JackServer。这个方法是GPT提供的,我没亲自试过。

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

推荐阅读更多精彩内容