androidStudio aapt编译 for arm 版本

AndroidStudio for arm

1.下载 AndroidStudio for linux
下载网址:https://developer.android.google.cn/studio;
并对应下载好相应的sdk (具体安装详见Androidstudio 的安装步骤)
https://blog.csdn.net/J_Treasuries/article/details/44015797;
并且编写简单的helloworld 程序。
2. 安装 adb
adb 必须适应arm版的,可以下载源码,在飞腾平台上进行编译,或者飞腾下 sudo apt install adb 安装软件,需要注意需要替换linux 源 :
/etc/apt/source.list如下:

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

  1. 编译 aapt
    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 (, ( f i n d s t r i n g a a r c h 64 , (findstring aarch64, (findstringaarch64,(UNAME)))
< HOST_ARCH := aarch64
< HOST_2ND_ARCH := arm
< HOST_IS_64_BIT := true
< else
< ifneq (, ( f i n d s t r i n g x 86 , (findstring x86, (findstringx86,(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
此文件主要作用时指定交叉编译工具链,我们这里采用linux系统下默认的编译环境详见文件 HOST_linux-aarch64.mk

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
将 -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 工具
C语言、C++ 轻量级编译器;
可通过 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 目录可以在这个地方寻找文件拷贝到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)undefinedreferenceto`png_init_filter_functions_neon’
最后在编译的时候的错误按照网址:https://blog.csdn.net/weixin_42330265/article/details/80484978 的方法进行解决,aapt编译成功!

  1. 从新整理AndroidStudio
    将编译出的:
    out/host/bin/aapt;
    out/host/linux-aarch64/lib64/libc++.so ;
    拷贝到sdk下载目录:/home/greatwall/AndroidStudioProjects/Android/Sdk/build-tools/26.0.1(根据androidStudio使用的sdk)目录下和 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 文件降低版本内容再进行编译可以通过!
  1. 使用 XDroid 作为工具运行模拟!
    AndroidStudoio 自带的AVD 是不支持arm的市面上的虚拟机也没有找到支持arm的!

你可能感兴趣的:(androidStudio aapt编译 for arm 版本)