[编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP

April 18, 2020 6:54 AM – BEAUTIFULZZZZ

0 前言

在上上篇《[编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP》中我写了一个基于VIM(记事本)开发安卓APP的介绍,并且用类似的方法开源了很多小DEMO:

  • [01] HelloAndroid: hello world demo
  • [02] BluetoorhScan: bluetooth scan + surface(canvas) + handler + bundle
  • [03] FlyGame: surface(canvas) + fly game demo
  • [04] ListView: ListView DIY demo
  • [05] GridView: GridView DIY demo
  • [06] TuyaMeshTest: ble scan(fast scan) + textview
  • [07] SmartStepCounter: bluetooth scan connect read + line chart
  • [08] SmartFan: bluetooth scan connect write

GitHub:https://github.com/nbtool/android_app_linux_tool

但是随着工程越来越复杂,采用java、aapt去操作使全自动run.sh脚本越来越难写(特别是有些lib库很难找准,有些lib除了库之外还有资源文件,就更复杂了),因此,这里引入一个更先进的工具:gradle。

本文主要介绍gradle的安装、命令行的用法、给出一个基于gradle的全自动脚本run.sh,以及一个小DEMO(这里的全自动是:全自动构建安卓开发环境,全自动编译安装运行到设备)

1 gradle 安装配置

1.1 卸载系统默认装的gradle

sudo pacman -R gradle

.

1.2 下载对应版本的二进制文件

gradle所有版本的下载地址:https://gradle.org/releases/

➜  Downloads wget https://downloads.gradle-dn.com/distributions/gradle-2.14.1-bin.zip
➜  Downloads unzip gradle-2.14.1-bin.zip
➜  Downloads cd gradle-2.14.1
➜  gradle-2.14.1 pwd
/home/btfz/Downloads/gradle-2.14.1

.

1.3 配置gradle:

注:看文件夹下的getting-started.html文件

export GRADLE_HOME=/home/btfz/Downloads/gradle-2.14.1
export PATH=$PATH:$GRADLE_HOME/bin

.

1.4 检查配置

在工程根目录的 SDK Location 配置文件 local.properties中:
sdk.dir=D\:\\develop\\AndroidSDK改为自己系统正确的样子: sdk.dir=/home/btfz/Android/Sdk

在工程根目录的 Project 配置文件 build.gradle中:(暂不需要修改)

在工程根目录向里进一层的目录的 Module 配置文件 build.gradle中:
将诸如SDK和编译工具的版本写成对应的版本:

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"

对应关系如下:

[编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP

.

1.5 gradle 命令行操作

gradle -v 查看当前gradle版本
gradle clean 将会去下载gradle的一些依赖包
gradle build 编译生成apk

注:有时候直接用build打包会报错,因为要配置一些打包相关的东西,如果调试用,可以先用: gradle assembleDebug 编译并打Debug包,不要用 gradle assembleRelease 编译并打Release的包(后续会写为什么用build和打release不行)。

2 全自动脚本编写

2.1 自动构建安卓开发环境

判断是否有android SDK,如果没有,则下载一个android SDK;
下载好android SDK后,可以利用其中的SDKMANAGER工具,安装platforms和build-tools(这两个有很多个版本,找到适合自己的);
判断对应版本的gradle是否存在,如果不存在,则从远端下载对应版本;

function tool(){
    #export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

    if [ ! -d $ANDROID_SDK_PATH ]; then
        #download tool
        echo "> download tool...."
        wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
        mkdir -p $ANDROID_SDK_PATH
        unzip sdk-tools-linux-3859397.zip -d $ANDROID_SDK_PATH
        rm -rf sdk-tools-linux-3859397.zip
        sudo chmod 777 -R $ANDROID_SDK_PATH
    fi

    #install sdk build-tools platform
    echo "> install sdk build-tools platform...."
    echo $SDKMANAGER
    $SDKMANAGER "platform-tools" "platforms;android-$ANDROID_PLATFORM_VERSION"
    $SDKMANAGER "platform-tools" "build-tools;$ANDROID_BUILD_TOOLS_VERSION"
    $SDKMANAGER --list

    if [ ! -d $GRADLE_PATH ];then
        #download gredle
        echo "> download gredle..."
        wget https://downloads.gradle-dn.com/distributions/gradle-$GRADLE_VERSION-bin.zip
        unzip gradle-$GRADLE_VERSION-bin.zip -d $TOOL_PATH
        rm -rf gradle-$GRADLE_VERSION-bin.zip
    fi
}

.

2.2 编译、运行、清除

借助于gradle,实现编译、清除比较方便,写入设备还是用adb:

function build(){
    export GRADLE_HOME=$GRADLE_PATH
    export PATH=$PATH:$GRADLE_HOME/bin
    gradle clean
    gradle assembleDebug
}

function clean(){
    echo "Cleaning..."
    rm -rf build
    rm -rf $PROJECT_ROOT/example/$PROJECT_NAME/$MODULE_NAME/build
}

function program(){
    echo "Launching..."
    adb install -r $APK_PATH/*.apk
    adb shell am start -n  com.telink.lt/.ui.AdvDeviceListActivity
}

3 效果展示

[编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP
本项目的github关注起来https://github.com/nbtool/android_app_linux_tool~ 大家觉得不错,可以点推荐给更多人~

[1].Android Studio 命令行Gradle编译
[[2].BLE_826X_Generic]] #2
[3].21、android studio 疑难杂症

Original: https://www.cnblogs.com/zjutlitao/p/12723855.html
Author: beautifulzzzz
Title: [编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585669/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Docker镜像管理基础

    Docker镜像管理基础 1、镜像的概念 镜像可以理解为应用程序的集装箱,而docker用来装卸集装箱。 docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启…

    Linux 2023年6月7日
    0116
  • Springboot整合redis

    原文链接:https://blog.csdn.net/SDDDLLL/article/details/103703627 去年学习的Redis,刚刚学习完就迫不及待的在实战中用了一…

    Linux 2023年5月28日
    0105
  • Go语言中的零值坑记

    开箱即用 什么叫开箱即用呢?因为 Go语言的零值让程序变得更简单了,有些场景我们不需要显示初始化就可以直接用,举几个例子: 切片,他的零值是 nil,即使不用 make进行初始化也…

    Linux 2023年6月6日
    0122
  • 【C++基础】数据类型

    C++规定在创建一个变量或者产量时,必须要指定相应的数据类型,否则无法给变量分配内存空间 数据类型的存在意义:给变量分配合适的内存空间 整型 作用:整型变量表示的是整数类型的数据 …

    Linux 2023年6月13日
    099
  • Ubuntu20.04桌面版 使用root账号登录

    sodu -i 执行命令,输入当前用户密码,临时切换到root身份 执行passwd命令,修改root登录密码 passwd 修改50-ubuntu.conf文件 执行如下命令: …

    Linux 2023年6月13日
    095
  • MySQL 知识点总结(简易版)

    MySQL 总结(简易版) 基本语法 0. 1基本语法 登录MySQL $ mysql -u root -p12345612 &…

    Linux 2023年6月7日
    0105
  • Gitlab 403 forbidden 并发引起IP被封

    问题 在工作中自搭建的Gitlab。但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden。 原因 Gitlab使用rack_attack做了并发访问的限制。 解…

    Linux 2023年6月14日
    085
  • SDS Redis 自定义字符串底层结构

    1、什么是SDS? Redis 自定的字符串存储结构,关于redis,你需要了解的几点!中我们对此有过简要说明。 Redis 底层是用C语言编写的,可是在字符存储上,并未使用C原生…

    Linux 2023年5月28日
    099
  • SWAP交换分区扩容

    第一章 扩容当前swap 交换分区 注:这种需要停止当前业务,否则会产生影响 [17:09:31 root@libin3 ~]# free -h total used free s…

    Linux 2023年6月13日
    096
  • 洛谷P3372–线段树代码模板1

    时空限制:1000ms,128M 数据规模: 对于30%的数据:N Original: https://www.cnblogs.com/ygsworld/p/11279732.ht…

    Linux 2023年6月7日
    0127
  • Redis学习手册(Sorted-Sets数据类型)

    一、概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有…

    Linux 2023年5月28日
    086
  • QT编程中的char*,wchar_t*与QString之间的转换

    //QString to wchar_t:const wchar_t * encodedName = reinterpret_cast Original: https://www….

    Linux 2023年6月14日
    088
  • 为Linux系统添加定时备份Mysql(Docker)指定数据库的方法

    引言使用Mysql的时候遇到需要定时备份数据库的问题,但苦于Mysql自身没有提供直接的工具。 安装7z的目的主要是用于对数据库备份后的文件的压缩和加密。如果不需要也可以跳过此步骤…

    Linux 2023年6月14日
    0110
  • Linux系统编程—信号捕捉

    前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式; 忽略; 捕捉。 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作…

    Linux 2023年6月14日
    0126
  • Hystrix 源码解读

    转载请注明出处: 1.引入依赖: 2. 查看自动配置类HystrixCircuitBreakerConfiguration 查看 org.springframework.cloud…

    Linux 2023年6月14日
    0103
  • 关于python3 sqlite3模块打开数据库报错unable to open database file解决方案

    一、运行环境 1、操作系统: windows 102、python版本: python3.63、编辑器: vscode 二、报错截图 使用绝对路径打开sqlite数据库时报错如下所…

    Linux 2023年6月8日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球