diff --git a/android/app/CMakeLists.txt b/android/app/CMakeLists.txt index 2451a8804c..8b36f8a1fb 100644 --- a/android/app/CMakeLists.txt +++ b/android/app/CMakeLists.txt @@ -3,9 +3,10 @@ setup_hifi_library() link_hifi_libraries(shared networking gl gpu gpu-gles image fbx render-utils physics) target_opengl() target_link_libraries(native-lib android log m) + set(GVR_ROOT "${HIFI_ANDROID_PRECOMPILED}/gvr/gvr-android-sdk-1.101.0/") target_include_directories(native-lib PRIVATE "${GVR_ROOT}/libraries/headers") -target_link_libraries(native-lib "${HIFI_ANDROID_PRECOMPILED}/jni/arm64-v8a/libgvr.so") +target_link_libraries(native-lib "${GVR_ROOT}/libraries/libgvr.so") # finished libraries # core -> qt diff --git a/android/build.gradle b/android/build.gradle index 43cdb0e8ac..a4c6da1432 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,6 +8,10 @@ buildscript { } } +plugins { + id 'de.undercouch.download' version '3.3.0' +} + allprojects { repositories { jcenter() @@ -15,42 +19,126 @@ allprojects { } } -task setupDependencies(type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/jni/arm64-v8a' - into 'app/src/main/jniLibs/arm64-v8a' + +def baseFolder = new File(HIFI_ANDROID_PRECOMPILED) +def jniFolder = new File('app/src/main/jniLibs/arm64-v8a') + +import org.apache.tools.ant.taskdefs.condition.Os + +def baseUrl = 'https://hifi-public.s3.amazonaws.com/austin/android/' +def qtFile='qt-5.9.3_linux_armv8-libcpp.tgz' +if (Os.isFamily(Os.FAMILY_MAC)) { + qtFile = 'qt-5.9.3_osx_armv8-libcpp.tgz' +} else if (Os.isFamily(Os.FAMILY_WINDOWS)) { + qtFile = 'qt-5.9.3_win_armv8-libcpp.tgz' } -apply from: 'setupQt.gradle' -setupDependencies.dependsOn setupQt +def packages = [ + qt: [ file: qtFile, sharedLibFolder: '', includeLibs: ['lib/*.so', 'plugins/*/*.so'] ], + bullet: [ file: 'bullet-2.83_armv8-libcpp.tgz' ], + draco: [ file: 'draco_armv8-libcpp.tgz' ], + gvr: [ file: 'gvrsdk_v1.101.0.tgz' ], + openssl: [ file: 'openssl-1.1.0g_armv8.tgz'], + polyvox: [ file: 'polyvox_armv8-libcpp.tgz', sharedLibFolder: 'lib', includeLibs: ['Release/libPolyVoxCore.so', 'libPolyVoxUtil.so'] ], + tbb: [ file: 'tbb-2018_U1_armv8_libcpp.tgz', sharedLibFolder: 'lib/release', includeLibs: ['libtbb.so', 'libtbbmalloc.so'] ] +] -apply from: 'setupScribe.gradle' -setupDependencies.dependsOn setupScribe +task downloadDependencies { + doLast { + packages.each { entry -> + def filename = entry.value['file']; + def url = baseUrl + filename; + download { + src url + dest new File(baseFolder, filename) + onlyIfNewer true + } + } + } +} -apply from: 'setupOpenSSL.gradle' -setupDependencies.dependsOn setupOpenSSL +task extractDependencies(dependsOn: downloadDependencies) { + doLast { + packages.each { entry -> + def folder = entry.key; + def filename = entry.value['file']; + def localFile = new File(HIFI_ANDROID_PRECOMPILED, filename) + def localFolder = new File(HIFI_ANDROID_PRECOMPILED, folder) + copy { + from tarTree(resources.gzip(localFile)) + into localFolder + } + } + } +} -apply from: 'setupTBB.gradle' -setupDependencies.dependsOn setupTBB +task copyDependencies(dependsOn: extractDependencies) { + doLast { + packages.each { entry -> + def packageName = entry.key + def currentPackage = entry.value; + if (currentPackage.containsKey('sharedLibFolder')) { + def localFolder = new File(baseFolder, packageName + '/' + currentPackage['sharedLibFolder']) + def tree = fileTree(localFolder); + if (currentPackage.containsKey('includeLibs')) { + currentPackage['includeLibs'].each { includeSpec -> tree.include includeSpec } + } + tree.visit { element -> + if (!element.file.isDirectory()) { + copy { from element.file; into jniFolder } + } + } + } + } + } +} -apply from: 'setupGVR.gradle' -setupDependencies.dependsOn setupGVR +task setupScribe(type: Exec) { + def scribeFile='scribe_linux_x86_64' + def scribeLocalFile='scribe' + if (Os.isFamily(Os.FAMILY_MAC)) { + scribeFile = 'scribe_osx_x86_64' + } else if (Os.isFamily(Os.FAMILY_WINDOWS)) { + scribeFile = 'scribe_win32_x86_64.exe' + scribeLocalFile = 'scribe.exe' + } -apply from: 'setupDraco.gradle' -setupDependencies.dependsOn setupDraco + doFirst { + download { + src baseUrl + scribeFile + dest new File(baseFolder, scribeLocalFile) + onlyIfNewer true + } + } + if (!Os.isFamily(Os.FAMILY_WINDOWS)) { + commandLine 'chmod', 'a+x', HIFI_ANDROID_PRECOMPILED + '/' + scribeLocalFile + } +} -apply from: 'setupBullet.gradle' -setupDependencies.dependsOn setupBullet - -apply from: 'setupPolyvox.gradle' -setupDependencies.dependsOn setupPolyvox - -task copyDependencies(type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/jni/arm64-v8a' - into 'app/src/main/jniLibs/arm64-v8a' +task setupDependencies(dependsOn: [setupScribe, copyDependencies]) { + doLast { + def gvrLibFolder = new File(HIFI_ANDROID_PRECOMPILED, 'gvr/gvr-android-sdk-1.101.0/libraries'); + zipTree(new File(HIFI_ANDROID_PRECOMPILED, 'gvr/gvr-android-sdk-1.101.0/libraries/sdk-audio-1.101.0.aar')).visit { element -> + if (element.file.toString().endsWith('arm64-v8a/libgvr_audio.so')) { + copy { from element.file; into gvrLibFolder } + } + } + zipTree(new File(HIFI_ANDROID_PRECOMPILED, 'gvr/gvr-android-sdk-1.101.0/libraries/sdk-base-1.101.0.aar')).visit { element -> + if (element.file.toString().endsWith('arm64-v8a/libgvr.so')) { + copy { from element.file; into gvrLibFolder } + } + } + fileTree(gvrLibFolder).visit { element -> + if (element.file.toString().endsWith('.so')) { + copy { from element.file; into jniFolder } + } + } + } } task cleanDependencies(type: Delete) { delete HIFI_ANDROID_PRECOMPILED + delete 'app/src/main/jniLibs/arm64-v8a' } task clean(type: Delete) { diff --git a/android/setupBullet.gradle b/android/setupBullet.gradle deleted file mode 100644 index 5fb1bd4369..0000000000 --- a/android/setupBullet.gradle +++ /dev/null @@ -1,26 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - -def file='bullet-2.83_armv8-libcpp.tgz ' -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, file) - -task downloadBullet(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task extractBullet(dependsOn: downloadBullet, type: Copy) { - from tarTree(resources.gzip(destFile)) - into new File(HIFI_ANDROID_PRECOMPILED, 'bullet') -} - -task setupBullet(dependsOn: extractBullet) { } diff --git a/android/setupDraco.gradle b/android/setupDraco.gradle deleted file mode 100644 index cae24b8a0f..0000000000 --- a/android/setupDraco.gradle +++ /dev/null @@ -1,26 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - -def file='draco_armv8-libcpp.tgz' -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, file) - -task downloadDraco(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task extractDraco(dependsOn: downloadDraco, type: Copy) { - from tarTree(resources.gzip(destFile)) - into new File(HIFI_ANDROID_PRECOMPILED, 'draco') -} - -task setupDraco(dependsOn: extractDraco) { } diff --git a/android/setupOpenSSL.gradle b/android/setupOpenSSL.gradle deleted file mode 100644 index 2a76405dda..0000000000 --- a/android/setupOpenSSL.gradle +++ /dev/null @@ -1,26 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - -def file='openssl-1.1.0g_armv8.tgz' -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, file) - -task downloadOpenSSL(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task extractOpenSSL(dependsOn: downloadOpenSSL, type: Copy) { - from tarTree(resources.gzip(destFile)) - into new File(HIFI_ANDROID_PRECOMPILED, 'openssl') -} - -task setupOpenSSL(dependsOn: extractOpenSSL) { } diff --git a/android/setupPolyvox.gradle b/android/setupPolyvox.gradle deleted file mode 100644 index 168fbd9b15..0000000000 --- a/android/setupPolyvox.gradle +++ /dev/null @@ -1,38 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - -def file='polyvox_armv8-libcpp.tgz' -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, file) - -task downloadPolyvox(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task extractPolyvox(dependsOn: downloadPolyvox, type: Copy) { - from tarTree(resources.gzip(destFile)) - into new File(HIFI_ANDROID_PRECOMPILED, 'polyvox') -} - -task copyPolyvoxCore(dependsOn: extractPolyvox, type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/polyvox/lib/Release' - include 'libPolyVoxCore.so' - into HIFI_ANDROID_PRECOMPILED + '/jni/arm64-v8a' -} - -task copyPolyvoxUtil(dependsOn: extractPolyvox, type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/polyvox/lib' - include 'libPolyVoxUtil.so' - into HIFI_ANDROID_PRECOMPILED + '/jni/arm64-v8a' -} - -task setupPolyvox(dependsOn: [copyPolyvoxCore, copyPolyvoxUtil]) { } diff --git a/android/setupQt.gradle b/android/setupQt.gradle deleted file mode 100644 index 32a87d9580..0000000000 --- a/android/setupQt.gradle +++ /dev/null @@ -1,72 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - - -import org.apache.tools.ant.taskdefs.condition.Os - -def file='qt-5.9.3_linux_armv8-libcpp.tgz' -if (Os.isFamily(Os.FAMILY_MAC)) { - file = 'qt-5.9.3_osx_armv8-libcpp.tgz' -} else if (Os.isFamily(Os.FAMILY_WINDOWS)) { - file = 'qt-5.9.3_win_armv8-libcpp.tgz' -} - -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, file) - -task downloadQt(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task extractQt(dependsOn: downloadQt, type: Copy) { - from tarTree(resources.gzip(destFile)) - into new File(HIFI_ANDROID_PRECOMPILED, 'qt') -} - -task copyQtJars(dependsOn: extractQt, type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/qt/jar' - include '*.jar' - into HIFI_ANDROID_PRECOMPILED + '/jar' -} - -task copyQtLibs(dependsOn: extractQt, type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/qt/lib' - include 'libQt5AndroidExtras.so' - include 'libQt5Concurrent.so' - include 'libQt5Core.so' - include 'libQt5Gamepad.so' - include 'libQt5Gui.so' - include 'libQt5MultimediaQuick_p.so' - include 'libQt5Multimedia.so' - include 'libQt5Network.so' - include 'libQt5OpenGL.so' - include 'libQt5Qml.so' - include 'libQt5QuickControls2.so' - include 'libQt5QuickParticles.so' - include 'libQt5Quick.so' - include 'libQt5QuickTemplates2.so' - include 'libQt5QuickWidgets.so' - include 'libQt5Script.so' - include 'libQt5ScriptTools.so' - include 'libQt5Scxml.so' - include 'libQt5Svg.so' - include 'libQt5WebChannel.so' - include 'libQt5WebSockets.so' - include 'libQt5WebView.so' - include 'libQt5Widgets.so' - include 'libQt5XmlPatterns.so' - include 'libQt5Xml.so' - into HIFI_ANDROID_PRECOMPILED + '/jni/arm64-v8a' -} - -task setupQt(dependsOn: [copyQtLibs, copyQtJars]) { -} diff --git a/android/setupScribe.gradle b/android/setupScribe.gradle deleted file mode 100644 index b415715309..0000000000 --- a/android/setupScribe.gradle +++ /dev/null @@ -1,39 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - -import org.apache.tools.ant.taskdefs.condition.Os - -def file='scribe_linux_x86_64' -def localFile='scribe' -if (Os.isFamily(Os.FAMILY_MAC)) { - file = 'scribe_osx_x86_64' -} else if (Os.isFamily(Os.FAMILY_WINDOWS)) { - file = 'scribe_win32_x86_64.exe' - localFile = 'scribe.exe' -} - -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, localFile) - -task filepermission(type: Exec) { - if (!Os.isFamily(Os.FAMILY_WINDOWS)) { - commandLine 'chmod', '700', '' - } -} - -task downloadScribe(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task setupScribe(dependsOn: downloadScribe, type: Exec) { - commandLine 'chmod', 'a+x', destFile -} diff --git a/android/setupTBB.gradle b/android/setupTBB.gradle deleted file mode 100644 index 55d7a9164e..0000000000 --- a/android/setupTBB.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - classpath 'de.undercouch:gradle-download-task:3.3.0' - } -} - -def file='tbb-2018_U1_armv8_libcpp.tgz' -def url='https://hifi-public.s3.amazonaws.com/austin/android/' + file -def destFile = new File(HIFI_ANDROID_PRECOMPILED, file) - -task downloadTBB(type: de.undercouch.gradle.tasks.download.Download) { - src url - dest destFile -} - -task extractTBB(dependsOn: downloadTBB, type: Copy) { - from tarTree(resources.gzip(destFile)) - into new File(HIFI_ANDROID_PRECOMPILED, 'tbb') -} - -task setupTBB(dependsOn: extractTBB, type: Copy) { - from HIFI_ANDROID_PRECOMPILED + '/tbb/lib/release' - include 'libtbb.so' - include 'libtbbmalloc.so' - into HIFI_ANDROID_PRECOMPILED + '/jni/arm64-v8a/' -}