diff --git a/libs/hwui/apex/include/android/graphics/bitmap.h b/libs/hwui/apex/include/android/graphics/bitmap.h
index 45fec2ab..8c4b439 100644
--- a/libs/hwui/apex/include/android/graphics/bitmap.h
+++ b/libs/hwui/apex/include/android/graphics/bitmap.h
@@ -18,6 +18,7 @@
 
 #include <android/bitmap.h>
 #include <android/data_space.h>
+#include <cutils/compiler.h>
 #include <jni.h>
 #include <sys/cdefs.h>
 
@@ -37,31 +38,31 @@
  * NOTE: This API does not need to remain as an APEX API if/when we pull libjnigraphics into the
  *       UI module.
  */
-AndroidBitmapInfo ABitmap_getInfoFromJava(JNIEnv* env, jobject bitmapObj);
+ANDROID_API AndroidBitmapInfo ABitmap_getInfoFromJava(JNIEnv* env, jobject bitmapObj);
 
 /**
  *
  * @return ptr to an opaque handle to the native bitmap or null if the java bitmap has been recycled
  *         or does not exist.
  */
-ABitmap* ABitmap_acquireBitmapFromJava(JNIEnv* env, jobject bitmapObj);
+ANDROID_API ABitmap* ABitmap_acquireBitmapFromJava(JNIEnv* env, jobject bitmapObj);
 
-ABitmap* ABitmap_copy(ABitmap* srcBitmap, AndroidBitmapFormat dstFormat);
+ANDROID_API ABitmap* ABitmap_copy(ABitmap* srcBitmap, AndroidBitmapFormat dstFormat);
 
-void ABitmap_acquireRef(ABitmap* bitmap);
-void ABitmap_releaseRef(ABitmap* bitmap);
+ANDROID_API void ABitmap_acquireRef(ABitmap* bitmap);
+ANDROID_API void ABitmap_releaseRef(ABitmap* bitmap);
 
-AndroidBitmapInfo ABitmap_getInfo(ABitmap* bitmap);
-ADataSpace ABitmap_getDataSpace(ABitmap* bitmap);
+ANDROID_API AndroidBitmapInfo ABitmap_getInfo(ABitmap* bitmap);
+ANDROID_API ADataSpace ABitmap_getDataSpace(ABitmap* bitmap);
 
-void* ABitmap_getPixels(ABitmap* bitmap);
-void ABitmap_notifyPixelsChanged(ABitmap* bitmap);
+ANDROID_API void* ABitmap_getPixels(ABitmap* bitmap);
+ANDROID_API void ABitmap_notifyPixelsChanged(ABitmap* bitmap);
 
-AndroidBitmapFormat ABitmapConfig_getFormatFromConfig(JNIEnv* env, jobject bitmapConfigObj);
-jobject ABitmapConfig_getConfigFromFormat(JNIEnv* env, AndroidBitmapFormat format);
+ANDROID_API AndroidBitmapFormat ABitmapConfig_getFormatFromConfig(JNIEnv* env, jobject bitmapConfigObj);
+ANDROID_API jobject ABitmapConfig_getConfigFromFormat(JNIEnv* env, AndroidBitmapFormat format);
 
 // NDK access
