diff --git a/build.sh b/build.sh
index 8b29a8c..0571fe3 100755
--- a/build.sh
+++ b/build.sh
@@ -17,6 +17,9 @@
 elif [ "$OPTION" = "release" ]
 then
     premake5 gmake2 && make config=release -j7
+elif [ "$OPTION" = "android" ]
+then
+    premake5 --with-low-level-rendering gmake2 && make config=release -j7
 else
     premake5 gmake2 && make -j7
 fi
diff --git a/renderer/library/build.sh b/renderer/library/build.sh
index cc912b1..b7c47f3 100755
--- a/renderer/library/build.sh
+++ b/renderer/library/build.sh
@@ -16,11 +16,14 @@
     echo build.sh release - build release library 
 elif [ "$OPTION" = "clean" ]
 then
-    echo Cleaning project ...
+    echo Cleaning renderer_library project ...
     premake5 clean
 elif [ "$OPTION" = "release" ]
 then
-    premake5 gmake && make config=release -j7
+    premake5 --for-macos gmake && make config=release -j7
+elif [ "$OPTION" = "android" ]
+then
+    premake5 --for-android gmake && make config=release -j7
 else
-    premake5 gmake && make -j7
+    premake5 --for-macos gmake && make -j7
 fi
\ No newline at end of file
diff --git a/renderer/library/build/premake5.lua b/renderer/library/build/premake5.lua
index a28d333..f2391b2 100644
--- a/renderer/library/build/premake5.lua
+++ b/renderer/library/build/premake5.lua
@@ -9,17 +9,10 @@
 objdir "obj/%{cfg.buildcfg}"
 includedirs {"../include", "../../../include"}
 
-if os.host() == "macosx" then
-    links {"Cocoa.framework", "rive"}
-    defines {"RIVE_HAS_METAL", "RIVE_HAS_OPENGL"}
-    defines {"GL_SILENCE_DEPRECATION"}
-    includedirs {"../../dependencies/DiligentEngine_build/build/include"}
-    files {"../src/**.mm"}
-else
-    links {"rive"}
-end
-
-libdirs {"../../../build/bin/%{cfg.buildcfg}", "../../dependencies/skia/out/Static"}
+newoption {
+    trigger = "for-android",
+    description = "Builds in utility classes and methods used for low level renderering implementations that work with Android systems"
+}
 
 files {"../src/**.cpp"}
 
@@ -33,6 +26,19 @@
 defines {"RELEASE"}
 optimize "On"
 
