深度学习之安卓实验

在这里插入图片描述没有苹果开发环境,也没有安卓手机,于是捣鼓捣鼓找到了一条模拟器开发安卓的方法,安卓用的就是linux内核,所以ubutnu下安卓开发环境还是很容易的,主要的就是java环境OpenJDK,Android SDK,NDK,安装Android Studio,将sdk跟ndk配置到环境变量中(sudo gedit ~/.bashrc)

#需改成自己相对应的路径
#jdk path
export JAVA_HOME=/opt/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

export ANDROID_SDK_HOME=/home/wcx/code/android-sdk-linux
export PATH=$PATH:${ANDROID_SDK_HOME}/tools
export PATH=$PATH:${ANDROID_SDK_HOME}/platform-tools
export ANDROID_HOME=/root/Android/Sdk/ 
export PATH=${PATH}:/root/Android/Sdk/tools/ 
export ANDROID_AVD_HOME=/root/.android/avd/
#set NDK env
export NDK_HOME=/home/wcx/code/tensorflow-master/android-ndk-r16b
export PATH=$NDK_HOME:$PATH

export PATH="$PATH:$HOME/bin"

Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。下图所示为 Android 平台的主要组件。
在这里插入图片描述

Bazel是Google自己的构建工具,现在公开了Beta版本。Bazel内置了对构建客户端和服务端软件的支持,包括Android和iOS平台客户端应用程序。它也提供了一个可扩展的框架,可以用来开发你自己的构建规则。
为什么使用Bazel?
速度:通过Bazel优化的依赖性分析、高速缓存和对构建操作的并行执行,你可以得到快速、干净的构建。
可扩展性:在Google,Bazel被成千上万的工程师用来构建重型的,关键的基础设施服务,以及Web应用程序。但是Bazel也适合用来构建较小的项目.
灵活性:一套全面的、内置的规则可以你在各种语言和平台上构建软件,而不是在特定的某种语言或者平台上。Skylark是Bazel的可扩展的规则框架,它允许你为其他语言和平台开发并分享你自己的构建规则。
正确性:Bazel通过检查你的依赖图中源文件的内容,而不仅仅是时间戳,来决定何时重新构建你的程序。因为增量构建几乎总是正确的,所以没有必要为了“万一”的情况来运行一个纯净的build,用以确保正确性。
可靠性:当你用Bazel构建你的软件时,你正在运行在Google的工程师环境中已经完善和测试多年的相同的代码。
重复性:构建只使用那些在构建文件中被显示声明的输入文件。在Linux中,Bazel在一个沙盒中运行相关的工具,这个沙盒只包含最小的必要的文件。即使测试都是在沙盒中运行,这确保了可预测的、和环境无关的结果。

Android Emulator可以模拟设备并将其显示在开发计算机上。利用该模拟器,可以对 Android 应用进行原型设计、开发和测试,无需使用硬件设备。
Gradle 是一个能通过插件形式自定义构建逻辑的优秀构建工具。
以下的一些特性让我们选择了 Gradle:
使用领域专用语言(DSL)来描述和控制构建逻辑
构建文件基于 Groovy,并允许通过 DSL 来声明元素、使用代码操作 DSL 元素这样的混合方式来自定义构建逻辑
内置了 Maven 和 Ivy 来进行依赖管理
相当灵活。允许使用最好的实现,但是不会强制实现的形式
插件可以提供它们的 DSL 和 API 来定义构建文件
优秀的 API 工具与 IDE 集成

编译的话可以用本地Bazel(google),Android Studio(Gradle),还有eclipse,这里本人尝试了bazel遇到的版本问题不好解决,推荐用Android Studio。

环境搭建好了,就可以跟着官方开发文档构建第一个安卓应用了。当然,想认真从头开始学,就跟着文档构建简单的界面,响应屏幕等等,这里我没有实际需求,本着拿来主义的思想,直接从github上找了tensorflow源码
这里分析一下安卓源码的结构
abi-api 应用程序二进制接口
art ART运行环境文件夹
Bionic - Google自己开发的安卓C运行库。 在这个文件夹下你可以找到c库的源码,如数学计算和其他的一些核心运行C库源码。(注:一般Linux系统使用glibc, bionic主要以BSD许可形式开源,它仅有200KB是glibc的一半,有更高的效率和低内存占用,更适合移动设备)
Bootable - 引导 和 启动相关代码。它对广大设备厂商来说是一个福音,很多设备的boot loaders实行这种fastboot协议,比如Nexus One。
Build - 编译系统的实现包含系统所有的核心makefile模板。其中一个很有用的文件 envsetup.sh 可以帮你设定环境变量,编译专有模块和检索一下源码文件。
Cts - 兼容性测试套件标准。这个测试套确保编译过程符合Android规格。
Dalvik - Dalvik Java虚拟机的实现源码。
Development - 开发相关的一些源码,如sdk、ndk工具。
Device - 这里包括硬件模块代码,不同设备,内容也不同。
External - 包含所有开源项目的相关文档,如SQLite, Freetype, Webkit 等。
Frameworks - Android框架源码。在这里可以找到Android最核心的实现,比如 包和Activity的管理等。许多的Java与native库映射的api也在这里实现。初期学习源码我们主要关注这个目录下内容。
Hardware - 硬件相关源码,如Android硬件抽象层的实现和规范。这个文件夹还包括所涉及的通信模块实现。
libcore - 核心java库,大部分内容曲子Apache Harmony的类库子集。Apache Harmony虚拟机间接催生了Davilk虚拟机。
libnativehelper - JNI使用的帮助函数
Out - 运行make后生成的一些文件。
Packages - 包含系统默认应用的源码,如联系人、日历、浏览器等。
Prebuilt - 为方便而提前编译好的二进制文件。
System - Android系统核心的源码文件。这是在Dalvik虚拟机和所有java启动前所能运行的最小Linux系统。里面包括init进程、默认的init.rc 脚本等,是用c实现的。
tools - 工具文件夹,不同IDE工具
vendor-厂商定制代码
Makefile-全局的Makefile,用来定义编译规则

Android Studio编译非常简单,点击run报错会直接告诉你缺什么,直接点链接装上就行,编译成功后会生成apk,装到安卓手机上就能用(amazing),tensorflow的更新很快,github上也有很多好玩的项目,这只是安卓应用的初步尝试,希望这篇文档能对学深度学习的同学在安卓开发上有所帮助。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值