docs
This commit is contained in:
164
README.md
Normal file
164
README.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# Android Builder
|
||||
|
||||
A Docker image for building Android applications with Kotlin support. Includes Android SDK, build tools, and Java 17.
|
||||
|
||||
## Features
|
||||
|
||||
- **Debian Stable** base image
|
||||
- **Java 17** (OpenJDK)
|
||||
- **Android SDK** with latest command line tools
|
||||
- **Android API 35** and Build Tools 35.0.0
|
||||
- **NDK** support
|
||||
- Network access for dependency downloads
|
||||
- Ready for CI/CD pipelines
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Using with Docker Compose
|
||||
|
||||
Create a `compose.yml` in your Android project:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
release:
|
||||
image: android-builder:latest
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./release:/release
|
||||
- .:/source
|
||||
- ./path/to/your/keystore.jks:/tmp/key.jks:ro
|
||||
environment:
|
||||
- KEYSTORE_PASSWORD=your_keystore_password
|
||||
- KEY_ALIAS=your_key_alias
|
||||
- KEY_PASSWORD=your_key_password
|
||||
```
|
||||
|
||||
Run the build:
|
||||
```bash
|
||||
docker compose run --rm release
|
||||
```
|
||||
|
||||
### Using with Docker Run
|
||||
|
||||
```bash
|
||||
docker run --rm \
|
||||
--network host \
|
||||
-v $(pwd):/source \
|
||||
-v $(pwd)/release:/release \
|
||||
-v $(pwd)/keystore.jks:/tmp/key.jks:ro \
|
||||
-e KEYSTORE_PASSWORD=your_password \
|
||||
-e KEY_ALIAS=your_alias \
|
||||
-e KEY_PASSWORD=your_key_password \
|
||||
android-builder:latest
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Required |
|
||||
|----------|-------------|----------|
|
||||
| `KEYSTORE_PASSWORD` | Password for your Android keystore | Yes (for signed builds) |
|
||||
| `KEY_ALIAS` | Alias of the key in your keystore | Yes (for signed builds) |
|
||||
| `KEY_PASSWORD` | Password for the specific key | Yes (for signed builds) |
|
||||
|
||||
## Volume Mounts
|
||||
|
||||
| Host Path | Container Path | Description |
|
||||
|-----------|----------------|-------------|
|
||||
| Your project root | `/source` | Android project source code |
|
||||
| Output directory | `/release` | Where built APKs will be placed |
|
||||
| Your keystore file | `/tmp/key.jks` | Android signing keystore (read-only) |
|
||||
|
||||
## Gradle Configuration
|
||||
|
||||
For signed builds, configure your `app/build.gradle.kts`:
|
||||
|
||||
```kotlin
|
||||
android {
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
storeFile = file("/tmp/key.jks")
|
||||
storePassword = System.getenv("KEYSTORE_PASSWORD")
|
||||
keyAlias = System.getenv("KEY_ALIAS")
|
||||
keyPassword = System.getenv("KEY_PASSWORD")
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
// ... other release config
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Build Process
|
||||
|
||||
The container will:
|
||||
1. Make `gradlew` executable
|
||||
2. Run `./gradlew assembleRelease`
|
||||
3. Copy built APKs to `/release` directory
|
||||
|
||||
## Output
|
||||
|
||||
After building, you'll find your APKs in the mounted release directory:
|
||||
- `app-release.apk` - Signed release APK (if keystore provided)
|
||||
- Debug APKs (if building debug variants)
|
||||
|
||||
## Creating a Keystore
|
||||
|
||||
If you don't have a keystore yet:
|
||||
|
||||
```bash
|
||||
keytool -genkey -v -keystore keystore.jks \
|
||||
-alias your_alias \
|
||||
-keyalg RSA \
|
||||
-keysize 2048 \
|
||||
-validity 10000
|
||||
```
|
||||
|
||||
## Supported Android Versions
|
||||
|
||||
- **Target SDK**: 35
|
||||
- **Min SDK**: Depends on your project
|
||||
- **Build Tools**: 35.0.0
|
||||
- **NDK**: 26.1.10909125
|
||||
|
||||
## Building the Image
|
||||
|
||||
```bash
|
||||
docker build -t android-builder:latest .
|
||||
```
|
||||
|
||||
## CI/CD Usage
|
||||
|
||||
This image is perfect for CI/CD pipelines. Example for Gitea Actions:
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: android-builder:latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build APK
|
||||
run: |
|
||||
chmod +x ./gradlew
|
||||
./gradlew assembleRelease
|
||||
env:
|
||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Network Issues
|
||||
If you get `UnknownHostException`, ensure you're using `network_mode: host` in Docker Compose or `--network host` with Docker run.
|
||||
|
||||
### Permission Issues
|
||||
The container runs as root. If you have permission issues with output files, you may need to adjust file ownership after build.
|
||||
|
||||
### Keystore Not Found
|
||||
Ensure your keystore path is correct and the file exists on the host system before mounting.
|
Reference in New Issue
Block a user