androidstudio for arm aapt for arm

AndroidStudio for arm

    1.下载 AndroidStudio for linux

      网址:https://developer.android.google.cn/studio

      并对应下载好相应的sdk (具体安装详见Androidstudio 的安装步骤)

      并且编写简单的helloworld 程序。

    2.安装 adb,  adb 必须适应arm 版的,可以下载源码,在飞腾平台上进行编译 ,或者 飞腾下 sudo apt install adb 安装软件 需要 注意 需要替换linux 源 :

      /etc/apt/source.list如下

    deb [trusted=yes] http://192.168.1.99/kylin/arm64 4.0.2sp2 main restricted universe multiverse\

    #ubuntu arm64

    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe

    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe

    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe

    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe

    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

    deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe

    deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe

    deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe

    deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe

    deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

        将编译或者下载好的adb  替换到 androidstudio sdk 目录下 的 我的主机对应的是 (/home/greatwall/AndroidStudioProjects/Android/Sdk/platform-tools/)

    3. 编译 aapt, AndroidStudio 需要的资源打包工具 ,此时工具会提示 aapt 不可执行的二进制文件,android sdk 官网下载默认的是x86 格式我们需要手动编译arm 版的aapt 工具

      由于 aapt 编译依赖于安卓源码编译,需要下载安卓源码 ,此步最为麻烦 ,由于aapt 编译后 会存放到out/host/linux-86/bin 下  host 目录存放的全部是x86 运行的程序(可以查阅android

      编译过程了解 host target),并且在 arm cpu 下进行源码编译是编译不通过的 ,需要对安卓编译脚本进行改造!

      1).下载 android 源码 我这里下载的是android-7.1.2_r36 可参考 (https://www.kaelli.com/19.html  https://www.cnblogs.com/aaronLinux/p/5862235.html)

          soure ./build/envsetup.sh

          lunch 2

          make aapt  //用来直接生成 aapt 工具 此时会报错

      2).  更改android 脚本

          a. 更改build/core/envsetup.mk

            通过 uname -sm 可以查看信息 linux aarch64

            如下diff的 修改将基本信息更改为aarch64  并将SDK_HOST_ARCH 更改为aarch64 会在out 下生成linux-aarch64 目录

85,94d84

< ifneq (,$(findstring aarch64,$(UNAME)))

<  HOST_ARCH := aarch64

<  HOST_2ND_ARCH := arm

<  HOST_IS_64_BIT := true

< else

< ifneq (,$(findstring x86,$(UNAME)))

< $(error Building on a 32-bit x86 host is not supported: $(UNAME)!)

< endif

< endif

<

114c104

< HOST_PREBUILT_ARCH := aarch64

---

> HOST_PREBUILT_ARCH := x86

149c139

< SDK_HOST_ARCH := aarch64

---

> SDK_HOST_ARCH := x86

    b.  在build/core/combo 下创建 HOST_linux-aarch64.mk 此文件主要作用时指定交叉编译工具链,我们这里采用系统下默认的编译工具 详见文件

HOST_linux-aarch64.mk HOST_linux-aarch64.mk

1KB --0%

HOST_CC  := gcc

HOST_CXX := g++

HOST_AR  := ar

  c. 在build/core/clang 目录下 创建HOST_arm.mk 文件 此文件用来指定 编译的时候依赖头文件和一些库文件所在目录我们这里也 让它默认去linux下/usr 目录下去寻找 比如stdio.h stdlib.h      默认使用系统中头文件 这样做避免一些文件不兼容arm版本,详见文件

HOST_arm.mk HOST_arm.mk

3KB --0%

  将 -targer 注释掉 这样就会去在系统/usr 下去找文件 可参考HOST_X86.mk 和 TARGET_arm.mk 进行文件修改

  CLANG_CONFIG_arm_HOST_EXTRA_CPPFLAGS := \

  $(CLANG_CONFIG_EXTRA_CPPFLAGS) \

  $(CLANG_CONFIG_HOST_EXTRA_CPPFLAGS) \

  $(CLANG_CONFIG_arm_EXTRA_CPPFLAGS) \

  $(CLANG_CONFIG_arm_HOST_COMBO_EXTRA_CPPFLAGS) \

  #-target $(CLANG_CONFIG_arm_HOST_TRIPLE) \

 

    3) 下载 ninja 工具 android 7.0 后用来代替make 编译的,可参考网址 https://blog.csdn.net/rankun1/article/details/80420301.

   

      git clone git://github.com/ninja-build/ninja.git && cd ninja

      git checkout release

      ./configure.py --bootstrap

      在prebuilts/ninja/下创建linux-aarch64,将下载编译好的ninja 拷贝进来

  4) 下载clang 工具 可通过 sudo apt install clang 下载 也可以在官网https://pkgs.org/download/xmllint下载arm 版本的进行安装

    将下载好后的工具(usr/include/clang 和/usr/include/clang++) 使用 whereis clang 查看位置 拷贝到 prebuilts/clang/host/linux-x86/clang-2690385/bin

    目录下进行替换原先的 。这个目录依然时x86目录原因时我没有去改目录。修改目录的地方 在build/core/clang/config.mk 中进行更改 clang和clang++位置

    在此还要说明 clang 编译的参数列表在 /build/core/definitions.mk 中进行。 在编译的过程中如果发现有的c++ 程序编译不过去需要加入 -std=c++11

    例如 如下编译形式

