commit d8a23fe3b91787fbf50878531188849874a37643 parent e1d55fd0017ebace156edb3f2ca1f5459db6b238 Author: Iván Ávalos <avalos@disroot.org> Date: Tue, 24 Jan 2023 23:17:58 -0600 Dockerfile now building AAR library Diffstat:
34 files changed, 809 insertions(+), 0 deletions(-)
diff --git a/Dockerfile b/Dockerfile @@ -21,6 +21,7 @@ RUN apt-get -y autoremove --purge && \ ADD *.sh ./ ADD quickjs ./quickjs ADD subprojects ./subprojects +ADD QuickJS-android ./QuickJS-android ADD meson.build ./ ADD cross/build-android.sh ./cross/ ADD *.js ./ diff --git a/QuickJS-android/.dockerignore b/QuickJS-android/.dockerignore @@ -0,0 +1,24 @@ +# Ignore Gradle project-specific cache directory +/.gradle + +# Ignore Gradle build output directory +/build +/qtart/build + +.externalNativeBuild + +# Ignore Android generated files +/qtart/src/main/gen/ + +# https://intellij-support.jetbrains.com/hc/en-us/articles/206544839-How-to-manage-projects-under-Version-Control-Systems +/.idea/modules.xml +/.idea/workspace.xml +/.idea/tasks.xml +/.idea/libraries/* +/.idea/inspectionProfiles/* +/.idea/gradle.xml +/.idea/usage.statistics.xml +/.idea/caches/build_file_checksums.ser + +# Ignore developer's machine-specific settings +/local.properties diff --git a/QuickJS-android/.gitignore b/QuickJS-android/.gitignore @@ -0,0 +1,25 @@ +# Ignore Gradle project-specific cache directory +/.gradle + +# Ignore Gradle build output directory +/build +/qtart/build + +.externalNativeBuild + +# Ignore Android generated files +/qtart/src/main/gen/ + +# https://intellij-support.jetbrains.com/hc/en-us/articles/206544839-How-to-manage-projects-under-Version-Control-Systems +/.idea/modules.xml +/.idea/workspace.xml +/.idea/tasks.xml +/.idea/libraries/* +/.idea/inspectionProfiles/* +/.idea/gradle.xml +/.idea/usage.statistics.xml +/.idea/caches/build_file_checksums.ser + +# Ignore developer's machine-specific settings +/local.properties + diff --git a/QuickJS-android/.idea/.dockerignore b/QuickJS-android/.idea/.dockerignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/QuickJS-android/.idea/.gitignore b/QuickJS-android/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/QuickJS-android/.idea/.name b/QuickJS-android/.idea/.name @@ -0,0 +1 @@ +qtart +\ No newline at end of file diff --git a/QuickJS-android/.idea/compiler.xml b/QuickJS-android/.idea/compiler.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CompilerConfiguration"> + <bytecodeTargetLevel target="11" /> + </component> +</project> +\ No newline at end of file diff --git a/QuickJS-android/.idea/dictionaries/dold.xml b/QuickJS-android/.idea/dictionaries/dold.xml @@ -0,0 +1,8 @@ +<component name="ProjectDictionaryState"> + <dictionary name="dold"> + <words> + <w>akono</w> + <w>taler</w> + </words> + </dictionary> +</component> +\ No newline at end of file diff --git a/QuickJS-android/.idea/jarRepositories.xml b/QuickJS-android/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="RemoteRepositoriesConfiguration"> + <remote-repository> + <option name="id" value="central" /> + <option name="name" value="Maven Central repository" /> + <option name="url" value="https://repo1.maven.org/maven2" /> + </remote-repository> + <remote-repository> + <option name="id" value="jboss.community" /> + <option name="name" value="JBoss Community repository" /> + <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> + </remote-repository> + <remote-repository> + <option name="id" value="MavenRepo" /> + <option name="name" value="MavenRepo" /> + <option name="url" value="https://repo.maven.apache.org/maven2/" /> + </remote-repository> + <remote-repository> + <option name="id" value="Google" /> + <option name="name" value="Google" /> + <option name="url" value="https://dl.google.com/dl/android/maven2/" /> + </remote-repository> + </component> +</project> +\ No newline at end of file diff --git a/QuickJS-android/.idea/misc.xml b/QuickJS-android/.idea/misc.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ExternalStorageConfigurationManager" enabled="true" /> + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="JDK" project-jdk-type="JavaSDK"> + <output url="file://$PROJECT_DIR$/build/classes" /> + </component> + <component name="ProjectType"> + <option name="id" value="Android" /> + </component> +</project> +\ No newline at end of file diff --git a/QuickJS-android/.idea/vcs.xml b/QuickJS-android/.idea/vcs.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> + <mapping directory="$PROJECT_DIR$/deps/android-node-v8" vcs="Git" /> + </component> +</project> +\ No newline at end of file diff --git a/QuickJS-android/build.gradle.kts b/QuickJS-android/build.gradle.kts @@ -0,0 +1,18 @@ +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.android.tools.build:gradle:7.3.1") + classpath(kotlin("gradle-plugin", version = "1.5.31")) + classpath("com.vanniktech:gradle-maven-publish-plugin:0.18.0") + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} diff --git a/QuickJS-android/gradle.properties b/QuickJS-android/gradle.properties @@ -0,0 +1,22 @@ +android.useAndroidX=true + +GROUP=net.taler +POM_ARTIFACT_ID=qtart +VERSION_NAME=0.2 + +POM_NAME=QuickjsTart +POM_DESCRIPTION=QuickJS runtime for Taler +POM_INCEPTION_YEAR=2022 +POM_URL=https://taler.net + +POM_LICENSE_NAME=GPL-3.0 +POM_LICENSE_URL=https://www.gnu.org/licenses/gpl-3.0.en.html +POM_LICENSE_DIST=repo + +POM_SCM_URL=https://git.taler.net/quickjs-tart.git/ +POM_SCM_CONNECTION=scm:git:git://git.taler.net/quickjs-tart.git +POM_SCM_DEV_CONNECTION=scm:git:ssh://git@git.taler.net/quickjs-tart.git + +POM_DEVELOPER_ID=avalos +POM_DEVELOPER_NAME=Ivn valos +POM_DEVELOPER_URL=https://avalos.me/ diff --git a/QuickJS-android/gradle/wrapper/gradle-wrapper.jar b/QuickJS-android/gradle/wrapper/gradle-wrapper.jar Binary files differ. diff --git a/QuickJS-android/gradle/wrapper/gradle-wrapper.properties b/QuickJS-android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Jan 24 22:23:46 CST 2023 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/QuickJS-android/gradlew b/QuickJS-android/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/QuickJS-android/gradlew.bat b/QuickJS-android/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/QuickJS-android/qtart.iml b/QuickJS-android/qtart.iml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.id="qtart" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="android-gradle" name="Android-Gradle"> + <configuration> + <option name="GRADLE_PROJECT_PATH" value=":" /> + <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" /> + <option name="LAST_KNOWN_AGP_VERSION" /> + </configuration> + </facet> + <facet type="java-gradle" name="Java-Gradle"> + <configuration> + <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> + <option name="BUILDABLE" value="false" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/.gradle" /> + <excludeFolder url="file://$MODULE_DIR$/build" /> + </content> + <orderEntry type="jdk" jdkName="JDK" jdkType="JavaSDK" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> +\ No newline at end of file diff --git a/QuickJS-android/qtart/.classpath b/QuickJS-android/qtart/.classpath @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/"/> + <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> + <classpathentry kind="output" path="bin/default"/> +</classpath> diff --git a/QuickJS-android/qtart/.project b/QuickJS-android/qtart/.project @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>qtart-qtart</name> + <comment>Project qtart-qtart created by Buildship.</comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.buildship.core.gradleprojectbuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.buildship.core.gradleprojectnature</nature> + </natures> + <filteredResources> + <filter> + <id>1632335668892</id> + <name></name> + <type>30</type> + <matcher> + <id>org.eclipse.core.resources.regexFilterMatcher</id> + <arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> + </matcher> + </filter> + </filteredResources> +</projectDescription> diff --git a/QuickJS-android/qtart/.settings/org.eclipse.buildship.core.prefs b/QuickJS-android/qtart/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/QuickJS-android/qtart/build.gradle.kts b/QuickJS-android/qtart/build.gradle.kts @@ -0,0 +1,40 @@ +import com.vanniktech.maven.publish.MavenPublishPluginExtension +import com.vanniktech.maven.publish.SonatypeHost + +plugins { + id("com.android.library") + id("com.vanniktech.maven.publish") + kotlin("android") +} + +android { + compileSdk = 33 + defaultConfig { + minSdk = 24 + targetSdk = 33 + + ndk { + abiFilters.add("armeabi-v7a") + abiFilters.add("arm64-v8a") + abiFilters.add("x86") + abiFilters.add("x86_64") + } + + consumerProguardFiles("proguard-rules.pro") + } +} + +dependencies { + implementation("net.java.dev.jna:jna:5.13.0@aar") + androidTestImplementation("androidx.test:runner:1.5.2") + androidTestImplementation("androidx.test:rules:1.5.0") + androidTestImplementation("androidx.test.ext:junit:1.1.5") +} + +signing { + useGpgCmd() +} + +extensions.getByType<MavenPublishPluginExtension>().apply { + sonatypeHost = SonatypeHost.S01 +} diff --git a/QuickJS-android/qtart/proguard-rules.pro b/QuickJS-android/qtart/proguard-rules.pro @@ -0,0 +1,9 @@ +-keep class net.taler.qtart.** {*;} +-keep interface net.taler.qtart.** {*;} + +-dontwarn java.awt.* +-keep class com.sun.jna.* {*;} +-keepclassmembers class * extends com.sun.jna.* {public*;} +-keep,includedescriptorclasses class * { + native <methods>; +} +\ No newline at end of file diff --git a/QuickJS-android/qtart/qtart-qtart.iml b/QuickJS-android/qtart/qtart-qtart.iml @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.id=":qtart" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="android-gradle" name="Android-Gradle"> + <configuration> + <option name="GRADLE_PROJECT_PATH" value=":qtart" /> + <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.3.2" /> + <option name="LAST_KNOWN_AGP_VERSION" value="3.3.2" /> + </configuration> + </facet> + <facet type="native-android-gradle" name="Native-Android-Gradle"> + <configuration> + <option name="SELECTED_BUILD_VARIANT" value="debug-armeabi-v7a" /> + </configuration> + </facet> + <facet type="android" name="Android"> + <configuration> + <option name="SELECTED_BUILD_VARIANT" value="debug" /> + <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> + <afterSyncTasks> + <task>generateDebugSources</task> + </afterSyncTasks> + <option name="ALLOW_USER_CONFIGURATION" value="false" /> + <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> + <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> + <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" /> + <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" /> + <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> + <option name="PROJECT_TYPE" value="1" /> + </configuration> + </facet> + <facet type="kotlin-language" name="Kotlin"> + <configuration version="3" platform="JVM 1.6" allPlatforms="JVM [1.6]" useProjectSettings="false"> + <compilerSettings /> + <compilerArguments> + <option name="destination" value="$MODULE_DIR$/build/tmp/kotlin-classes/debug" /> + <option name="classpath" value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.21/d207ce2c9bcf17dc8e51bab4dbfdac4d013e7138/kotlin-stdlib-jdk7-1.3.21.jar:/home/dold/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.21/4bcc2012b84840e19e1e28074284cac908be0295/kotlin-stdlib-1.3.21.jar:/home/dold/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.21/f30e4a9897913e53d778f564110bafa1fef46643/kotlin-stdlib-common-1.3.21.jar:/home/dold/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/home/dold/repos/akono/akono/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/generateDebugRFile/R.jar:/home/dold/opt/android-sdk/platforms/android-29/android.jar:/home/dold/opt/android-sdk/platforms/android-29/optional/android.test.mock.jar:/home/dold/opt/android-sdk/platforms/android-29/optional/android.test.base.jar:/home/dold/opt/android-sdk/platforms/android-29/optional/android.test.runner.jar" /> + <option name="noStdlib" value="true" /> + <option name="noReflect" value="true" /> + <option name="moduleName" value="qtart_debug" /> + <option name="languageVersion" value="1.3" /> + <option name="apiVersion" value="1.3" /> + <option name="pluginOptions"> + <array> + <option value="plugin:org.jetbrains.kotlin.android:experimental=false" /> + <option value="plugin:org.jetbrains.kotlin.android:enabled=true" /> + <option value="plugin:org.jetbrains.kotlin.android:defaultCacheImplementation=hashMap" /> + </array> + </option> + <option name="pluginClasspaths"> + <array> + <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-android-extensions/1.3.21/311c0d1cbb0a194e8712edaef7b92a8f0919ca26/kotlin-android-extensions-1.3.21.jar" /> + </array> + </option> + <option name="errors"> + <ArgumentParseErrors /> + </option> + </compilerArguments> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> + <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" /> + <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" /> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/cpp" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/.cxx" /> + <excludeFolder url="file://$MODULE_DIR$/.externalNativeBuild" /> + <excludeFolder url="file://$MODULE_DIR$/build" /> + </content> + <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.truth:truth:0.44@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-junit:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:guava:27.0.1-android@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:failureaccess:1.0.1@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:3.0.2@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.checkerframework:checker-compat-qual:2.5.5@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.errorprone:error_prone_annotations:2.3.1@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.j2objc:j2objc-annotations:1.1@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.codehaus.mojo:animal-sniffer-annotations:1.17@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.googlecode.java-diff-utils:diffutils:1.3.0@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.auto.value:auto-value-annotations:1.6.3@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:junit:1.1.1@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:truth:1.2.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:core:1.2.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:rules:1.2.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.2.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.2.0@aar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21@jar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.21@jar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.21@jar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" /> + <orderEntry type="library" name="Gradle: android.test.mock-android-29" level="project" /> + <orderEntry type="library" name="Gradle: android.test.base-android-29" level="project" /> + <orderEntry type="library" name="Gradle: android.test.runner-android-29" level="project" /> + </component> +</module> +\ No newline at end of file diff --git a/QuickJS-android/qtart/src/main/AndroidManifest.xml b/QuickJS-android/qtart/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="net.taler.qtart"> + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission + android:name="android.permission.WRITE_EXTERNAL_STORAGE" + android:maxSdkVersion="28" /> +</manifest> diff --git a/QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt b/QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt @@ -0,0 +1,61 @@ +/* + * This file is part of GNU Taler + * (C) 2023 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +/* + * This file is part of GNU Taler + * (C) 2023 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +package net.taler.qtart + +import com.sun.jna.Callback +import com.sun.jna.Library +import com.sun.jna.Native +import com.sun.jna.Pointer + +interface TalerWalletCore: Library { + companion object { + val INSTANCE: TalerWalletCore by lazy { + Native.load("talerwalletcore", TalerWalletCore::class.java) + } + } + + interface TALER_WALLET_MessageHandlerFn: Callback { + fun invoke(handler_p: Pointer, message: String) + } + + interface TALER_LogFn: Callback { + fun invoke(cls: Pointer, stream: Int, msg: String) + } + + fun TALER_WALLET_create(): Pointer + fun TALER_WALLET_set_message_handler(twi: Pointer, handler_f: TALER_WALLET_MessageHandlerFn, handler_p: Pointer) + fun TALER_WALLET_send_request(twi: Pointer, request: String): Int + fun TALER_WALLET_run(twi: Pointer): Int + fun TALER_WALLET_join(twi: Pointer) + fun TALER_start_redirect_std(logfn: TALER_LogFn, cls: Pointer) +} +\ No newline at end of file diff --git a/QuickJS-android/qtart/src/main/jniLibs/.dockerignore b/QuickJS-android/qtart/src/main/jniLibs/.dockerignore @@ -0,0 +1 @@ +*/libtalerwalletcore.so diff --git a/QuickJS-android/qtart/src/main/jniLibs/.gitignore b/QuickJS-android/qtart/src/main/jniLibs/.gitignore @@ -0,0 +1 @@ +*/libtalerwalletcore.so +\ No newline at end of file diff --git a/QuickJS-android/qtart/src/main/jniLibs/arm64-v8a/.gitkeep b/QuickJS-android/qtart/src/main/jniLibs/arm64-v8a/.gitkeep diff --git a/QuickJS-android/qtart/src/main/jniLibs/armeabi-v7a/.gitkeep b/QuickJS-android/qtart/src/main/jniLibs/armeabi-v7a/.gitkeep diff --git a/QuickJS-android/qtart/src/main/jniLibs/x86/.gitkeep b/QuickJS-android/qtart/src/main/jniLibs/x86/.gitkeep diff --git a/QuickJS-android/qtart/src/main/jniLibs/x86_64/.gitkeep b/QuickJS-android/qtart/src/main/jniLibs/x86_64/.gitkeep diff --git a/QuickJS-android/settings.gradle.kts b/QuickJS-android/settings.gradle.kts @@ -0,0 +1,12 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/5.2.1/userguide/multi_project_builds.html + */ + +rootProject.name = "qtart" + +include(":qtart") diff --git a/build.sh b/build.sh @@ -2,9 +2,20 @@ set -e set -x +# Build .so library . /etc/environment ./download_wallet_core_js.sh ./cross/build-android.sh x86 ./cross/build-android.sh x86_64 ./cross/build-android.sh arm64-v8a ./cross/build-android.sh armeabi-v7a + +# Build .aar library +ANDROID_DIR=./QuickJS-android +JNILIBS_DIR=$ANDROID_DIR/qtart/src/main/jniLibs +cp ./build-android-x86/libtalerwalletcore.so $JNILIBS_DIR/x86 +cp ./build-android-x86_64/libtalerwalletcore.so $JNILIBS_DIR/x86_64 +cp ./build-android-arm64-v8a/libtalerwalletcore.so $JNILIBS_DIR/arm64-v8a +cp ./build-android-armeabi-v7a/libtalerwalletcore.so $JNILIBS_DIR/armeabi-v7a +cd $ANDROID_DIR +./gradlew build