From: Raphael Moll <> Date: Mon, 20 Apr 2009 22:40:40 +0000 (-0700) Subject: AI 147012: A readme describing the usage and limitations of MkStubs. X-Git-Tag: android-x86-1.6~9^2~92^2~42 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e5497a1a71d0a6b2270fd40cf9516977462af3f0;p=android-x86%2Fdevelopment.git AI 147012: A readme describing the usage and limitations of MkStubs. BUG=1778786 Automated import of CL 147012 --- diff --git a/tools/mkstubs/README.txt b/tools/mkstubs/README.txt new file mode 100644 index 00000000..8f9abbc0 --- /dev/null +++ b/tools/mkstubs/README.txt @@ -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