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 <签名后的文件名> <未签名的文件名> <别名>
签名完毕,可正常安装。