/bin/bash -c "(PWD=/proc/self/cwd  prebuilts/clang/host/linux-x86/clang-2690385/bin/clang++ -I external/libcxx/include/ -I external/libcxx -I out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates -I out/host/linux-aarch64/gen/STATIC_LIBRARIES/libc++_static_intermediates -I libnativehelper/include/nativehelper \$(cat out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/import_includes) -isystem system/core/include -isystem system/media/audio/include -isystem hardware/libhardware/include -isystem hardware/libhardware_legacy/include -isystem hardware/ril/include -isystem libnativehelper/include -isystem frameworks/native/include -isystem frameworks/native/opengl/include -isystem frameworks/av/include -isystem frameworks/base/include -isystem tools/include -isystem out/host/linux-aarch64/obj/include -c      -D__compiler_offsetof=__builtin_offsetof -Werror=int-conversion -Wno-reserved-id-macro -Wno-format-pedantic -Wno-unused-command-line-argument -fcolor-diagnostics          -Wno-inconsistent-missing-override    -target i686-linux-gnu          -std=c++11 -MD -MF out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.d -o out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.o external/libcxx/src/stdexcept.cpp ) && (cp out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.d out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.P; sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\\\\$//' -e '/^\$/ d' -e 's/\$/ :/' < out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.d >> out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.P; rm -f out/host/linux-aarch64/obj/STATIC_LIBRARIES/libc++_static_intermediates/src/stdexcept.d )"

当我们发现有些代码编译报错后,将编译打印如上复制出来,放在android系统根目录下进行修改参数调试然后执行,以此作为检查错误的手段!

5)当编译的过程中你会发现一些头文件或库文件找不到,这是因为我们使用的是系统/usr/目录下文件,此目录并不包含安卓系统所需要的的所有文件,我们需要将文件进行拷贝扩展

  这个是个漫长的过程需要一点点调式,改一个文件就需要编译一次,并且需要的文件比较多! 我一般查找的过程 在/usr/include下有个aarch64-linux-gnu 目录和在lib/aarch6  4-linux-gnu 目录。可以在这个地方寻找文件拷贝道usr下进行一个个文件尝试,如果实在找不到文件,在android系统源码prebuilts/gcc/linux-x86 也是可以找到的。为节省  时间可以不用make aapt 编译,直接复制报错的执行脚本进行验证!另外 usr/include 只是缺少文件不存在将/usr/include下的文件覆盖的情况,所以不会对原有系统进行影响!

6) 注意limits.h 这个文件在编译external/libcxx 目录时候导致了很多错误! 所花费时间最长,这个文件在usr/include时没有的,在aarch64-linux-gnu下可以找到,当把文件拷贝到/usr/include下后,依然报出很多未知莫名奇妙的错误。最后索性使用,prebuilts/gcc/linux-x86 目录下的文件进行代替,还是报很多错误,最后解决办法是将两个文件 进行下了比较,aarch64-linux-gnu 下的有些内容没有定义,但是prebuilts/gcc/linux-x8下定义了 ,将两个文件合并编译通过!

7)最后在编译的时候出现undefined reference to `png_init_filter_functions_neon' 的错误 按照 网址 https://blog.csdn.net/weixin_42330265/article/details/80484978 的方法进行解决,aapt编译成功!

4. 从新整理androidstudio 将编译出的 out/host/bin/aapt 和 out/host/linux-aarch64/lib64/libc++.so 分别拷贝道sdk下载目录/home/greatwall/AndroidStudioProjects/Android/Sdk/build-tools/26.0.1 目录下和 lib64 目录下!

5.如果AndroidStudio 出现如下错误:

> Could not resolve all dependencies for configuration ':app:_debugApkCopy'.

  > Could not find any version that matches com.android.support:appcompat-v7:29.+.

    Versions that do not match:

        26.0.0-alpha1

        25.3.1

        25.3.0

        25.2.0

        25.1.1

        + 31 more

    Required by:

        project :app

需要修改build.gradle 文件降低版本内容再进行编译可以通过!

6.使用 XDroid 作为工具运行模拟!AndroidStudoio 自带的AVD 是不支持arm的市面上的虚拟机也没有找到支持arm的!

   

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

推荐阅读更多精彩内容