diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java b/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
index f172738..0822e20 100644
--- a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
+++ b/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
@@ -78,7 +78,7 @@
 
     AnimatedVectorDrawableDelegateState mCachedConstantStateDelegate;
 
-    private AnimatedVectorDrawableCompat() {
+    AnimatedVectorDrawableCompat() {
         this(null, null, null);
     }
 
@@ -632,7 +632,7 @@
         }
     }
 
-    private final Callback mCallback = new Callback() {
+    final Callback mCallback = new Callback() {
         @Override
         public void invalidateDrawable(Drawable who) {
             invalidateSelf();
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/PathParser.java b/graphics/drawable/static/src/android/support/graphics/drawable/PathParser.java
index 2ee43c2..b68d2cb 100644
--- a/graphics/drawable/static/src/android/support/graphics/drawable/PathParser.java
+++ b/graphics/drawable/static/src/android/support/graphics/drawable/PathParser.java
@@ -40,7 +40,7 @@
      * @throws IllegalArgumentException       if {@code start > end}
      * @throws NullPointerException           if {@code original == null}
      */
-    private static float[] copyOfRange(float[] original, int start, int end) {
+    static float[] copyOfRange(float[] original, int start, int end) {
         if (start > end) {
             throw new IllegalArgumentException();
         }
@@ -183,6 +183,9 @@
         // next float starts with a '-' or a '.'.
         int mEndPosition;
         boolean mEndWithNegOrDot;
+
+        ExtractFloatResult() {
+        }
     }
 
     /**
@@ -294,12 +297,12 @@
         char type;
         float[] params;
 
-        private PathDataNode(char type, float[] params) {
+        PathDataNode(char type, float[] params) {
             this.type = type;
             this.params = params;
         }
 
-        private PathDataNode(PathDataNode n) {
+        PathDataNode(PathDataNode n) {
             type = n.type;
             params = copyOfRange(n.params, 0, n.params.length);
         }
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java b/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
index 24a249f..40f4c1a 100644
--- a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
+++ b/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
@@ -108,11 +108,11 @@
     private final Matrix mTmpMatrix = new Matrix();
     private final Rect mTmpBounds = new Rect();
 
-    private VectorDrawableCompat() {
+    VectorDrawableCompat() {
         mVectorState = new VectorDrawableCompatState();
     }
 
-    private VectorDrawableCompat(@NonNull VectorDrawableCompatState state) {
+    VectorDrawableCompat(@NonNull VectorDrawableCompatState state) {
         mVectorState = state;
         mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode);
     }
@@ -442,7 +442,7 @@
         return drawable;
     }
 
-    private static int applyAlpha(int color, float alpha) {
+    static int applyAlpha(int color, float alpha) {
         int alphaBytes = Color.alpha(color);
         color &= 0x00FFFFFF;
         color |= ((int) (alphaBytes * alpha)) << 24;
@@ -920,7 +920,7 @@
         /////////////////////////////////////////////////////
         // Variables below need to be copied (deep copy if applicable) for mutation.
         private int mChangingConfigurations;
-        private final VGroup mRootGroup;
+        final VGroup mRootGroup;
         float mBaseWidth = 0;
         float mBaseHeight = 0;
         float mViewportWidth = 0;
@@ -1136,7 +1136,7 @@
         // Variables below need to be copied (deep copy if applicable) for mutation.
         final ArrayList<Object> mChildren = new ArrayList<Object>();
 
-        private float mRotate = 0;
+        float mRotate = 0;
         private float mPivotX = 0;
         private float mPivotY = 0;
         private float mScaleX = 1;
@@ -1147,7 +1147,7 @@
         // mLocalMatrix is updated based on the update of transformation information,
         // either parsed from the XML or by animation.
         private final Matrix mLocalMatrix = new Matrix();
-        private int mChangingConfigurations;
+        int mChangingConfigurations;
         private int[] mThemeAttrs;
         private String mGroupName = null;
 
