diff --git a/.travis.yml b/.travis.yml index 33e715444df0ad71145d6162b5eaeae0f483b78f..0075bdb16b5f1553ac22f82991936d3e4708b2f9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,6 +65,7 @@ cache: before_install: + - openssl aes-256-cbc -K $encrypted_25db6eb7c3fd_key -iv $encrypted_25db6eb7c3fd_iv -in android/Google_Play_Android_Developer-bb93ae7d61ca.p12.enc -out android/Google_Play_Android_Developer-bb93ae7d61ca.p12 -d - cd ${TRAVIS_BUILD_DIR} && git fetch --unshallow && git fetch --tags - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then mkdir -p ~/.config/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/.config/QtProject/; fi - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then mkdir -p ~/Library/Preferences/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/Library/Preferences/QtProject/; fi @@ -111,6 +112,7 @@ before_script: - if [ "${CONFIG}" != "doxygen" ]; then qmake -r qgroundcontrol.pro CONFIG+=${CONFIG} CONFIG+=WarningsAsErrorsOn -spec ${SPEC}; fi script: + - ./tools/update_android_version.sh - echo 'Building QGroundControl' && echo -en 'travis_fold:start:script.1\\r' - if [ "${CONFIG}" != "doxygen" ]; then make -j4; fi - if [ "${CONFIG}" = "doxygen" ]; then cd src && doxygen documentation.dox; fi @@ -118,6 +120,9 @@ script: - if [[ "${TRAVIS_OS_NAME}" = "linux" && "${CONFIG}" = "debug" ]]; then ./debug/qgroundcontrol --unittest; fi - if [[ "${TRAVIS_OS_NAME}" = "osx" && "${CONFIG}" = "debug" ]]; then ./debug/qgroundcontrol.app/Contents/MacOS/qgroundcontrol --unittest; fi +after_success: + - if [[ "${TRAVIS_OS_NAME}" = "android" && "${TRAVIS_PULL_REQUEST}" = "false" && "${TRAVIS_BRANCH}" = "master" ]]; then ./tools/google_play_upload.py org.mavlink.qgroundcontrol release/package/qgroundcontrol.apk; fi + deploy: - provider: s3 access_key_id: AKIAIVORNALE7NHD3T6Q diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index f12cfaa2753b14b16c467d98c3bee141533d6e3c..954d43bc1fdb4ec4b2ae60877062eadcf72f2e37 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/android/Google_Play_Android_Developer-bb93ae7d61ca.p12.enc b/android/Google_Play_Android_Developer-bb93ae7d61ca.p12.enc new file mode 100644 index 0000000000000000000000000000000000000000..22c154d6fb4ad72b63667f87fba1aaf88b4e674a Binary files /dev/null and b/android/Google_Play_Android_Developer-bb93ae7d61ca.p12.enc differ diff --git a/tools/google_play_upload.py b/tools/google_play_upload.py new file mode 100755 index 0000000000000000000000000000000000000000..9d0ce41569ab37959eda7cd6a1eceeece9746c46 --- /dev/null +++ b/tools/google_play_upload.py @@ -0,0 +1,96 @@ +#!/usr/bin/python +# +# Copyright 2014 Marta Rodriguez. +# +# Licensed under the Apache License, Version 2.0 (the 'License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Uploads an apk to the beta track.""" + +import argparse + +from apiclient.discovery import build +import httplib2 +from oauth2client import client + +TRACK = 'beta' # Can be 'alpha', beta', 'production' or 'rollout' +SERVICE_ACCOUNT_EMAIL = ( + '868554619222-u4gvu4asjemc8n22o595j0fr2dg4012j@developer.gserviceaccount.com') + +# Declare command-line flags. +argparser = argparse.ArgumentParser(add_help=False) +argparser.add_argument('package_name', + help='The package name. Example: com.android.sample') +argparser.add_argument('apk_file', + nargs='?', + default='qgroundcontrol.apk', + help='The path to the APK file to upload.') + + +def main(): + # Load the key in PKCS 12 format that you downloaded from the Google APIs + # Console when you created your Service account. + f = file('android/Google_Play_Android_Developer-bb93ae7d61ca.p12', 'rb') + key = f.read() + f.close() + + # Create an httplib2.Http object to handle our HTTP requests and authorize it + # with the Credentials. Note that the first parameter, service_account_name, + # is the Email address created for the Service account. It must be the email + # address associated with the key that was created. + credentials = client.SignedJwtAssertionCredentials( + SERVICE_ACCOUNT_EMAIL, + key, + scope='https://www.googleapis.com/auth/androidpublisher') + http = httplib2.Http() + http = credentials.authorize(http) + + service = build('androidpublisher', 'v2', http=http) + + # Process flags and read their values. + flags = argparser.parse_args() + + package_name = flags.package_name + apk_file = flags.apk_file + + try: + edit_request = service.edits().insert(body={}, packageName=package_name) + result = edit_request.execute() + edit_id = result['id'] + + apk_response = service.edits().apks().upload( + editId=edit_id, + packageName=package_name, + media_body=apk_file).execute() + + print 'Version code %d has been uploaded' % apk_response['versionCode'] + + track_response = service.edits().tracks().update( + editId=edit_id, + track=TRACK, + packageName=package_name, + body={u'versionCodes': [apk_response['versionCode']]}).execute() + + print 'Track %s is set for version code(s) %s' % ( + track_response['track'], str(track_response['versionCodes'])) + + commit_request = service.edits().commit( + editId=edit_id, packageName=package_name).execute() + + print 'Edit "%s" has been committed' % (commit_request['id']) + + except client.AccessTokenRefreshError: + print ('The credentials have been revoked or expired, please re-run the ' + 'application to re-authorize') + +if __name__ == '__main__': + main() diff --git a/tools/update_android_version.sh b/tools/update_android_version.sh new file mode 100755 index 0000000000000000000000000000000000000000..e1792e1d3c26a9c2604b3a387dff2c1d173c817c --- /dev/null +++ b/tools/update_android_version.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +VERSIONCODE=`git rev-list master --first-parent --count` +VERSIONNAME=`git describe --always --tags | sed -e 's/^v//'` + +echo "VersionCode: ${VERSIONCODE}" +echo "VersionName: ${VERSIONNAME}" + +sed -i -e "s/android:versionCode=\"[0-9][0-9]*\"/android:versionCode=\"${VERSIONCODE}\"/" android/AndroidManifest.xml +set -i -e "s/android:versionName=\".*\"/android:versionName=\"${VERSIONNAME}\"/" android/AndroidManifest.xml +