code: public void setBoneMap(String bonemap)
      {
          if ((bonemap == null) || bonemap.isEmpty())
          {
              throw new IllegalArgumentException("BoneMap cannot be empty");
          }
          if (mSourceSkeleton == null)
          {
              throw new IllegalArgumentException("Source skeleton cannot be null");
          }
          String[] lines = bonemap.split("[\r\n]");
  
          mBoneMap = new int[mSourceSkeleton.getNumBones()];
          Arrays.fill(mBoneMap, -1);
          for (String line : lines)
          {
              String[] words;
  
              line = line.trim();
              if (line.isEmpty())
              {
                  continue;
              }
              words = line.split("[\t ]");
              int sourceIndex = mSourceSkeleton.getBoneIndex(words[0]);
              int destIndex = mDestSkeleton.getBoneIndex(words[1]);
  
              if ((sourceIndex >= 0) && (destIndex >= 0))
              {
                  mBoneMap[sourceIndex] = destIndex;
                  Log.w("BONE", "%s %d -> %s %d",
                        words[0], sourceIndex, words[1], destIndex);
              }
              else
              {
                  Log.w("GVRPoseMapper", "makeBoneMap: cannot find bone " + words[0]);
              }
          }
      }
docs: Set the bone map between source and target.
  @param bonemap	string with source to target bone mappings
  
  Each line in the bone map string contains the name of a source
  bone followed by the name of the corresponding target bone.
  The names can be separated by spaces or tabs.
  
  @see GVRSkeleton