diff --git a/compiler/jni/quick/jni_compiler.h b/compiler/jni/quick/jni_compiler.h
index 3fcce55..1141994 100644
--- a/compiler/jni/quick/jni_compiler.h
+++ b/compiler/jni/quick/jni_compiler.h
@@ -17,18 +17,55 @@
 #ifndef ART_COMPILER_JNI_QUICK_JNI_COMPILER_H_
 #define ART_COMPILER_JNI_QUICK_JNI_COMPILER_H_
 
-#include "compiler.h"
-#include "dex_file.h"
+#include <vector>
+
+#include "arch/instruction_set.h"
+#include "base/array_ref.h"
 
 namespace art {
 
+class ArtMethod;
 class CompilerDriver;
-class CompiledMethod;
+class DexFile;
 
-CompiledMethod* ArtQuickJniCompileMethod(CompilerDriver* compiler,
-                                         uint32_t access_flags,
-                                         uint32_t method_idx,
-                                         const DexFile& dex_file);
+class JniCompiledMethod {
+ public:
+  JniCompiledMethod(InstructionSet instruction_set,
+                    std::vector<uint8_t>&& code,
+                    uint32_t frame_size,
+                    uint32_t core_spill_mask,
+                    uint32_t fp_spill_mask,
+                    ArrayRef<const uint8_t> cfi)
+      : instruction_set_(instruction_set),
+        code_(std::move(code)),
+        frame_size_(frame_size),
+        core_spill_mask_(core_spill_mask),
+        fp_spill_mask_(fp_spill_mask),
+        cfi_(cfi.begin(), cfi.end()) {}
+
+  JniCompiledMethod(JniCompiledMethod&& other) = default;
+  ~JniCompiledMethod() = default;
+
+  InstructionSet GetInstructionSet() const { return instruction_set_; }
+  ArrayRef<const uint8_t> GetCode() const { return ArrayRef<const uint8_t>(code_); }
+  uint32_t GetFrameSize() const { return frame_size_; }
+  uint32_t GetCoreSpillMask() const { return core_spill_mask_; }
+  uint32_t GetFpSpillMask() const { return fp_spill_mask_; }
+  ArrayRef<const uint8_t> GetCfi() const { return ArrayRef<const uint8_t>(cfi_); }
+
+ private:
+  InstructionSet instruction_set_;
+  std::vector<uint8_t> code_;
+  uint32_t frame_size_;
+  uint32_t core_spill_mask_;
+  uint32_t fp_spill_mask_;
+  std::vector<uint8_t> cfi_;
+};
+
+JniCompiledMethod ArtQuickJniCompileMethod(CompilerDriver* compiler,
+                                           uint32_t access_flags,
+                                           uint32_t method_idx,
+                                           const DexFile& dex_file);
 
 }  // namespace art
 
