Skip to content

Commit d6fee5a

Browse files
IvanKobzarevfmassa
andauthored
[android][circle_ci] android build job (#3679)
Co-authored-by: Francisco Massa <[email protected]>
1 parent 5339e63 commit d6fee5a

File tree

10 files changed

+214
-5
lines changed

10 files changed

+214
-5
lines changed

.circleci/config.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,14 @@ torchvision_ios_params: &torchvision_ios_params
160160
IOS_ARCH: << parameters.ios_arch >>
161161
IOS_PLATFORM: << parameters.ios_platform >>
162162

163+
torchvision_android_params: &torchvision_android_params
164+
parameters:
165+
build_environment:
166+
type: string
167+
default: ""
168+
environment:
169+
BUILD_ENVIRONMENT: << parameters.build_environment >>
170+
163171
smoke_test_common: &smoke_test_common
164172
<<: *binary_common
165173
docker:
@@ -394,6 +402,42 @@ jobs:
394402
cat "$script"
395403
source "$script"
396404
405+
binary_android_build:
406+
<<: *torchvision_android_params
407+
docker:
408+
- image: circleci/android:api-29-ndk
409+
resource_class: xlarge
410+
steps:
411+
- attach_workspace:
412+
at: ~/workspace
413+
- checkout
414+
- run:
415+
name: Build
416+
no_output_timeout: "1h"
417+
command: |
418+
script="/home/circleci/project/.circleci/unittest/android/scripts/binary_android_build.sh"
419+
cat "$script"
420+
source "$script"
421+
- store_artifacts:
422+
path: ~/workspace/artifacts
423+
424+
binary_android_upload:
425+
<<: *torchvision_android_params
426+
docker:
427+
- image: circleci/android:api-29-ndk
428+
resource_class: xlarge
429+
steps:
430+
- attach_workspace:
431+
at: ~/workspace
432+
- checkout
433+
- run:
434+
name: Upload
435+
no_output_timeout: "1h"
436+
command: |
437+
script="/home/circleci/project/.circleci/unittest/android/scripts/binary_android_upload.sh"
438+
cat "$script"
439+
source "$script"
440+
397441
binary_macos_conda:
398442
<<: *binary_common
399443
macos:
@@ -1506,6 +1550,9 @@ workflows:
15061550
ios_arch: arm64
15071551
ios_platform: OS
15081552
name: binary_libtorchvision_ops_ios_12.0.0_arm64
1553+
- binary_android_build:
1554+
build_environment: binary-libtorchvision_ops-android
1555+
name: binary_libtorchvision_ops_android
15091556

15101557
unittest:
15111558
jobs:
@@ -1681,6 +1728,14 @@ workflows:
16811728
requires:
16821729
- nightly_binary_libtorchvision_ops_ios_12.0.0_x86_64
16831730
- nightly_binary_libtorchvision_ops_ios_12.0.0_arm64
1731+
- binary_android_upload:
1732+
build_environment: nightly-binary-libtorchvision_ops-android-upload
1733+
context: org-member
1734+
filters:
1735+
branches:
1736+
only:
1737+
- nightly
1738+
name: nightly_binary_libtorchvision_ops_android_upload
16841739
- binary_linux_wheel:
16851740
conda_docker_image: pytorch/conda-builder:cpu
16861741
cu_version: cpu

.circleci/config.yml.in

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,14 @@ torchvision_ios_params: &torchvision_ios_params
160160
IOS_ARCH: << parameters.ios_arch >>
161161
IOS_PLATFORM: << parameters.ios_platform >>
162162

163+
torchvision_android_params: &torchvision_android_params
164+
parameters:
165+
build_environment:
166+
type: string
167+
default: ""
168+
environment:
169+
BUILD_ENVIRONMENT: << parameters.build_environment >>
170+
163171
smoke_test_common: &smoke_test_common
164172
<<: *binary_common
165173
docker:
@@ -394,6 +402,42 @@ jobs:
394402
cat "$script"
395403
source "$script"
396404

405+
binary_android_build:
406+
<<: *torchvision_android_params
407+
docker:
408+
- image: circleci/android:api-29-ndk
409+
resource_class: xlarge
410+
steps:
411+
- attach_workspace:
412+
at: ~/workspace
413+
- checkout
414+
- run:
415+
name: Build
416+
no_output_timeout: "1h"
417+
command: |
418+
script="/home/circleci/project/.circleci/unittest/android/scripts/binary_android_build.sh"
419+
cat "$script"
420+
source "$script"
421+
- store_artifacts:
422+
path: ~/workspace/artifacts
423+
424+
binary_android_upload:
425+
<<: *torchvision_android_params
426+
docker:
427+
- image: circleci/android:api-29-ndk
428+
resource_class: xlarge
429+
steps:
430+
- attach_workspace:
431+
at: ~/workspace
432+
- checkout
433+
- run:
434+
name: Upload
435+
no_output_timeout: "1h"
436+
command: |
437+
script="/home/circleci/project/.circleci/unittest/android/scripts/binary_android_upload.sh"
438+
cat "$script"
439+
source "$script"
440+
397441
binary_macos_conda:
398442
<<: *binary_common
399443
macos:
@@ -934,6 +978,7 @@ workflows:
934978
- torchhub_test
935979
- torch_onnx_test
936980
{{ ios_workflows() }}
981+
{{ android_workflows() }}
937982

938983
unittest:
939984
jobs:
@@ -954,6 +999,7 @@ workflows:
954999
- torchhub_test
9551000
- torch_onnx_test
9561001
{{ ios_workflows(nightly=True) }}
1002+
{{ android_workflows(nightly=True) }}
9571003
{{ build_workflows(prefix="nightly_", filter_branch="nightly", upload=True) }}
9581004
docker_build:
9591005
triggers:

.circleci/regenerate.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,32 @@ def ios_workflows(indentation=6, nightly=False):
291291
return indent(indentation, jobs)
292292

293293

294+
def android_workflows(indentation=6, nightly=False):
295+
jobs = []
296+
build_job_names = []
297+
name_prefix = "nightly_" if nightly else ""
298+
env_prefix = "nightly-" if nightly else ""
299+
300+
name = f'{name_prefix}binary_libtorchvision_ops_android'
301+
build_job_names.append(name)
302+
build_job = {
303+
'build_environment': f'{env_prefix}binary-libtorchvision_ops-android',
304+
'name': name,
305+
}
306+
307+
if nightly:
308+
upload_job = {
309+
'build_environment': f'{env_prefix}binary-libtorchvision_ops-android-upload',
310+
'context': 'org-member',
311+
'filters': gen_filter_branch_tree('nightly'),
312+
'name': f'{name_prefix}binary_libtorchvision_ops_android_upload'
313+
}
314+
jobs.append({'binary_android_upload': upload_job})
315+
else:
316+
jobs.append({'binary_android_build': build_job})
317+
return indent(indentation, jobs)
318+
319+
294320
if __name__ == "__main__":
295321
d = os.path.dirname(__file__)
296322
env = jinja2.Environment(
@@ -306,4 +332,5 @@ def ios_workflows(indentation=6, nightly=False):
306332
unittest_workflows=unittest_workflows,
307333
cmake_workflows=cmake_workflows,
308334
ios_workflows=ios_workflows,
335+
android_workflows=android_workflows,
309336
))
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/bash
2+
set -ex -o pipefail
3+
4+
echo "DIR: $(pwd)"
5+
echo "ANDROID_HOME=${ANDROID_HOME}"
6+
echo "ANDROID_NDK_HOME=${ANDROID_NDK_HOME}"
7+
echo "JAVA_HOME=${JAVA_HOME}"
8+
9+
WORKSPACE=/home/circleci/workspace
10+
VISION_ANDROID=/home/circleci/project/android
11+
12+
. /home/circleci/project/.circleci/unittest/android/scripts/install_gradle.sh
13+
14+
GRADLE_LOCAL_PROPERTIES=${VISION_ANDROID}/local.properties
15+
rm -f $GRADLE_LOCAL_PROPERTIES
16+
17+
echo "sdk.dir=${ANDROID_HOME}" >> $GRADLE_LOCAL_PROPERTIES
18+
echo "ndk.dir=${ANDROID_NDK_HOME}" >> $GRADLE_LOCAL_PROPERTIES
19+
20+
echo "GRADLE_PATH $GRADLE_PATH"
21+
echo "GRADLE_HOME $GRADLE_HOME"
22+
23+
${GRADLE_PATH} --scan --stacktrace --debug --no-daemon -p ${VISION_ANDROID} assemble || true
24+
25+
mkdir -p ~/workspace/artifacts
26+
find . -type f -name *aar -print | xargs tar cfvz ~/workspace/artifacts/artifacts-aars.tgz
27+
find . -type f -name *apk -print | xargs tar cfvz ~/workspace/artifacts/artifacts-apks.tgz
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
set -ex -o pipefail
3+
4+
echo "DIR: $(pwd)"
5+
echo "ANDROID_HOME=${ANDROID_HOME}"
6+
echo "ANDROID_NDK_HOME=${ANDROID_NDK_HOME}"
7+
echo "JAVA_HOME=${JAVA_HOME}"
8+
9+
WORKSPACE=/home/circleci/workspace
10+
VISION_ANDROID=/home/circleci/project/android
11+
12+
. /home/circleci/project/.circleci/unittest/android/scripts/install_gradle.sh
13+
14+
GRADLE_LOCAL_PROPERTIES=${VISION_ANDROID}/local.properties
15+
rm -f $GRADLE_LOCAL_PROPERTIES
16+
GRADLE_PROPERTIES=/home/circleci/project/android/gradle.properties
17+
18+
echo "sdk.dir=${ANDROID_HOME}" >> $GRADLE_LOCAL_PROPERTIES
19+
echo "ndk.dir=${ANDROID_NDK_HOME}" >> $GRADLE_LOCAL_PROPERTIES
20+
21+
echo "SONATYPE_NEXUS_USERNAME=${SONATYPE_NEXUS_USERNAME}" >> $GRADLE_PROPERTIES
22+
echo "mavenCentralRepositoryUsername=${SONATYPE_NEXUS_USERNAME}" >> $GRADLE_PROPERTIES
23+
echo "SONATYPE_NEXUS_PASSWORD=${SONATYPE_NEXUS_PASSWORD}" >> $GRADLE_PROPERTIES
24+
echo "mavenCentralRepositoryPassword=${SONATYPE_NEXUS_PASSWORD}" >> $GRADLE_PROPERTIES
25+
26+
echo "signing.keyId=${ANDROID_SIGN_KEY}" >> $GRADLE_PROPERTIES
27+
echo "signing.password=${ANDROID_SIGN_PASS}" >> $GRADLE_PROPERTIES
28+
29+
cat /home/circleci/project/android/gradle.properties | grep VERSION
30+
31+
${GRADLE_PATH} --scan --stacktrace --debug --no-daemon -p ${VISION_ANDROID} ops:uploadArchives
32+
33+
mkdir -p ~/workspace/artifacts
34+
find . -type f -name *aar -print | xargs tar cfvz ~/workspace/artifacts/artifacts-aars.tgz
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash
2+
set -ex
3+
4+
_https_amazon_aws=https://ossci-android.s3.amazonaws.com
5+
GRADLE_VERSION=6.8.3
6+
7+
_gradle_home=/opt/gradle
8+
sudo rm -rf $gradle_home
9+
sudo mkdir -p $_gradle_home
10+
11+
curl --silent --output /tmp/gradle.zip --retry 3 $_https_amazon_aws/gradle-${GRADLE_VERSION}-bin.zip
12+
13+
sudo unzip -q /tmp/gradle.zip -d $_gradle_home
14+
rm /tmp/gradle.zip
15+
16+
sudo chmod -R 777 $_gradle_home
17+
18+
export GRADLE_HOME=$_gradle_home/gradle-$GRADLE_VERSION
19+
export GRADLE_PATH=${GRADLE_HOME}/bin/gradle

