OSDN Git Service

AI 147012: A readme describing the usage and limitations of MkStubs.
authorRaphael Moll <>
Mon, 20 Apr 2009 22:40:40 +0000 (15:40 -0700)
committerThe Android Open Source Project <initial-contribution@android.com>
Mon, 20 Apr 2009 22:40:40 +0000 (15:40 -0700)
  BUG=1778786

Automated import of CL 147012

tools/mkstubs/README.txt [new file with mode: 0644]

diff --git a/tools/mkstubs/README.txt b/tools/mkstubs/README.txt
new file mode 100644 (file)
index 0000000..8f9abbc
--- /dev/null
@@ -0,0 +1,90 @@
+2009/04/20.
+
+-------
+1- Goal
+-------
+
+MkStub is small tool that takes a given JAR and filters all the private stuff we don't want to
+expose, e.g.:
+- remove all private members.
+- only include a subset of classes.
+- exclude specific classes, fields or methods.
+
+Each method body is replaced by the bytecode for 'throw new RuntimeException("stub");'.
+
+
+--------
+2- Usage
+--------
+
+To control it, you give it patterns like this:
+
+  +foo  => accepts all items which signature is exactly "foo"
+  +foo* => accepts all items which signature starts by "foo"
+  -bar  => rejects all items which signature is exactly "bar"
+  -bar* => rejects all items which signature starts by "bar"
+
+Signatures are defined by:
+- a package name, e.g. com.android.blah
+- a dot followed by a class name
+- a # followed by a field or method name
+- an internal "Java method signature" that define parameters types and return value. 
+
+Examples of signatures:
+ com.android.blah
+ com.android.blah.MyClass
+ com.android.blah.MyClass$MyInnerClass
+ com.android.blah.MyClass#mPrivateField
+ com.android.blah.MyClass#getInternalStuff
+ com.android.blah.MyClass#getInternalStuff(Ljava/lang/String;I)V
+
+An example of configuration file:
+ +com.android.blah
+ -com.android.blah.MyClass$MyInnerClass
+ -com.android.blah.MyClass#mPrivateField
+ -com.android.blah.MyClass#getInternalStuff(Ljava/lang/String;I)V
+
+This would include only the indicated package yet would totally exclude the inner class
+and the specific field and the method with the exact given signature.
+
+
+
+To invoke MkStub, the syntax is:
+
+  $ java -jar mkstubs input.jar output.jar [@configfile -pattern +pattern ...]
+    
+
+
+--------------------
+3- Known Limitations
+--------------------
+
+Most of the following limitations exist solely because of the short development time and
+because the tool was designed to solve one task and not just to be super generic. That means
+any limitation here can be easily lifted.
+
+- The generated constructors are not proper. They do not invoke the matching super()
+  before the generated throw exception. Any attempt to load such a class should trigger
+  an error from the byte code verifier or the class loader.
+
+- We do not currently check whether a class or method uses only included types.
+  Suggestion: if type x.y.z is excluded, then any field, annotation, generic type,
+  method parameter or return value that uses that type should generate a fatal error.
+
+- We do not filter out private classes. Their .class will still be present in the
+  output (and stubbed), unless they are explicitly excluded.
+  This is not orthogonal to the fact that private fields and methods are automatically
+  excluded.
+
+- Private fields and methods are automatically excluded. There is no command line
+  switch to prevent that.
+
+- The stubbed source is always generated. For example if the output jar name is
+  given as ~/somedir/myfinal.jar, there will be a directory created at
+  ~/somedir/myfinal.jar_sources that will contain the equivalent Java sources.
+  There is not command line switch to prevent that.
+
+- There is no attempt to match features or behavior with DroidDoc.
+
+-- 
+end