当前位置: 首页 > article >正文

Ubuntu中使用纯命令行进行Android开发

安装JDK

sudo apt install openjdk-8-jdk

注意本文采用jdk1.8,因为后文设置的android版本太低。

安装Android命令行工具和SDK(不可用):

访问https://developer.android.google.cn/studio,拉到最底下,找到“仅限命令行工具”,选择Linux下载即可。

下载后,在Linux下新建文件夹,把这个压缩包弄进去,然后解压:

unzip commandlinetools-linux-11076708_latest.zip

接下来进入cmdlines-tools目录,新建一个latest目录,将解压后的所有文件移到该目录:

mkdir latest
mv * latest

注意mv会将除latest外所有文件移入latest,当移动latest时会报错,但此时已经完成了移动。

接下来进入latest下的bin目录,输入:

./sdkmanager --list

这将列出所有可安装的Android工具。

这里我们安装最新版的build-tools和platforms:

./sdkmanage "build-tools;35.0.0"
./sdkmanager "platforms;android-35"

走到这一步,就卡住了,来看Android文档是咋说的:Android Studio | Android Developers

创建和更新 Android 项目。(现已改用 Android Studio 完成。)

因此,在这里面,我们需要安装旧版的Android SDK,而非新版的命令行工具。

安装Android SDK

下载:

wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz

解压:

tar xzvf android-sdk_r24.4.1-linux.tgz

配置环境变量,打开~/.bashrc文件,在最后写入:

export ANDROID_HOME=<你的Android SDK路径>
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

然后source一下:

source ~/.bashrc

还没完,这时候应该进入可以打开图形界面的系统(或X11转发),直接输入命令:

android

然后再在弹出的图形化界面中安装build-tools和platform-tools。这里Android已经给我们选好了,直接点“install”即可。

然后点击每一个父项目,点“Accept license”即可。

安装Gradle及Android插件

建议使用GitHub下载加速网站GitHub 文件加速直接访问下载:https://github.com/gradle/gradle-distributions/releases/download/v8.11.0/gradle-8.11-bin.zip。然后解压:

unzip gradle-8.11-bin.zip

然后设置GRADLE_HOME和PATH环境变量:

vim ~/.bashrc

在最后写入:

export GRADLE_HOME<你的Gradle路径>
export PATH=$PATH:$GRADLE_HOME/bin

然后保存,更新:

source ~/.bashrc

创建一个项目

切换到新的文件夹,然后输入命令:

android create project [选项]

其中,选项解释如下:

  • -n --name:项目名称。
  • -a --activity:创建的默认活动的名称。[必填]
  • -k --package:应用程序的Android包名称。[必填]
  • -v --gradle版本:gradle安卓插件版本。
  • -t-target:新项目的目标ID。通过android list targets查看。[必填]
  • -g --gradle:使用gradle模板。若指定-g,则必须指定参数-v,即gradle安卓插件版本。
  • -p --path:新项目的目录。[必填]

如:

android create project -n demo -a MainActivity -k com.woyou.demo -t 1 -p . -g -v 4.0.0

运行完后,文件目录如下:

.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── src
    ├── androidTest
    │   └── java
    │       └── com
    │           └── woyou
    │               └── demo
    │                   └── MainActivityTest.java
    └── main
        ├── AndroidManifest.xml
        ├── java
        │   └── com
        │       └── woyou
        │           └── demo
        │               └── MainActivity.java
        └── res
            ├── drawable-hdpi
            │   └── ic_launcher.png
            ├── drawable-ldpi
            │   └── ic_launcher.png
            ├── drawable-mdpi
            │   └── ic_launcher.png
            ├── drawable-xhdpi
            │   └── ic_launcher.png
            ├── layout
            │   └── main.xml
            └── values
                └── strings.xml

打包

修改Android糟糕的Gradle配置

在打包之前,需要修改Android糟糕的Gradle配置,因此android命令早就不维护了:

打开gradle-wrapper,设置项目中gradle的版本和zip的网络地址:

#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-6.1.1-all.zip # 新增这一行

打开build.gradle,设置镜像仓库:

repositories {
        google()
        jcenter()
        maven { setUrl("https://maven.aliyun.com/repository/central") }
        maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
        maven { setUrl("https://maven.aliyun.com/repository/google") }
        maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
        maven { setUrl("https://maven.aliyun.com/repository/public") }
        maven { setUrl("https://jitpack.io") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/groups/public/") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/repositories/jcenter") }
        maven { setUrl("http://maven.aliyun.com/nexus/content/repositories/releases")}
        mavenCentral()
        gradlePluginPortal()
    }