android/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ allprojects {
1515
androidSupportAppCompatV7Version = "28.0.0"
1616
fbjniJavaOnlyVersion = "0.0.3"
1717
soLoaderNativeLoaderVersion = "0.8.0"
18+
pytorchAndroidVersion = "1.9.0-SNAPSHOT"
1819
}
1920

2021
repositories {

android/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ android.enableJetifier=true
2121

2222
testAppAllVariantsEnabled=false
2323

24-
org.gradle.jvmargs=-Xmx4096m
24+
org.gradle.jvmargs=-Xmx12g

android/ops/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ android {
5555
dependencies {
5656
implementation 'com.android.support:appcompat-v7:' + rootProject.androidSupportAppCompatV7Version
5757

58-
implementation 'org.pytorch:pytorch_android:1.8.0-SNAPSHOT'
59-
extractForNativeBuild 'org.pytorch:pytorch_android:1.8.0-SNAPSHOT'
58+
extractForNativeBuild "org.pytorch:pytorch_android:$pytorchAndroidVersion"
6059

6160
// For testing: deps on local aar files
6261
//implementation(name: 'pytorch_android-release', ext: 'aar')

android/test_app/app/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ android {
7575
}
7676
packagingOptions {
7777
doNotStrip '**.so'
78+
pickFirst '**.so'
7879
}
7980

8081
// Filtering for CI
@@ -101,8 +102,8 @@ dependencies {
101102
implementation 'com.facebook.soloader:nativeloader:0.8.0'
102103
localImplementation project(':ops')
103104

104-
implementation 'org.pytorch:pytorch_android:1.8.0-SNAPSHOT'
105-
implementation 'org.pytorch:pytorch_android_torchvision:1.8.0-SNAPSHOT'
105+
implementation "org.pytorch:pytorch_android:$pytorchAndroidVersion"
106+
implementation "org.pytorch:pytorch_android_torchvision:$pytorchAndroidVersion"
106107

107108
aarImplementation(name: 'pytorch_android-release', ext: 'aar')
108109
aarImplementation(name: 'pytorch_android_torchvision-release', ext: 'aar')

0 commit comments

Comments
 (0)