NanoPi K2 (Amlogic S905) Ubuntu 16.04 编译Android 5.1系统源码

1. 下载源码

在这里下载https://www.mediafire.com/folder/8xn2iirciznqh/S905压缩包,或者使用repo进行下载。按照https://wiki.friendlyarm.com/wiki/index.php/NanoPi_K2/zh这里下载。

2. 编译

编译的方法https://wiki.friendlyarm.com/wiki/index.php/NanoPi_K2/zh,为防止链接失效,我这里备份一下:

// #################################引用分隔线###############################################

编译Android

搭建编译环境

搭建编译Android的环境建议使用64位的Ubuntu 16.04,安装需要的包即可。

sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip

sudo apt-get install flex libncurses5-dev zlib1g-dev gawk minicom

更多说明可查看 https://source.android.com/source/initializing.html 。

下载Android5.1源代码

Android源代码的下载需要使用repo,其安装和使用请查看 https://source.android.com/source/downloading.html 。

mkdir android && cd android

repo init -u https://github.com/friendlyarm/android_manifest.git -b nanopi-k2-lollipop

repo sync

其中“android”是指工作目录。

编译系统

source build/envsetup.sh

lunch nanopi_k2-userdebug

make -j8

编译成功完成后,目录 out/target/product/nanopi-k2 下包含可用于烧写的image文件。

filename partition Description

u-boot.bin bootloader -

boot.img boot -

cache.img cache -

userdata.img userdata -

system.img system -

partmap.txt - 分区描述文件

烧写到SD卡

如果是采用SD卡启动Android,可复制编译生成的image文件到sd-fuse_amlogic/android/ 下,使用脚本即可烧到到SD卡,具体请查看#在Linux Desktop下通过脚本制作。

使用fastboot更新

板子启动后通过串口快速按任意键进入uboot命令行模式,输入命令fastboot usb即可更新Android。

连接USB线,然后PC端输入以下命令:

cd out/target/product/nanopi-k2

sudo fastboot flash boot boot.img

sudo fastboot flash cache cache.img

sudo fastboot flash userdata userdata.img

sudo fastboot flash system system.img

sudo fastboot reboot

// #################################引用分隔线###############################################

3. 遇到的问题

1.JDK版本问题

源码里自带了自己需要使用的1.7版本,你的系统中装的不一定是1.7版本的。直接加上一个全局变量,让编译的时候使用自带的解决JDK版本的问题。

解决方案

export ANDROID_SET_JAVA_HOME=true

2. JniInvocation.cpp:165: error: unsupported reloc 43

...

libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43

libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43

libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43

libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43

...

解决方案

具体的原因是使用clang编译art时遇到点问题,使用clang而不使用gcc是想log内容好看一些,这里不使用即可。来源:https://github.com/gmacario/easy-jenkins/issues/88

export WITHOUT_HOST_CLANG=false

注:其它博客上写的修改源码的方式也是禁用clang,这里能用export解决就不修改源码。:)

3. public_api.txt:20: error 5: Added public field android.Manifest.permission.BACKUP

新源码,根本没有修改任何代码,怎么上来就需要make update-api呢?应该是别的错误引起的,最终找到了解决方案。

Checking API: checkpublicapi-current

out/target/common/obj/PACKAGING/public_api.txt:20: error 5: Added public field android.Manifest.permission.BACKUP

out/target/common/obj/PACKAGING/public_api.txt:82: error 5: Added public field android.Manifest.permission.INVOKE_CARRIER_SETUP

out/target/common/obj/PACKAGING/public_api.txt:106: error 5: Added public field android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE

out/target/common/obj/PACKAGING/public_api.txt:116: error 5: Added public field android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST

******************************

You have tried to change the API from what has been previously approved.

To make these errors go away, you have two choices:

1) You can add "@hide" javadoc comments to the methods, etc. listed in the

errors above.

2) You can update current.txt by executing the following command:

make update-api

To submit the revised current.txt to the main Android repository,

you will need approval.

******************************

解决方案:

根据:https://stackoverflow.com/a/42654807/2193455 和 https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd%5E%21 需要修改 system/core/libutils/String8.cpp

diff --git a/libutils/String8.cpp b/libutils/String8.cpp

index 9092cbc..3323b82 100644

--- a/libutils/String8.cpp

+++ b/libutils/String8.cpp

@@ -424,7 +424,7 @@

next = len;

}

- memcpy(buf + tail, buf + index + skip, next - index - skip);

+ memmove(buf + tail, buf + index + skip, next - index - skip);

tail += next - index - skip;

index = next;

}

4. 我的完整编译脚本,需要的请拿去

#!/bin/bash

# author: kangear

# e-mail: kangear@163.com

# wechat: kangear

# only for android 5.1 (NanoPi-K2 Amologic S905)

# export http_proxy=127.0.0.1:

# install from wiki

sudo apt-get -y install bison g++-multilib git gperf libxml2-utils make python-networkx zip flex libncurses5-dev zlib1g-dev gawk minicom git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

# For Jdk 1.7

# sudo add-apt-repository -y ppa:openjdk-r/ppa

# sudo apt-get -y update

# sudo apt-get -y install openjdk-7-jdk

export ANDROID_SET_JAVA_HOME=true

# cache

export USE_CCACHE=1

