Compare commits

...

3 Commits

5 changed files with 95 additions and 74 deletions

1
.gitignore vendored
View File

@ -12,3 +12,4 @@ build
com.logicalhacking.dasca.dataflow/config/main.config
com.logicalhacking.dasca.dataflow/main.log*
com.logicalhacking.dasca.crosslanguage/BuildCordovaCallgraph.launch
com.logicalhacking.dasca.crosslanguage/src/main/resources/android-26.jar

View File

@ -2,6 +2,7 @@ plugins {
id 'de.undercouch.download'
}
apply plugin: 'eclipse'
allprojects {

View File

@ -2,77 +2,9 @@ apply plugin: 'scala'
description = 'com.logicalhacking.dasca.crosslanguage.test'
def osName = System.getProperty('os.name')
ext.isWindows = osName.startsWith('Windows ')
task downloadAndroidSdk(type: VerifiedDownload) {
def sdkOs
switch (osName) {
case ~/Linux/:
sdkOs = 'linux'
checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
break
case ~/Mac OS X/:
sdkOs = 'darwin'
checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
break
case ~/Windows.*/:
sdkOs = 'windows'
checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
break
}
def archive = "sdk-tools-$sdkOs-3859397.zip"
src "https://dl.google.com/android/repository/$archive"
dest "$temporaryDir/$archive"
algorithm 'SHA-256'
}
task installAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) {
from zipTree(downloadAndroidSdk.dest)
into temporaryDir
def buildToolsVersion = '26.0.2'
ext {
components = [
'build-tools': buildToolsVersion,
'platforms': "android-${buildToolsVersion.tokenize('.')[0]}"
]
}
doLast {
exec {
def shell, shellFlags, yes, semicolon, discard
if (project.isWindows) {
shell = 'PowerShell'
shellFlags = '-Command'
yes = 'echo y'
semicolon = '`;'
discard = '$null'
} else {
shell = 'sh'
shellFlags = '-ceu'
yes = 'yes 2>/dev/null'
semicolon = /\;/
discard = '/dev/null'
}
def componentArgs = components.collect { "$it.key$semicolon$it.value" }.join ' '
commandLine shell, shellFlags, "$yes | $temporaryDir/tools/bin/sdkmanager $componentArgs >$discard"
}
}
outputs.cacheIf { true }
}
task copyAndroidJar(type: Sync, dependsOn: installAndroidSdk) {
from "${installAndroidSdk.destinationDir}/platforms/${installAndroidSdk.components['platforms']}/android.jar"
into temporaryDir
}
processResources {
with copySpec {
from copyAndroidJar
rename { "android-dasca.jar" }
}
from '../com.logicalhacking.dasca.crosslanguage/build/resources/main'
into 'build/resources/main'
}
dependencies {

View File

@ -1,6 +1,80 @@
apply plugin: 'scala'
description = 'com.logicalhacking.dasca.crosslanguage'
def osName = System.getProperty('os.name')
ext.isWindows = osName.startsWith('Windows ')
task downloadAndroidSdk(type: VerifiedDownload) {
def sdkOs
switch (osName) {
case ~/Linux/:
sdkOs = 'linux'
checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
break
case ~/Mac OS X/:
sdkOs = 'darwin'
checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
break
case ~/Windows.*/:
sdkOs = 'windows'
checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
break
}
def archive = "sdk-tools-$sdkOs-3859397.zip"
src "https://dl.google.com/android/repository/$archive"
dest "$temporaryDir/$archive"
algorithm 'SHA-256'
}
task installAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) {
from zipTree(downloadAndroidSdk.dest)
into temporaryDir
def buildToolsVersion = '26.0.2'
ext {
components = [
'build-tools': buildToolsVersion,
'platforms': "android-${buildToolsVersion.tokenize('.')[0]}"
]
}
doLast {
exec {
def shell, shellFlags, yes, semicolon, discard
if (project.isWindows) {
shell = 'PowerShell'
shellFlags = '-Command'
yes = 'echo y'
semicolon = '`;'
discard = '$null'
} else {
shell = 'sh'
shellFlags = '-ceu'
yes = 'yes 2>/dev/null'
semicolon = /\;/
discard = '/dev/null'
}
def componentArgs = components.collect { "$it.key$semicolon$it.value" }.join ' '
commandLine shell, shellFlags, "$yes | $temporaryDir/tools/bin/sdkmanager $componentArgs >$discard"
}
}
outputs.cacheIf { true }
}
task copyAndroidJar(type: Copy, dependsOn: installAndroidSdk) {
from "${installAndroidSdk.destinationDir}/platforms/${installAndroidSdk.components['platforms']}/android.jar"
rename { "android-26.jar" }
into 'src/main/resources'
}
processResources {
with copySpec {
from copyAndroidJar
}
}
dependencies {
implementation group: 'org.scala-lang', name: 'scala-library', version:'2.12.3'
implementation group: 'org.scala-lang.modules', name: 'scala-xml_2.12', version: '1.1.1'

View File

@ -161,12 +161,25 @@ class CordovaCGBuilder(val apk: File, val apkUnzipDir: File) {
}
private def createJavaCallGraph = {
val tmpAndroidJar = File.createTempFile("android-dasca", ".jar")
val tmpAndroidJar = File.createTempFile("android-26", ".jar")
tmpAndroidJar.deleteOnExit()
if (null != getClass.getClassLoader.getResource("android-dasca.jar")){
TemporaryFile.urlToFile(tmpAndroidJar, getClass.getClassLoader.getResource("android-dasca.jar"))
val rscDirs = List("android-26.jar")
var androidResource = null:java.net.URL
for (rsc <- rscDirs) {
if (null == androidResource) {
logger.info("Searching android framework: " + rsc)
androidResource = getClass.getClassLoader.getResource(rsc)
if (null != androidResource) {
logger.info(" Found android framework: " + rsc)
}
}
}
if (null != androidResource){
TemporaryFile.urlToFile(tmpAndroidJar, androidResource)
}else{
val msg = "Please install android-dasca.jar in resources directory."
val msg = "Please install a suiteable android framework in the resources directory."
logger.error(msg);
throw new FileNotFoundException(msg);
}