然后将runProguard改成minifyEnabled:

minifyEnabled false
proguardFile getDefaultProguardFile('proguard-android.txt')

然后加上allprojects:

allprojects {
    repositories {
        google()
        jcenter()
        maven { setUrl("https://maven.aliyun.com/repository/central") }
        maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
        maven { setUrl("https://maven.aliyun.com/repository/google") }
        maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
        maven { setUrl("https://maven.aliyun.com/repository/public") }
        maven { setUrl("https://jitpack.io") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/groups/public/") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/repositories/jcenter") }
        maven { setUrl("http://maven.aliyun.com/nexus/content/repositories/releases")}
        mavenCentral()
        gradlePluginPortal()
    }
}

经过这些操作后,完整的build.gradle如下:

buildscript {
    repositories {
        google()
        jcenter()
        maven { setUrl("https://maven.aliyun.com/repository/central") }
        maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
        maven { setUrl("https://maven.aliyun.com/repository/google") }
        maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
        maven { setUrl("https://maven.aliyun.com/repository/public") }
        maven { setUrl("https://jitpack.io") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/groups/public/") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/repositories/jcenter") }
        maven { setUrl("http://maven.aliyun.com/nexus/content/repositories/releases")}
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
    }
}
apply plugin: 'android'

android {
    compileSdkVersion 'android-29'
    buildToolsVersion '29.0.3'
    buildTypes {
        release {
            minifyEnabled false
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { setUrl("https://maven.aliyun.com/repository/central") }
        maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
        maven { setUrl("https://maven.aliyun.com/repository/google") }
        maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
        maven { setUrl("https://maven.aliyun.com/repository/public") }
        maven { setUrl("https://jitpack.io") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/groups/public/") }
        maven { setUrl("https://maven.aliyun.com/nexus/content/repositories/jcenter") }
        maven { setUrl("http://maven.aliyun.com/nexus/content/repositories/releases")}
        mavenCentral()
        gradlePluginPortal()
    }
}

接下来输入命令:

./gradlew build

它将会输出两个apk文件,分别在build/outputs/apk/debug和build/outputs/apk/release内。debug版有Android的Debug签名,release则没有任何签名,因此无法安装,需要进行手动签名:

将apk拷出

cp build/outputs/apk/release/android_demo-release-unsigned.apk .

生成签名文件:

keytool -genkey -v -keystore <文件名(*.keystore)> -alias <别名> -keyalg RSA -validity <有效天数>

签名:

jarsigner -verbose -keystore <签名文件>  -signedjar <签名后的文件名> <未签名的文件名> <别名>

签名完毕,可正常安装。


http://www.kler.cn/a/394681.html

相关文章:

  • 前缀和技巧解析
  • react-redux useSelector钩子 学习样例 + 详细解析
  • 算法学习第一弹——C++基础
  • HBase 安装与基本操作指南
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)
  • HBase使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master
  • 【SQL】一文速通SQL
  • Spring Boot驱动的电子商务平台开发
  • 【go从零单排】SHA256 Hashes加密
  • 【已解决】git push一直提示输入用户名及密码、fatal: Could not read from remote repository的问题
  • 使用ensp配置单臂路由、静态路由,实现PC互相通信。
  • golang 实现比特币内核:从公钥创建wallet地址
  • 【缓存策略】你知道 Write Through(直写)这个缓存策略吗?
  • MySQL 的主从复制数据同步
  • 生成式GPT商品推荐:精准满足用户需求
  • 斯坦福iDP3——改进3D扩散策略以赋能人形机器人的训练:不再依赖相机校准和点云分割(含源码解析)
  • 计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop
  • STM32系统的GPIO原理与结构
  • Python爬虫项目 | 一、网易云音乐热歌榜歌曲
  • 基于混沌加密的遥感图像加密算法matlab仿真
  • SQL 分组查询中的非聚合列要求及实例解析
  • JavaScript调用系统自带的打印页面
  • 云服务器端口开放
  • MATLAB保存多帧图形为视频格式
  • 11个简单易用的电商购物车设计案例
  • MATLAB实现最大最小蚁群算法(Max-Min Ant Colony Optimization, MMAS)