# fix: libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43

export WITHOUT_HOST_CLANG=false

# fix: public_api.txt:20: error 5: Added public field android.Manifest.permission.BACKUP

sed -i '427s/memcpy/memmove/' ./system/core/libutils/String8.cpp

# ccache size

prebuilts/misc/linux-x86/ccache/ccache -M 200G

# for nanopi_k2

source build/envsetup.sh

lunch nanopi_k2-userdebug

# make

make -j32

5. 截图

希望与广大网友互动??

点此进行留言吧!

android s905 编译_NanoPi K2 (Amlogic S905) Ubuntu 16.04 编译Android 5.1系统源码相关推荐

  1. ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装

    Ubuntu 16.04下 Mysql5.7.17源码编译与安装 系统环境 一. 系统安装条件 1.cmake MySQL使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. sudo ...

  2. Ubuntu 14.04实现终端代理下载系统源码

    相信对于我们程序猿来说,开发并没有国界,外国的开发资料反正更加刚需.因为本博主的Ubuntu系统损坏了,只好重新配置一遍Ubuntu14.04的访问国外网络的环境配置,也作为以后配置环境方便使用的笔记 ...

  3. Linux下编译vtk的java版本,Ubuntu 16.04 编译VTK7.1

    编译过程总共分为三步: 第1步:准备编译环境 第2步:cmake生成工程 第3步:编译安装 第1步:准备编译环境 Ubuntu在编译VTK7.1之前需要安装三个软件包:Qt5,X11,OpenGL,C ...

  4. ubuntu 16.04 编译android 7.1,jack报错

    ubuntu 16.04 编译android 7.1,jack报错 Writing client settings in /home/nikos/.jack-settings Installing j ...

  5. xps13安装linux系统,[操作系统]Dell XPS 13 (9360)安装配置 ubuntu 16.04 实现 win10 Linux双系统...

    [操作系统]Dell XPS 13 (9360)安装配置 ubuntu 16.04 实现 win10 Linux双系统 0 2017-07-17 12:00:18 博主今日投身于SLAM的研究事业,放 ...

  6. Ubuntu 16.04编译Android 7.1.2

    折腾了很久,终于搞定了这个环境.记录一下. 准备工作: 1. 首先在Ubuntu官网上下载Ubuntu16.04的官方镜像.官网下载地址(这个找了很久,这里可以直接下载ISO镜像):https://l ...

  7. 16.04编译android 7.0,[原创]使用ubuntu 16.04编译android-6.0.0_r1

    前言 最近一直在折腾这个android源码从Mac到docker再到ubuntu14.04,最后换了ubuntu 16.04,前前后后花了大概2个星期,感觉自己就是自带bug的男人...呵呵了,记录一 ...

  8. cmake linux编译,Ubuntu 16.04编译cmake源码

    编译版本:cmake-3.8.0-rc2 为了能够在Ubuntu 16.04中编译出ccmake和cmake-gui,首先需要安装libncurses5-dev sudo apt install li ...

  9. ubuntu 16.04 编译构建QEMU依赖的软件

    在原生ubuntu 16.04下编译构建QEMU过程中,会遇到若干错误.出现这些错误的原因是系统缺少一些软件.根据过去的经验,缺少的软件包列表如下: python, pkg-config, bison ...

最新文章

  1. 高效程序员的45个习惯 pdf_高效瑜伽人的 5 个习惯,你get到了几个?
  2. 如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)
  3. python转go感觉难_读《我为什么从python转向go》的一些感受
  4. vue-cookies使用方法,vue中使用获取cookie
  5. 【opencv有趣应用】基于MobileNet + SSD的物体检测
  6. 听说Mutex源码是出名的不好看,我不信,来试一下
  7. 【转】聊聊HTTPS和SSL/TLS协议
  8. OS | 【四 文件管理】强化阶段大题解构 —— FAT文件系统、UFS文件系统访问文件过程
  9. 什么是外包公司?要不要去外包公司?
  10. 大牛程序员带你走进互联网:资历深不是优势,资源才是难得的宝藏!
  11. 什么是combo复用口,光电类型如何转换?
  12. 稀疏数组真心话大冒险
  13. java简单记事本代码_简单记事本的java程序代码
  14. 团队软件开发第一次冲刺(七)
  15. 和王兴并肩战斗十余年,王慧文的精华思考都在这里了
  16. VMware16安装过程分享
  17. 基于Java超市管理系统/超市收银系统
  18. Office 2013/Access 2013 连接字符串/connstr/connection string 解决方法/办法
  19. 微信的解构与建构之一:微信的诞生
  20. 开放银行潜在风险不可忽视,看F5如何应对?

热门文章

  1. 最新面试必问:怎么写一个又好又快的日志库
  2. Prometheus监控运维实战十: 主机监控指标
  3. 绿色数据中心案例介绍:阿里巴巴、华为、电信、移动……
  4. Dedeeims留言板发邮件通知网站管理员
  5. 捕获计算机屏幕++方法,在Mac上捕获屏幕截图的五种简单方式
  6. Windows10 C盘如何扩容【10min内解决】
  7. windows/Linux c++ 获取CMD指令执行的返回结果
  8. JQuery 转自七米
  9. 整理:JVM基本结构
  10. 【心理咨询师考试笔记】基础理论(三)——社会心理学