-int ABitmap_compress(const AndroidBitmapInfo* info, ADataSpace dataSpace, const void* pixels,
+ANDROID_API int ABitmap_compress(const AndroidBitmapInfo* info, ADataSpace dataSpace, const void* pixels,
                      AndroidBitmapCompressFormat format, int32_t quality, void* userContext,
                      AndroidBitmap_CompressWriteFunc);
 /**
@@ -75,7 +76,7 @@
  *         a reference on the buffer, and the client must call
  *         AHardwareBuffer_release when finished with it.
  */
-AHardwareBuffer* ABitmap_getHardwareBuffer(ABitmap* bitmap);
+ANDROID_API AHardwareBuffer* ABitmap_getHardwareBuffer(ABitmap* bitmap);
 
 __END_DECLS
 
diff --git a/libs/hwui/apex/include/android/graphics/canvas.h b/libs/hwui/apex/include/android/graphics/canvas.h
index 6fd6b06..a0cecc0 100644
--- a/libs/hwui/apex/include/android/graphics/canvas.h
+++ b/libs/hwui/apex/include/android/graphics/canvas.h
@@ -20,6 +20,7 @@
 #include <android/graphics/paint.h>
 #include <android/native_window.h>
 #include <android/rect.h>
+#include <cutils/compiler.h>
 #include <jni.h>
 
 __BEGIN_DECLS
@@ -30,24 +31,24 @@
 typedef struct ACanvas ACanvas;
 
 //  One of AHardwareBuffer_Format.
-bool ACanvas_isSupportedPixelFormat(int32_t bufferFormat);
+ANDROID_API bool ACanvas_isSupportedPixelFormat(int32_t bufferFormat);
 
 /**
  * Returns a native handle to a Java android.graphics.Canvas
  *
  * @return ACanvas* that is only valid for the life of the jobject.
  */
-ACanvas* ACanvas_getNativeHandleFromJava(JNIEnv* env, jobject canvas);
+ANDROID_API ACanvas* ACanvas_getNativeHandleFromJava(JNIEnv* env, jobject canvas);
 
 /**
  * Creates a canvas that wraps the buffer
  *
  * @param buffer is a required param.  If no buffer is provided a nullptr will be returned.
  */
-ACanvas* ACanvas_createCanvas(const ANativeWindow_Buffer* buffer,
+ANDROID_API ACanvas* ACanvas_createCanvas(const ANativeWindow_Buffer* buffer,
                               int32_t /*android_dataspace_t*/ dataspace);
 
-void ACanvas_destroyCanvas(ACanvas* canvas);
+ANDROID_API void ACanvas_destroyCanvas(ACanvas* canvas);
 
 /**
  * Updates the canvas to render into the pixels in the provided buffer
@@ -60,7 +61,7 @@
  *         method will behave as if nullptr were passed as the input buffer and the previous buffer
  *         will still be released.
  */
-bool ACanvas_setBuffer(ACanvas* canvas, const ANativeWindow_Buffer* buffer,
+ANDROID_API bool ACanvas_setBuffer(ACanvas* canvas, const ANativeWindow_Buffer* buffer,
                        int32_t /*android_dataspace_t*/ dataspace);
 
 /**
@@ -68,21 +69,21 @@
  *
  * @param clipRect required
  */
-void ACanvas_clipRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false);
+ANDROID_API void ACanvas_clipRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false);
 
 /**
  * Clips operations on the canvas to the difference of the current clip and the provided clipRect.
  *
  * @param clipRect required
  */
-void ACanvas_clipOutRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false);
+ANDROID_API void ACanvas_clipOutRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false);
 
 /**
  *
  * @param rect required
  * @param paint required
  */
-void ACanvas_drawRect(ACanvas* canvas, const ARect* rect, const APaint* paint);
+ANDROID_API void ACanvas_drawRect(ACanvas* canvas, const ARect* rect, const APaint* paint);
 
 /**
  *
@@ -91,7 +92,7 @@
  * @param top
  * @param paint
  */
-void ACanvas_drawBitmap(ACanvas* canvas, const ABitmap* bitmap, float left, float top,
+ANDROID_API void ACanvas_drawBitmap(ACanvas* canvas, const ABitmap* bitmap, float left, float top,
                         const APaint* paint);
 
 __END_DECLS
diff --git a/libs/hwui/apex/include/android/graphics/jni_runtime.h b/libs/hwui/apex/include/android/graphics/jni_runtime.h
index 872a949..487383e 100644
--- a/libs/hwui/apex/include/android/graphics/jni_runtime.h
+++ b/libs/hwui/apex/include/android/graphics/jni_runtime.h
@@ -16,15 +16,18 @@
 #ifndef ANDROID_GRAPHICS_JNI_RUNTIME_H
 #define ANDROID_GRAPHICS_JNI_RUNTIME_H
 
+#include <cutils/compiler.h>
 #include <jni.h>
 
 __BEGIN_DECLS
 
-void init_android_graphics();
+ANDROID_API void init_android_graphics();
 
-int register_android_graphics_classes(JNIEnv* env);
+ANDROID_API int register_android_graphics_classes(JNIEnv* env);
 
-void zygote_preload_graphics();
+ANDROID_API int register_android_graphics_GraphicsStatsService(JNIEnv* env);
+
+ANDROID_API void zygote_preload_graphics();
 
 __END_DECLS
 
diff --git a/libs/hwui/apex/include/android/graphics/matrix.h b/libs/hwui/apex/include/android/graphics/matrix.h
index 4039cd1..987ad13 100644
--- a/libs/hwui/apex/include/android/graphics/matrix.h
+++ b/libs/hwui/apex/include/android/graphics/matrix.h
@@ -18,6 +18,7 @@
 #define ANDROID_GRAPHICS_MATRIX_H
 
 #include <jni.h>
+#include <cutils/compiler.h>
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
@@ -31,7 +32,7 @@
  * @return true if the values param was populated and false otherwise.
 
  */
-bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]);
+ANDROID_API bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]);
 
 __END_DECLS
 
