Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b555b59f authored by Paulo Casanova's avatar Paulo Casanova
Browse files

Updated JNI interface.

Added new "ping" method used to detect if the shared
library has already been loaded.

Fixed a few bugs in the implementation (and now it works
from the Java side).

See http://ag/1590668 for the implementation on devtools.

Test: Done on the tools side
Change-Id: Ifa41073dc3b6ac69cdb9f77e655bf261c3b4c3d1
parent 88dea2dd
Loading
Loading
Loading
Loading

tools/aapt2/jni/Aapt2.java

deleted100644 → 0
+0 −44
Original line number Diff line number Diff line
package com.android.tools.aapt2;

import java.util.List;

/**
 * {@code aapt2} JNI interface. To use the {@code aapt2} native interface, the
 * shared library must first be loaded and then a new instance of this class can
 * be used to access the library.
 */
public class Aapt2 {

  /**
   * Invokes {@code aapt2} to perform resource compilation.
   *
   * @param arguments arguments for compilation (see {@code Compile.cpp})
   */
  public static void compile(List<String> arguments) {
    nativeCompile(arguments);
  }

  /**
   * Invokes {@code aapt2} to perform linking.
   *
   * @param arguments arguments for linking (see {@code Link.cpp})
   */
  public static void link(List<String> arguments) {
    nativeLink(arguments);
  }

  /**
   * JNI call.
   *
   * @param arguments arguments for compilation (see {@code Compile.cpp})
   */
  private static native void nativeCompile(List<String> arguments);

  /**
   * JNI call.
   *
   * @param arguments arguments for linking (see {@code Link.cpp})
   */
  private static native void nativeLink(List<String> arguments);
}

tools/aapt2/jni/Makefile

deleted100644 → 0
+0 −25
Original line number Diff line number Diff line
#
# This Makefile will generate the JNI headers for the Aapt2 class.
#

AAPT2_PKG=com.android.tools.aapt2
AAPT2_DIR=$(shell echo -n com/android/tools/aapt2 | tr . /)
OUT=out
OUT_CLASSES=$(OUT)/classes
OUT_HEADERS=.

AAPT2_JAVA=Aapt2.java
AAPT2_CLASSES=$(OUT_CLASSES)/$(AAPT2_DIR)/Aapt2.class

AAPT2_HEADERS=$(OUT_HEADERS)/Aapt2.h

all: $(AAPT2_HEADERS)

$(AAPT2_HEADERS): $(AAPT2_JAVA) $(AAPT2_CLASSES)
	mkdir -p $(OUT_HEADERS)
	$(JAVA_HOME)/bin/javah -d $(OUT_HEADERS) -cp $(OUT_CLASSES) $(AAPT2_PKG).Aapt2

$(AAPT2_CLASSES): $(AAPT2_JAVA)
	mkdir -p $(OUT_CLASSES)
	javac -d $(OUT_CLASSES) $(AAPT2_JAVA)
+7 −2
Original line number Diff line number Diff line
@@ -46,8 +46,8 @@ static std::vector<ScopedUtfChars> list_to_utfchars(JNIEnv *env, jobject obj) {

  // Now, iterate all strings in the list
  // (note: generic erasure means get() return an Object)
  jmethodID get_method_id =
      env->GetMethodID(list_cls, "get", "()Ljava/lang/Object;");
  jmethodID get_method_id = env->GetMethodID(list_cls, "get", "(I)Ljava/lang/Object;");
  CHECK(get_method_id != 0);
  for (jint i = 0; i < size; i++) {
    // Call get(i) to get the string in the ith position.
    jobject string_obj_uncast = env->CallObjectMethod(obj, get_method_id, i);
@@ -92,3 +92,8 @@ JNIEXPORT void JNICALL Java_com_android_tools_aapt2_Aapt2_nativeLink(
  std::vector<aapt::StringPiece> link_args = extract_pieces(link_args_jni);
  aapt::Link(link_args);
}

JNIEXPORT void JNICALL Java_com_android_tools_aapt2_Aapt2_ping(
        JNIEnv *env, jclass aapt_obj) {
  // This is just a dummy method to see if the library has been loaded.
}
+8 −0
Original line number Diff line number Diff line
@@ -7,6 +7,14 @@
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_android_tools_aapt2_Aapt2
 * Method:    ping
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_android_tools_aapt2_Aapt2_ping
  (JNIEnv *, jclass);

/*
 * Class:     com_android_tools_aapt2_Aapt2
 * Method:    nativeCompile