code: public void setLocalRotations(float[] rotations)
      {
          mNeedSync = true;
          for (int i = 0; i < mBones.length; ++i)
          {
              int t = i * 4;
              if (!mSkeleton.isLocked(i))
              {
                  Bone bone = mBones[i];
  
                  bone.setLocalRotation(rotations[t], rotations[t + 1], rotations[t + 2], rotations[t + 3]);
                  bone.Changed = LOCAL_ROT;
                  if (sDebug)
                  {
                      Log.d("BONE", "setLocalRotation: %s %s", mSkeleton.getBoneName(i), bone.toString());
                  }
              }
          }
      }
docs: Sets the local rotations for all the bones in this pose.
  <p>
  The local space rotations for each bone are copied from the
  source array of quaterions in the order of their bone index.
  The order of the bones in the array must follow the order in the skeleton for this pose.
  <p>
  All bones in the skeleton start out at the origin oriented along the bone axis (usually 0,0,1).
  The pose orients and positions each bone in the skeleton with respect to this initial state.
  The local bone matrix expresses the orientation and position of the bone relative
  to it's parent. This function sets the local orientations of all the bones from an
  array of quaternions. The position of the bones are unaffected.
  @param rotations array with the rotations for each bone.
  the angles are in the bone's local coordinate system.
  @see #setLocalRotation
  @see #getNumBones
  @see GVRSkeleton#setBoneAxis
  @see #setWorldRotations
  @see #setWorldMatrix