diff --git a/libs/hwui/apex/include/android/graphics/paint.h b/libs/hwui/apex/include/android/graphics/paint.h
index 5895e00..058db8d 100644
--- a/libs/hwui/apex/include/android/graphics/paint.h
+++ b/libs/hwui/apex/include/android/graphics/paint.h
@@ -16,6 +16,7 @@
 #ifndef ANDROID_GRAPHICS_PAINT_H
 #define ANDROID_GRAPHICS_PAINT_H
 
+#include <cutils/compiler.h>
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
@@ -35,11 +36,11 @@
     ABLEND_MODE_SRC      = 2,
 };
 
-APaint* APaint_createPaint();
+ANDROID_API APaint* APaint_createPaint();
 
-void APaint_destroyPaint(APaint* paint);
+ANDROID_API void APaint_destroyPaint(APaint* paint);
 
-void APaint_setBlendMode(APaint* paint, ABlendMode blendMode);
+ANDROID_API void APaint_setBlendMode(APaint* paint, ABlendMode blendMode);
 
 __END_DECLS
 
diff --git a/libs/hwui/apex/include/android/graphics/region.h b/libs/hwui/apex/include/android/graphics/region.h
index 961067a..0756d6d 100644
--- a/libs/hwui/apex/include/android/graphics/region.h
+++ b/libs/hwui/apex/include/android/graphics/region.h
@@ -16,6 +16,7 @@
 #ifndef ANDROID_GRAPHICS_REGION_H
 #define ANDROID_GRAPHICS_REGION_H
 
+#include <cutils/compiler.h>
 #include <android/rect.h>
 #include <sys/cdefs.h>
 #include <jni.h>
@@ -35,19 +36,19 @@
  * @return ARegionIterator that must be closed and must not live longer than the life
  *         of the jobject.  It returns nullptr if the region is not a valid object.
  */
-ARegionIterator* ARegionIterator_acquireIterator(JNIEnv* env, jobject region);
+ANDROID_API ARegionIterator* ARegionIterator_acquireIterator(JNIEnv* env, jobject region);
 
-void ARegionIterator_releaseIterator(ARegionIterator* iterator);
+ANDROID_API void ARegionIterator_releaseIterator(ARegionIterator* iterator);
 
-bool ARegionIterator_isComplex(ARegionIterator* iterator);
+ANDROID_API bool ARegionIterator_isComplex(ARegionIterator* iterator);
 
-bool ARegionIterator_isDone(ARegionIterator* iterator);
+ANDROID_API bool ARegionIterator_isDone(ARegionIterator* iterator);
 
-void ARegionIterator_next(ARegionIterator* iterator);
+ANDROID_API void ARegionIterator_next(ARegionIterator* iterator);
 
-ARect ARegionIterator_getRect(ARegionIterator* iterator);
+ANDROID_API ARect ARegionIterator_getRect(ARegionIterator* iterator);
 
-ARect ARegionIterator_getTotalBounds(ARegionIterator* iterator);
+ANDROID_API ARect ARegionIterator_getTotalBounds(ARegionIterator* iterator);
 
 __END_DECLS
 
diff --git a/libs/hwui/apex/include/android/graphics/renderthread.h b/libs/hwui/apex/include/android/graphics/renderthread.h
index 0a790af..50280a6 100644
--- a/libs/hwui/apex/include/android/graphics/renderthread.h
+++ b/libs/hwui/apex/include/android/graphics/renderthread.h
@@ -16,6 +16,7 @@
 #ifndef ANDROID_GRAPHICS_RENDERTHREAD_H
 #define ANDROID_GRAPHICS_RENDERTHREAD_H
 
+#include <cutils/compiler.h>
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
@@ -26,7 +27,7 @@
  *           function requires a valid fd, but does not persist or assume ownership of the fd
  *           outside the scope of this function.
  */
-void ARenderThread_dumpGraphicsMemory(int fd);
+ANDROID_API void ARenderThread_dumpGraphicsMemory(int fd);
 
 __END_DECLS
 
diff --git a/libs/hwui/jni/BitmapFactory.cpp b/libs/hwui/jni/BitmapFactory.cpp
index f3395b9..d4e27d8 100644
--- a/libs/hwui/jni/BitmapFactory.cpp
+++ b/libs/hwui/jni/BitmapFactory.cpp
@@ -4,6 +4,7 @@
 #include "BitmapFactory.h"
 #include "CreateJavaOutputStreamAdaptor.h"
 #include "GraphicsJNI.h"
