diff --git a/android/android_project/android_app.mk b/android/android_project/android_app.mk index 4874206e..ccf446c2 100644 --- a/android/android_project/android_app.mk +++ b/android/android_project/android_app.mk @@ -12,4 +12,4 @@ LOCAL_SRC_FILES="\ LOCAL_LDLIBS="" # Android SDK target -ANDROID_TARGET="android-19" +ANDROID_TARGET="android-21" diff --git a/android/android_project/android_build_config.mk b/android/android_project/android_build_config.mk index d44305f1..0d90606f 100644 --- a/android/android_project/android_build_config.mk +++ b/android/android_project/android_build_config.mk @@ -3,9 +3,9 @@ #========================================================================= # Modify this file to specify DLANGUI, Android NDK, SDK and LDC2 locations. -export DLANGUI_DIR=$HOME/src/d/dlangui -export NDK=$HOME/android-ndk-r11c -export SDK=$HOME/android-sdk-linux -export LDC=$HOME/ldc2-android-arm-0.17.0-alpha2-linux-x86_64 +export DLANGUI_DIR=/media/toshiba/dev/pohjagui +export NDK=$NDK +export SDK=$ANDROID_HOME +export LDC=$LDC export NDK_ARCH=x86_64 -export JAVA_HOME=/usr/lib/jvm/java-8-oracle/ +export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ diff --git a/android/dlangui_source_files.mk b/android/dlangui_source_files.mk index c4c731ad..2e1b574f 100644 --- a/android/dlangui_source_files.mk +++ b/android/dlangui_source_files.mk @@ -15,6 +15,7 @@ $DLANGUI_DIR/src/dlangui/core/asyncsocket.d \ $DLANGUI_DIR/src/dlangui/core/config.d \ $DLANGUI_DIR/src/dlangui/core/textsource.d \ $DLANGUI_DIR/src/dlangui/core/css.d \ +$DLANGUI_DIR/src/dlangui/core/filemanager.d \ $DLANGUI_DIR/src/dlangui/core/files.d \ $DLANGUI_DIR/src/dlangui/core/events.d \ $DLANGUI_DIR/src/dlangui/core/collections.d \ @@ -52,6 +53,7 @@ $DLANGUI_DIR/src/dlangui/graphics/scene/fbximport.d \ $DLANGUI_DIR/src/dlangui/graphics/scene/skybox.d \ $DLANGUI_DIR/src/dlangui/graphics/resources.d \ $DLANGUI_DIR/src/dlangui/graphics/glsupport.d \ +$DLANGUI_DIR/src/dlangui/graphics/iconprovider.d \ $DLANGUI_DIR/src/dlangui/graphics/colors.d \ $DLANGUI_DIR/src/dlangui/graphics/gldrawbuf.d \ $DLANGUI_DIR/src/dlangui/graphics/fonts.d \ @@ -63,6 +65,7 @@ $DLANGUI_DIR/src/dlangui/dml/annotations.d \ $DLANGUI_DIR/src/dlangui/dml/tokenizer.d \ $DLANGUI_DIR/src/dlangui/dml/parser.d \ $DLANGUI_DIR/src/dlangui/widgets/grid.d \ +$DLANGUI_DIR/src/dlangui/widgets/groupbox.d \ $DLANGUI_DIR/src/dlangui/widgets/styles.d \ $DLANGUI_DIR/src/dlangui/widgets/combobox.d \ $DLANGUI_DIR/src/dlangui/widgets/lists.d \ @@ -72,13 +75,17 @@ $DLANGUI_DIR/src/dlangui/widgets/statusline.d \ $DLANGUI_DIR/src/dlangui/widgets/toolbars.d \ $DLANGUI_DIR/src/dlangui/widgets/tree.d \ $DLANGUI_DIR/src/dlangui/widgets/controls.d \ +$DLANGUI_DIR/src/dlangui/widgets/dmlwidgets.d \ $DLANGUI_DIR/src/dlangui/widgets/popup.d \ +$DLANGUI_DIR/src/dlangui/widgets/progressbar.d \ $DLANGUI_DIR/src/dlangui/widgets/tabs.d \ $DLANGUI_DIR/src/dlangui/widgets/editors.d \ $DLANGUI_DIR/src/dlangui/widgets/appframe.d \ +$DLANGUI_DIR/src/dlangui/widgets/charts.d \ $DLANGUI_DIR/src/dlangui/widgets/layouts.d \ $DLANGUI_DIR/src/dlangui/widgets/winframe.d \ $DLANGUI_DIR/src/dlangui/widgets/metadata.d \ +$DLANGUI_DIR/src/dlangui/widgets/scrollbar.d \ $DLANGUI_DIR/src/dlangui/widgets/scroll.d \ $DLANGUI_DIR/src/dlangui/widgets/docks.d \ $DLANGUI_DIR/src/dlangui/widgets/menu.d \ diff --git a/examples/android/AndroidManifest.xml b/examples/android/AndroidManifest.xml deleted file mode 100644 index 3fcd3b46..00000000 --- a/examples/android/AndroidManifest.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/android/android_app.mk b/examples/android/android_app.mk index 949d2e39..94df7c4f 100644 --- a/examples/android/android_app.mk +++ b/examples/android/android_app.mk @@ -3,13 +3,13 @@ # application library name ("app" -> libapp.so) LOCAL_MODULE=dlangui-activity -# applicatino source files +# applicatino source files: put list of your source files here LOCAL_SRC_FILES="\ -jni/app.d \ +./jni/app.d \ " # Additional libraries to link LOCAL_LDLIBS="" # Android SDK target -ANDROID_TARGET="android-19" +ANDROID_TARGET="android-21" diff --git a/examples/android/android_build_config.mk b/examples/android/android_build_config.mk index 86a1829b..d96b0d13 100644 --- a/examples/android/android_build_config.mk +++ b/examples/android/android_build_config.mk @@ -3,12 +3,9 @@ #========================================================================= # Modify this file to specify DLANGUI, Android NDK, SDK and LDC2 locations. -MY_DIR=$(dirname $(readlink -f $0)) -# relative path: ../../ -export DLANGUI_DIR=$(dirname $(dirname $MY_DIR)) -export NDK=$HOME/android-ndk-r11c -export SDK=$HOME/android-sdk-linux -export LDC=$HOME/ldc2-android-arm-0.17.0-alpha2-linux-x86_64 +export DLANGUI_DIR=/media/toshiba/dev/ernomon +export NDK=$NDK +export SDK=$ANDROID_HOME +export LDC=$LDC export NDK_ARCH=x86_64 -#export JAVA_HOME=/usr/local/java/jdk1.7.0_40 -export JAVA_HOME=/usr/lib/jvm/java-8-oracle/ +export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ diff --git a/examples/android/app/.gitignore b/examples/android/app/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/examples/android/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/examples/android/app/CMakeLists.txt b/examples/android/app/CMakeLists.txt new file mode 100644 index 00000000..f8e6e8b3 --- /dev/null +++ b/examples/android/app/CMakeLists.txt @@ -0,0 +1,44 @@ +# For more information about using CMake with Android Studio, read the +# documentation: https://d.android.com/studio/projects/add-native-code.html + +# Sets the minimum version of CMake required to build the native library. + +cmake_minimum_required(VERSION 3.4.1) + +# Creates and names a library, sets it as either STATIC +# or SHARED, and provides the relative paths to its source code. +# You can define multiple libraries, and CMake builds them for you. +# Gradle automatically packages shared libraries with your APK. + +add_library( # Sets the name of the library. + native-lib + + # Sets the library as a shared library. + SHARED + + # Provides a relative path to your source file(s). + src/main/cpp/native-lib.cpp ) + +# Searches for a specified prebuilt library and stores the path as a +# variable. Because CMake includes system libraries in the search path by +# default, you only need to specify the name of the public NDK library +# you want to add. CMake verifies that the library exists before +# completing its build. + +find_library( # Sets the name of the path variable. + log-lib + + # Specifies the name of the NDK library that + # you want CMake to locate. + log ) + +# Specifies libraries CMake should link to your target library. You +# can link multiple libraries, such as libraries you define in this +# build script, prebuilt third-party libraries, or system libraries. + +target_link_libraries( # Specifies the target library. + native-lib + + # Links the target library to the log library + # included in the NDK. + ${log-lib} ) \ No newline at end of file diff --git a/examples/android/app/app.iml b/examples/android/app/app.iml new file mode 100644 index 00000000..c99ec6a4 --- /dev/null +++ b/examples/android/app/app.iml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/android/app/build.gradle b/examples/android/app/build.gradle new file mode 100644 index 00000000..80972e81 --- /dev/null +++ b/examples/android/app/build.gradle @@ -0,0 +1,44 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 26 + defaultConfig { + applicationId "dlangui.org.example" + minSdkVersion 19 + targetSdkVersion 21 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + externalNativeBuild { + cmake { + cppFlags "" + } + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + sourceSets { + main { + // let gradle pack the shared library into apk + jniLibs.srcDirs = ['../libs'] + } + } + /*externalNativeBuild { + cmake { + path "CMakeLists.txt" + } + }*/ +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' +} diff --git a/examples/android/app/proguard-rules.pro b/examples/android/app/proguard-rules.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/examples/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/examples/android/app/src/androidTest/java/dlangui/org/example/ExampleInstrumentedTest.java b/examples/android/app/src/androidTest/java/dlangui/org/example/ExampleInstrumentedTest.java new file mode 100644 index 00000000..65175b86 --- /dev/null +++ b/examples/android/app/src/androidTest/java/dlangui/org/example/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package dlangui.org.example; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("dlangui.org.example", appContext.getPackageName()); + } +} diff --git a/examples/android/app/src/main/AndroidManifest.xml b/examples/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..ef4059e8 --- /dev/null +++ b/examples/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/android/app/src/main/cpp/native-lib.cpp b/examples/android/app/src/main/cpp/native-lib.cpp new file mode 100644 index 00000000..ca27e060 --- /dev/null +++ b/examples/android/app/src/main/cpp/native-lib.cpp @@ -0,0 +1,13 @@ +#include +#include + +extern "C" +JNIEXPORT jstring + +JNICALL +Java_dlangui_org_example_MainActivity_stringFromJNI( + JNIEnv *env, + jobject /* this */) { + std::string hello = "Hello from C++"; + return env->NewStringUTF(hello.c_str()); +} diff --git a/examples/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/examples/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..c7bd21db --- /dev/null +++ b/examples/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/examples/android/app/src/main/res/drawable/ic_launcher_background.xml b/examples/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..d5fccc53 --- /dev/null +++ b/examples/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/android/app/src/main/res/layout/activity_main.xml b/examples/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..ec660c8a --- /dev/null +++ b/examples/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..eca70cfe --- /dev/null +++ b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..eca70cfe --- /dev/null +++ b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..a2f59082 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000..1b523998 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..ff10afd6 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000..115a4c76 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..dcd3cd80 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000..459ca609 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..8ca12fe0 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..8e19b410 Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..b824ebdd Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..4c19a13c Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/examples/android/app/src/main/res/values/colors.xml b/examples/android/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..3ab3e9cb --- /dev/null +++ b/examples/android/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/examples/android/app/src/main/res/values/strings.xml b/examples/android/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..d75426c8 --- /dev/null +++ b/examples/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + example + diff --git a/examples/android/app/src/main/res/values/styles.xml b/examples/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..5885930d --- /dev/null +++ b/examples/android/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/examples/android/app/src/test/java/dlangui/org/example/ExampleUnitTest.java b/examples/android/app/src/test/java/dlangui/org/example/ExampleUnitTest.java new file mode 100644 index 00000000..d3212526 --- /dev/null +++ b/examples/android/app/src/test/java/dlangui/org/example/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package dlangui.org.example; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/examples/android/build.gradle b/examples/android/build.gradle new file mode 100644 index 00000000..020eae2e --- /dev/null +++ b/examples/android/build.gradle @@ -0,0 +1,27 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.0.0' + + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/examples/android/build/android-profile/profile-2017-11-06-22-03-30-739.json b/examples/android/build/android-profile/profile-2017-11-06-22-03-30-739.json new file mode 100644 index 00000000..c749dd4e --- /dev/null +++ b/examples/android/build/android-profile/profile-2017-11-06-22-03-30-739.json @@ -0,0 +1 @@ +[{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609471000,"args":{"JVM stats":"heap_memory_usage: 267345264\nnon_heap_memory_usage: 192762592\nloaded_class_count: 17151\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609571000,"args":{"JVM stats":"heap_memory_usage: 278977512\nnon_heap_memory_usage: 192526848\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609631000,"args":{"JVM stats":"heap_memory_usage: 282215824\nnon_heap_memory_usage: 192528832\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609632000,"args":{"JVM stats":"heap_memory_usage: 282215824\nnon_heap_memory_usage: 192528832\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609670000,"args":{"JVM stats":"heap_memory_usage: 288312472\nnon_heap_memory_usage: 192564824\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609676000,"args":{"JVM stats":"heap_memory_usage: 289122120\nnon_heap_memory_usage: 192566296\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609681000,"args":{"JVM stats":"heap_memory_usage: 290340544\nnon_heap_memory_usage: 192567192\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609682000,"args":{"JVM stats":"heap_memory_usage: 290340544\nnon_heap_memory_usage: 192567192\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609683000,"args":{"JVM stats":"heap_memory_usage: 290626520\nnon_heap_memory_usage: 192573624\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609683001,"args":{"JVM stats":"heap_memory_usage: 290626520\nnon_heap_memory_usage: 192573624\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609684000,"args":{"JVM stats":"heap_memory_usage: 290761336\nnon_heap_memory_usage: 192573624\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998609685000,"args":{"JVM stats":"heap_memory_usage: 290761336\nnon_heap_memory_usage: 192573624\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610008000,"args":{"JVM stats":"heap_memory_usage: 402143104\nnon_heap_memory_usage: 192697176\nloaded_class_count: 17151\nthread_count: 64\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610011000,"args":{"JVM stats":"heap_memory_usage: 404526208\nnon_heap_memory_usage: 192708968\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610027000,"args":{"JVM stats":"heap_memory_usage: 410473280\nnon_heap_memory_usage: 192808896\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610028000,"args":{"JVM stats":"heap_memory_usage: 410881672\nnon_heap_memory_usage: 192840320\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610212000,"args":{"JVM stats":"heap_memory_usage: 424839712\nnon_heap_memory_usage: 193082784\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610213000,"args":{"JVM stats":"heap_memory_usage: 424905264\nnon_heap_memory_usage: 193082784\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610235000,"args":{"JVM stats":"heap_memory_usage: 429871400\nnon_heap_memory_usage: 193068464\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610242000,"args":{"JVM stats":"heap_memory_usage: 430415920\nnon_heap_memory_usage: 193068464\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610255000,"args":{"JVM stats":"heap_memory_usage: 433255064\nnon_heap_memory_usage: 192986480\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610259000,"args":{"JVM stats":"heap_memory_usage: 433934344\nnon_heap_memory_usage: 192986480\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610262000,"args":{"JVM stats":"heap_memory_usage: 434355032\nnon_heap_memory_usage: 192985176\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610263000,"args":{"JVM stats":"heap_memory_usage: 434355032\nnon_heap_memory_usage: 192984024\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610263001,"args":{"JVM stats":"heap_memory_usage: 434497992\nnon_heap_memory_usage: 192984024\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610564000,"args":{"JVM stats":"heap_memory_usage: 524902584\nnon_heap_memory_usage: 192816184\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610566000,"args":{"JVM stats":"heap_memory_usage: 527042688\nnon_heap_memory_usage: 192816184\nloaded_class_count: 17151\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610731000,"args":{"JVM stats":"heap_memory_usage: 536306408\nnon_heap_memory_usage: 192869592\nloaded_class_count: 17151\nthread_count: 66\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610731001,"args":{"JVM stats":"heap_memory_usage: 536441176\nnon_heap_memory_usage: 192872056\nloaded_class_count: 17151\nthread_count: 66\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610735000,"args":{"JVM stats":"heap_memory_usage: 537004936\nnon_heap_memory_usage: 192894240\nloaded_class_count: 17151\nthread_count: 66\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1509998610739000,"args":{"JVM stats":"heap_memory_usage: 537139704\nnon_heap_memory_usage: 192894240\nloaded_class_count: 17151\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609471000,"dur":5000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609476000,"dur":5000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609481000,"dur":5000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609481000,"dur":5000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609530000,"dur":2000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609532000,"dur":1000},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609534000,"dur":100},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609534000,"dur":1000},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609535000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609535000,"dur":2000},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609537000,"dur":1000},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609538000,"dur":1000},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609539000,"dur":2000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609541000,"dur":1000},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609542000,"dur":100},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609542000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609542000,"dur":100},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609542000,"dur":1000},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609543000,"dur":4000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609550000,"dur":1000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609551000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609533000,"dur":18000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609551000,"dur":2000},{"pid":1,"tid":16,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":100},{"pid":1,"tid":16,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":100},{"pid":1,"tid":16,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":100},{"pid":1,"tid":16,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":100},{"pid":1,"tid":16,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":100},{"pid":1,"tid":16,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":100},{"pid":1,"tid":16,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":1000},{"pid":1,"tid":16,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609554000,"dur":100},{"pid":1,"tid":16,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609554000,"dur":100},{"pid":1,"tid":16,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609554000,"dur":100},{"pid":1,"tid":16,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609554000,"dur":100},{"pid":1,"tid":16,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609554000,"dur":100},{"pid":1,"tid":16,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609554000,"dur":1000},{"pid":1,"tid":16,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609556000,"dur":100},{"pid":1,"tid":16,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609556000,"dur":100},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1509998609553000,"dur":3000},{"pid":1,"tid":16,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609556000,"dur":2000},{"pid":1,"tid":16,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609558000,"dur":4000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609530000,"dur":32000},{"pid":1,"tid":16,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609562000,"dur":100},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998609487000,"dur":75000},{"pid":1,"tid":0,"id":46,"name":"task: delete","args":{"span_id":"46","task":"type: 104\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609570000,"dur":1000},{"pid":1,"tid":0,"id":47,"name":"task: delete","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 104\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609571000,"dur":60000},{"pid":1,"tid":0,"id":48,"name":"task: unknown task type","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1509998609632000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: app pre build","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609632000,"dur":38000},{"pid":1,"tid":0,"id":50,"name":"task: aidl compile","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609671000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: renderscript compile","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609677000,"dur":4000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609681000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: generate build config","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609682000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: prepare lint jar","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1509998609683000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: generate res values","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609684000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: unknown task type","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609684000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: merge resources","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998609685000,"dur":323000},{"pid":1,"tid":0,"id":58,"name":"task: compatible screens manifest","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610009000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: merge manifests","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610012000,"dur":15000},{"pid":1,"tid":0,"id":60,"name":"task: splits discovery","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610027000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: process android resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 19\n}\ntarget_sdk_version {\n api_level: 21\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610028000,"dur":184000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610213000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: test pre build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610213000,"dur":22000},{"pid":1,"tid":0,"id":64,"name":"task: aidl compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610236000,"dur":6000},{"pid":1,"tid":0,"id":65,"name":"task: process test manifest","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610242000,"dur":13000},{"pid":1,"tid":0,"id":66,"name":"task: renderscript compile","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610255000,"dur":4000},{"pid":1,"tid":0,"id":67,"name":"task: generate build config","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610260000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate res values","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610262000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610263000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: merge resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610264000,"dur":300000},{"pid":1,"tid":0,"id":71,"name":"task: splits discovery","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610564000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: process android resources","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610567000,"dur":164000},{"pid":1,"tid":0,"id":73,"name":"task: unknown task type","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610731000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: mockable android jar","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1509998610731000,"dur":4000},{"pid":1,"tid":16,"id":75,"name":"base plugin build finished","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1509998610736000,"dur":100}] \ No newline at end of file diff --git a/examples/android/build/android-profile/profile-2017-11-06-22-03-30-739.rawproto b/examples/android/build/android-profile/profile-2017-11-06-22-03-30-739.rawproto new file mode 100644 index 00000000..a0721248 Binary files /dev/null and b/examples/android/build/android-profile/profile-2017-11-06-22-03-30-739.rawproto differ diff --git a/examples/android/build_apk.sh b/examples/android/build_apk.sh index df6f2b8c..9c237f33 100755 --- a/examples/android/build_apk.sh +++ b/examples/android/build_apk.sh @@ -31,12 +31,12 @@ die () { . $DLANGUI_DIR/android/android_ldc_armv7a.mk -echo "Updating ant project..." +#echo "Updating ant project..." #========================================================= -$SDK/tools/android update project -p . -s --target $ANDROID_TARGET || die 3 "Android Project update is failed" +#$SDK/tools/android update project -p . -s --target $ANDROID_TARGET || die 3 "Android Project update is failed" echo "Building APK..." #========================================================= -ant debug || die 4 "Android APK creation is failed" +./gradlew assembleDebug || die 4 "Android APK creation is failed" echo "Successful." diff --git a/examples/android/example.iml b/examples/android/example.iml new file mode 100644 index 00000000..f82f0d8a --- /dev/null +++ b/examples/android/example.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/android/gradle.properties b/examples/android/gradle.properties new file mode 100644 index 00000000..aac7c9b4 --- /dev/null +++ b/examples/android/gradle.properties @@ -0,0 +1,17 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true diff --git a/examples/android/gradle/wrapper/gradle-wrapper.jar b/examples/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..13372aef Binary files /dev/null and b/examples/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/examples/android/gradle/wrapper/gradle-wrapper.properties b/examples/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..f8babaee --- /dev/null +++ b/examples/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Nov 06 21:19:18 EET 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/examples/android/gradlew b/examples/android/gradlew new file mode 100755 index 00000000..9d82f789 --- /dev/null +++ b/examples/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# 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 +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# 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 + +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" ] ; 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 + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/examples/android/gradlew.bat b/examples/android/gradlew.bat new file mode 100644 index 00000000..aec99730 --- /dev/null +++ b/examples/android/gradlew.bat @@ -0,0 +1,90 @@ +@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 + +@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= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@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 Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_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=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +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/examples/android/jni/app.d b/examples/android/jni/app.d index c6f212a3..71057ba9 100644 --- a/examples/android/jni/app.d +++ b/examples/android/jni/app.d @@ -1,4 +1,4 @@ -module app; +module app; import dlangui; @@ -6,78 +6,75 @@ mixin APP_ENTRY_POINT; /// entry point for dlangui based application extern (C) int UIAppMain(string[] args) { - // create window - Log.d("Creating window"); - if (!Platform.instance) { - Log.e("Platform.instance is null!!!"); - } - Window window = Platform.instance.createWindow("DlangUI example - HelloWorld", null); - Log.d("Window created"); - // create some widget to show in window - //window.mainWidget = (new Button()).text("Hello, world!"d).margins(Rect(20,20,20,20)); - window.mainWidget = parseML(q{ - VerticalLayout { - margins: 10 - padding: 10 - layoutWidth: fill - backgroundColor: "#C0E0E070" // semitransparent yellow background - // red bold text with size = 150% of base style size and font face Arial - TextWidget { text: "Hello World example for DlangUI"; textColor: "red"; fontSize: 150%; fontWeight: 800; fontFace: "Arial" } - // arrange controls as form - table with two columns - TableLayout { - colCount: 2 - layoutWidth: fill - TextWidget { text: "param 1" } - EditLine { id: edit1; text: "some text"; layoutWidth: fill; margins: 3pt } - TextWidget { text: "param 2" } - EditLine { id: edit2; text: "some text for param2"; layoutWidth: fill; margins: 3pt } - TextWidget { text: "Radio buttons" } - // arrange some radio buttons vertically - VerticalLayout { - layoutWidth: fill - RadioButton { id: rb1; text: "Item 1" } - RadioButton { id: rb2; text: "Item 2" } - RadioButton { id: rb3; text: "Item 3" } - } - TextWidget { text: "Switches:" } - VerticalLayout { - SwitchWidget { checked: true } - SwitchWidget { checked: false } - SwitchWidget { checked: true; enabled: false } - } - TextWidget { text: "Checkboxes:" } - // arrange some checkboxes horizontally - VerticalLayout { - layoutWidth: fill - CheckBox { id: cb1; text: "checkbox 1" } - CheckBox { id: cb2; text: "checkbox 2" } - } - } - HorizontalLayout { - Button { id: btnOk; text: "Ok" } - Button { id: btnCancel; text: "Cancel" } - } - } - }); - // you can access loaded items by id - e.g. to assign signal listeners - auto edit1 = window.mainWidget.childById!EditLine("edit1"); - auto edit2 = window.mainWidget.childById!EditLine("edit2"); - // close window on Cancel button click - window.mainWidget.childById!Button("btnCancel").click = delegate(Widget w) { - window.close(); - return true; - }; - // show message box with content of editors - window.mainWidget.childById!Button("btnOk").click = delegate(Widget w) { - window.showMessageBox(UIString("Ok button pressed"d), - UIString("Editors content\nEdit1: "d ~ edit1.text ~ "\nEdit2: "d ~ edit2.text)); - return true; - }; + // load theme from file "theme_default.xml" + //Platform.instance.uiTheme = "theme_default"; - // show window - window.show(); + // create window + Log.d("Creating window"); + Window window = Platform.instance.createWindow("DlangUI example - HelloWorld", null); + Log.d("Window created"); - // run message loop - return Platform.instance.enterMessageLoop(); + // create some widget to show in window + //window.mainWidget = (new Button()).text("Hello, world!"d).margins(Rect(20,20,20,20)); + window.mainWidget = parseML(q{ + VerticalLayout { + margins: 10pt + padding: 10pt + layoutWidth: fill + // red bold text with size = 150% of base style size and font face Arial + TextWidget { text: "Hello World example for DlangUI"; textColor: "red"; fontSize: 150%; fontWeight: 800; fontFace: "Arial" } + // arrange controls as form - table with two columns + TableLayout { + colCount: 2 + layoutWidth: fill + TextWidget { text: "param 1" } + EditLine { id: edit1; text: "some text"; layoutWidth: fill } + TextWidget { text: "param 2" } + EditLine { id: edit2; text: "some text for param2"; layoutWidth: fill } + TextWidget { text: "some radio buttons" } + // arrange some radio buttons vertically + VerticalLayout { + layoutWidth: fill + RadioButton { id: rb1; text: "Item 1" } + RadioButton { id: rb2; text: "Item 2" } + RadioButton { id: rb3; text: "Item 3" } + } + TextWidget { text: "and checkboxes" } + // arrange some checkboxes horizontally + HorizontalLayout { + layoutWidth: fill + CheckBox { id: cb1; text: "checkbox 1" } + CheckBox { id: cb2; text: "checkbox 2" } + ComboEdit { id: ce1; text: "some text"; minWidth: 20pt; items: ["Item 1", "Item 2", "Additional item"] } + } + } + EditBox { layoutWidth: 20pt; layoutHeight: 10pt } + HorizontalLayout { + Button { id: btnOk; text: "Ok" } + Button { id: btnCancel; text: "Cancel" } + } + } + }); + // you can access loaded items by id - e.g. to assign signal listeners + auto edit1 = window.mainWidget.childById!EditLine("edit1"); + auto edit2 = window.mainWidget.childById!EditLine("edit2"); + // close window on Cancel button click + window.mainWidget.childById!Button("btnCancel").click = delegate(Widget w) { + window.close(); + return true; + }; + // show message box with content of editors + window.mainWidget.childById!Button("btnOk").click = delegate(Widget w) { + window.showMessageBox(UIString.fromRaw("Ok button pressed"d), + UIString.fromRaw("Editors content\nEdit1: "d ~ edit1.text ~ "\nEdit2: "d ~ edit2.text)); + return true; + }; + + // show window + window.show(); + + // run message loop + return Platform.instance.enterMessageLoop(); } + diff --git a/examples/android/local.properties b/examples/android/local.properties new file mode 100644 index 00000000..f4e1b3e5 --- /dev/null +++ b/examples/android/local.properties @@ -0,0 +1,12 @@ +## This file is automatically generated by Android Studio. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Mon Nov 06 21:25:18 EET 2017 +ndk.dir=/media/erno/TOSHIBA_ISO/Android/Sdk/ndk-bundle +sdk.dir=/media/erno/TOSHIBA_ISO/Android/Sdk diff --git a/examples/android/settings.gradle b/examples/android/settings.gradle new file mode 100644 index 00000000..e7b4def4 --- /dev/null +++ b/examples/android/settings.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/src/dlangui/graphics/glsupport.d b/src/dlangui/graphics/glsupport.d index 43c7df76..37d6dce9 100644 --- a/src/dlangui/graphics/glsupport.d +++ b/src/dlangui/graphics/glsupport.d @@ -700,7 +700,7 @@ bool initGLSupport(bool legacy = false) { } if (!_glSupport) { Log.d("glSupport not initialized: trying to create"); - int major = to!int(glGetString(GL_VERSION)[0 .. 1]); + int major = *cast(int*)(glGetString(GL_VERSION)[0 .. 1].ptr); legacy = legacy || (major < 3); _glSupport = new GLSupport(legacy); if (!_glSupport.valid) { @@ -835,11 +835,12 @@ final class GLSupport { /// This function is needed to draw custom OpenGL scene correctly (especially on legacy API) private void resetBindings() { - if (glUseProgram) + import std.traits : isFunction; + if (isFunction!glUseProgram) GLProgram.unbind(); - if (glBindVertexArray) + if (isFunction!glBindVertexArray) VAO.unbind(); - if (glBindBuffer) + if (isFunction!glBindBuffer) VBO.unbind(); }