+configuration "for-android"
+    links {"rive"}
+    defines {"RIVE_HAS_OPENGL", "ANDROID", "GL_SILENCE_DEPRECATION"}
+    libdirs {"../../../build/bin/%{cfg.buildcfg}"}
+
+configuration "for-macos"
+    links {"Cocoa.framework", "rive"}
+    defines {"RIVE_HAS_METAL", "RIVE_HAS_OPENGL"}
+    defines {"GL_SILENCE_DEPRECATION"}
+    includedirs {"../../dependencies/DiligentEngine_build/build/include"}
+    files {"../src/**.mm"}
+    libdirs {"../../../build/bin/%{cfg.buildcfg}", "../../dependencies/skia/out/Static"}
+
 -- Clean Function --
 newaction {
     trigger = "clean",
diff --git a/renderer/library/include/opengl/opengl.h b/renderer/library/include/opengl/opengl.h
index 1f1cd48..6102ff9 100644
--- a/renderer/library/include/opengl/opengl.h
+++ b/renderer/library/include/opengl/opengl.h
@@ -11,8 +11,8 @@
 #include <OpenGL/gl3.h>
 #endif
 #elif defined(__ANDROID__) || defined(ANDROID)
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
+#include <GLES3/gl3.h>
+#include <GLES3/gl3ext.h>
 #elif defined(__linux__) || defined(__unix__) || defined(__posix__)
 #include <GL/gl.h>
 #include <GL/glu.h>
diff --git a/renderer/library/src/opengl/opengl_shaders.cpp b/renderer/library/src/opengl/opengl_shaders.cpp
index 9da09c9..9e8560d 100644
--- a/renderer/library/src/opengl/opengl_shaders.cpp
+++ b/renderer/library/src/opengl/opengl_shaders.cpp
@@ -1,8 +1,8 @@
 
-const char* vertexShaderSource = R"""(
-#version 330 core
 
-layout (location = 0) in vec2 position;
+const char* vertexShaderSource = R"""(#version 300 es
+
+		layout(location = 0) in vec2 position;
 
 out vec2 pos;
 
@@ -10,15 +10,14 @@
 uniform mat4 transform;
 uniform mat4 localTransform;
 
-void main() 
+void main()
 {
-    gl_Position = projection*transform*vec4(position, 0.0, 1.0);
-    pos = (localTransform*vec4(position, 0.0, 1.0)).xy;
+	gl_Position = projection * transform * vec4(position, 0.0, 1.0);
+	pos = (localTransform * vec4(position, 0.0, 1.0)).xy;
 }
 )""";
 
-const char* fragmentShaderSource = R"""(
-#version 330 core
+const char* fragmentShaderSource = R"""(#version 300 es
 
 #ifdef GL_ES
 precision highp float;
@@ -35,59 +34,58 @@
 
 void main()
 {
-    if (fillType == 0)
-    {
-        // solid
-        fragColor = color;//vec4(color.rgb * color.a, color.a);
-    }
-    else if (fillType == 1)
-    {
-        // linear
+	if (fillType == 0)
+	{
+		// solid
+		fragColor = color; // vec4(color.rgb * color.a, color.a);
+	}
+	else if (fillType == 1)
+	{
+		// linear
 
-        vec2 start = position.xy;
-        vec2 end = position.zw;
+		vec2 start = position.xy;
+		vec2 end = position.zw;
 
-        
-        vec2 toEnd = end - start;
-        float lengthSquared = toEnd.x * toEnd.x + toEnd.y * toEnd.y;
-        float f = dot(pos - start, toEnd) / lengthSquared;
-        fragColor =
-            mix(colors[0], colors[1], smoothstep(stops[0], stops[1], f));
-        for (int i = 1; i < 15; ++i)
-        {
-            if (i >= count - 1)
-            {
-                break;
-            }
-            fragColor = mix(fragColor,
-                            colors[i + 1],
-                            smoothstep(stops[i], stops[i + 1], f));
-        }
-        // float alpha = fragColor.w;
-        // fragColor = vec4(fragColor.xyz * alpha, alpha);
-    }
-    else if (fillType == 2)
-    {
-        // radial
+		vec2 toEnd = end - start;
+		float lengthSquared = toEnd.x * toEnd.x + toEnd.y * toEnd.y;
+		float f = dot(pos - start, toEnd) / lengthSquared;
+		fragColor =
+				mix(colors[0], colors[1], smoothstep(stops[0], stops[1], f));
+		for (int i = 1; i < 15; ++i)
+		{
+			if (i >= count - 1)
+			{
+				break;
+			}
+			fragColor = mix(fragColor,
+											colors[i + 1],
+											smoothstep(stops[i], stops[i + 1], f));
+		}
+		// float alpha = fragColor.w;
+		// fragColor = vec4(fragColor.xyz * alpha, alpha);
+	}
+	else if (fillType == 2)
+	{
+		// radial
 
-        vec2 start = position.xy;
-        vec2 end = position.zw;
-        
-        float f = distance(start, pos) / distance(start, end);
-        fragColor =
-            mix(colors[0], colors[1], smoothstep(stops[0], stops[1], f));
-        for (int i = 1; i < 15; ++i)
-        {
-            if (i >= count - 1)
-            {
-                break;
-            }
-            fragColor = mix(fragColor,
-                            colors[i + 1],
-                            smoothstep(stops[i], stops[i + 1], f));
-        }
-        // float alpha = fragColor.w;
-        // fragColor = vec4(fragColor.xyz * alpha, alpha);
-    }
+		vec2 start = position.xy;
+		vec2 end = position.zw;
+
+		float f = distance(start, pos) / distance(start, end);
+		fragColor =
+				mix(colors[0], colors[1], smoothstep(stops[0], stops[1], f));
+		for (int i = 1; i < 15; ++i)
+		{
+			if (i >= count - 1)
+			{
+				break;
+			}
+			fragColor = mix(fragColor,
+											colors[i + 1],
+											smoothstep(stops[i], stops[i + 1], f));
+		}
+		// float alpha = fragColor.w;
+		// fragColor = vec4(fragColor.xyz * alpha, alpha);
+	}
 }
 )""";
\ No newline at end of file