+#include "MimeType.h"
 #include "NinePatchPeeker.h"
 #include "SkAndroidCodec.h"
 #include "SkBRDAllocator.h"
diff --git a/libs/hwui/jni/GraphicsJNI.h b/libs/hwui/jni/GraphicsJNI.h
index 4bf3ed1..b58a740 100644
--- a/libs/hwui/jni/GraphicsJNI.h
+++ b/libs/hwui/jni/GraphicsJNI.h
@@ -1,6 +1,8 @@
 #ifndef _ANDROID_GRAPHICS_GRAPHICS_JNI_H_
 #define _ANDROID_GRAPHICS_GRAPHICS_JNI_H_
 
+#include <cutils/compiler.h>
+
 #include "Bitmap.h"
 #include "SkBitmap.h"
 #include "SkBRDAllocator.h"
@@ -75,7 +77,7 @@
     static SkPoint* jpointf_to_point(JNIEnv*, jobject jpointf, SkPoint* point);
     static void point_to_jpointf(const SkPoint& point, JNIEnv*, jobject jpointf);
 
-    static android::Canvas* getNativeCanvas(JNIEnv*, jobject canvas);
+    ANDROID_API static android::Canvas* getNativeCanvas(JNIEnv*, jobject canvas);
     static android::Bitmap* getNativeBitmap(JNIEnv*, jobject bitmap);
     static SkImageInfo getBitmapInfo(JNIEnv*, jobject bitmap, uint32_t* outRowBytes,
                                      bool* isHardware);
diff --git a/libs/hwui/jni/GraphicsStatsService.cpp b/libs/hwui/jni/GraphicsStatsService.cpp
index e925946..6076552 100644
--- a/libs/hwui/jni/GraphicsStatsService.cpp
+++ b/libs/hwui/jni/GraphicsStatsService.cpp
@@ -25,6 +25,8 @@
 #include <stats_event.h>
 #include <stats_pull_atom_callback.h>
 #include <statslog.h>
+
+#include "android/graphics/jni_runtime.h"
 #include "GraphicsJNI.h"
 
 namespace android {
@@ -171,6 +173,9 @@
     gGraphicsStatsServiceObject = nullptr;
 }
 
+} // namespace android
+using namespace android;
+
 static const JNINativeMethod sMethods[] =
         {{"nGetAshmemSize", "()I", (void*)getAshmemSize},
          {"nCreateDump", "(IZ)J", (void*)createDump},
@@ -190,5 +195,3 @@
     return jniRegisterNativeMethods(env, "android/graphics/GraphicsStatsService", sMethods,
                                     NELEM(sMethods));
 }
-
-} // namespace android
diff --git a/core/jni/android/graphics/MimeType.h b/libs/hwui/jni/MimeType.h
similarity index 87%
rename from core/jni/android/graphics/MimeType.h
rename to libs/hwui/jni/MimeType.h
index 38a579c..fdd510c 100644
--- a/core/jni/android/graphics/MimeType.h
+++ b/libs/hwui/jni/MimeType.h
@@ -16,6 +16,7 @@
 
 #pragma once
 
+#include <cutils/compiler.h>
 #include "SkEncodedImageFormat.h"
 
-const char* getMimeType(SkEncodedImageFormat);
+ANDROID_API const char* getMimeType(SkEncodedImageFormat);
diff --git a/native/graphics/jni/imagedecoder.cpp b/native/graphics/jni/imagedecoder.cpp
index d1946b0..56f3906 100644
--- a/native/graphics/jni/imagedecoder.cpp
+++ b/native/graphics/jni/imagedecoder.cpp
@@ -20,7 +20,7 @@
 #include <android/bitmap.h>
 #include <android/data_space.h>
 #include <android/imagedecoder.h>
-#include <android/graphics/MimeType.h>
+#include <MimeType.h>
 #include <android/rect.h>
 #include <hwui/ImageDecoder.h>
 #include <log/log.h>
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index e575432..f9238e3 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <android/graphics/jni_runtime.h>
 #include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include "utils/Log.h"
@@ -49,7 +50,6 @@
 int register_android_server_Watchdog(JNIEnv* env);
 int register_android_server_HardwarePropertiesManagerService(JNIEnv* env);
 int register_android_server_SyntheticPasswordManager(JNIEnv* env);
-int register_android_graphics_GraphicsStatsService(JNIEnv* env);
 int register_android_hardware_display_DisplayViewport(JNIEnv* env);
 int register_android_server_net_NetworkStatsFactory(JNIEnv* env);
 int register_android_server_net_NetworkStatsService(JNIEnv* env);
