Thread: JBPatch
View Single Post
Old 05-30-2012, 02:18 AM   #162
eureka
but forgot what it's like
eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.eureka ought to be getting tired of karma fortunes by now.
 
Posts: 741
Karma: 2345678
Join Date: Dec 2011
Location: north (by northwest)
Device: Kindle Touch
@ixtab, can you say how to compile jbpatcher from command-line?

I've cloned Git repo, found that ant build creates jbpatch.jar. But there were two problems. I've solved first of them (created directory lib and coiped there serp.jar). Second one is pretty tough to me: how to compile all .java file into .class files.

The best solution I've came to is:
Code:
CLASSPATH=/usr/share/java/serp.jar:src:$CLASSPATH javac src/**/*.java
But it still didn't compiled all the files. There are ma-a-ny errors:
Spoiler:
Code:
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:19: warning: sun.misc.Resource is internal proprietary API and may be removed in a future release
import sun.misc.Resource;
               ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:20: warning: sun.misc.URLClassPath is internal proprietary API and may be removed in a future release
import sun.misc.URLClassPath;
               ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:34: warning: sun.misc.URLClassPath is internal proprietary API and may be removed in a future release
	private final URLClassPath ucp;
	              ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:146: warning: sun.misc.Resource is internal proprietary API and may be removed in a future release
	private Class defineClass(String name, Resource res) throws IOException {
	                                       ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:167: warning: sun.misc.Resource is internal proprietary API and may be removed in a future release
	private void defineOrVerifyPackage(Resource res, URL url, String pkgname)
	                                   ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:207: warning: sun.misc.Resource is internal proprietary API and may be removed in a future release
	private Class defineClass(String name, Resource res, URL url)
	                                       ^
src/com/mobileread/ixtab/jbpatch/bootstrap/Stage1.java:3: package org.osgi.framework does not exist
import org.osgi.framework.BundleActivator;
                         ^
src/com/mobileread/ixtab/jbpatch/bootstrap/Stage1.java:4: package org.osgi.framework does not exist
import org.osgi.framework.BundleContext;
                         ^
src/com/mobileread/ixtab/jbpatch/bootstrap/Stage1.java:6: cannot find symbol
symbol: class BundleActivator
public class Stage1 implements BundleActivator {
                               ^
src/com/mobileread/ixtab/jbpatch/bootstrap/Stage1.java:9: cannot find symbol
symbol  : class BundleContext
location: class com.mobileread.ixtab.jbpatch.bootstrap.Stage1
	public void start(BundleContext arg0) throws Exception {
	                  ^
src/com/mobileread/ixtab/jbpatch/bootstrap/Stage1.java:23: cannot find symbol
symbol  : class BundleContext
location: class com.mobileread.ixtab.jbpatch.bootstrap.Stage1
	public void stop(BundleContext arg0) throws Exception {
	                 ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:6: package com.amazon.kindle.util.lipc does not exist
import com.amazon.kindle.util.lipc.LipcEvent;
                                  ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:7: package com.amazon.kindle.util.lipc does not exist
import com.amazon.kindle.util.lipc.LipcEventListener;
                                  ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:8: package com.amazon.kindle.util.lipc does not exist
import com.amazon.kindle.util.lipc.LipcException;
                                  ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:9: package com.amazon.kindle.util.lipc.helper does not exist
import com.amazon.kindle.util.lipc.helper.DelegatingLipcTarget;
                                         ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:21: cannot find symbol
symbol: class DelegatingLipcTarget
public class NoAdsWatchdog extends DelegatingLipcTarget implements
                                   ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:22: cannot find symbol
symbol: class LipcEventListener
		LipcEventListener {
		^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:52: package com.amazon.ebook.util.log does not exist
	private static com.amazon.ebook.util.log.Log amazonLog = null;
	                                        ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:54: package com.amazon.ebook.util.log does not exist
	private static com.amazon.ebook.util.log.Log getAmazonLog() {
	                                        ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:77: cannot find symbol
symbol  : class LipcException
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog
	private void checkInitialState() throws LipcException {
	                                        ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:102: cannot find symbol
symbol  : class LipcEvent
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog
	public void onLipcEvent(LipcEvent e) {
	                        ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:17: package com.amazon.kindle.kindlet.internal does not exist
import com.amazon.kindle.kindlet.internal.KindletExecutionException;
                                         ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:114: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
	private static KindletExecutionException performInstallation() {
	               ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:150: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
	private static KindletExecutionException buildException(
	               ^
src/com/mobileread/ixtab/patch/LegalIllegalPatch.java:6: package com.amazon.agui.swing does not exist
import com.amazon.agui.swing.ConfirmationDialog;
                            ^
src/com/mobileread/ixtab/patch/LegalIllegalPatch.java:7: package com.amazon.kindle.settings does not exist
import com.amazon.kindle.settings.SettingsBooklet;
                                 ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:13: package com.amazon.agui.swing does not exist
import com.amazon.agui.swing.ButtonActionDialog;
                            ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:14: package com.amazon.agui.swing does not exist
import com.amazon.agui.swing.CommandBar;
                            ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:15: package com.amazon.agui.swing does not exist
import com.amazon.agui.swing.InputDialog;
                            ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:17: cannot find symbol
symbol: class ButtonActionDialog
public class PasswordDialog extends ButtonActionDialog {
                                    ^
src/com/mobileread/ixtab/patch/passwd/Password.java:5: package com.amazon.ebook.util.lang does not exist
import com.amazon.ebook.util.lang.UUID;
                                 ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:31: package ButtonActionDialog does not exist
	public static class ButtonAction extends ButtonActionDialog.ButtonAction {
	                                                           ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:40: package ButtonActionDialog does not exist
	public static class ButtonReference extends ButtonActionDialog.ButtonReference {
	                                                              ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:101: cannot find symbol
symbol  : class CommandBar
location: class com.mobileread.ixtab.patch.passwd.PasswordDialog.PasswordAdapter
		public PasswordAdapter(Password encrypted, CommandBar commandBar, JTextArea textArea, String confirmName) {
		                                           ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:110: cannot find symbol
symbol  : class CommandBar
location: class com.mobileread.ixtab.patch.passwd.PasswordDialog.PasswordAdapter
		private JButton findConfirmButton(CommandBar commandBar,
		                                  ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:16: package com.amazon.agui.swing does not exist
import com.amazon.agui.swing.ConfirmationDialog;
                            ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:17: package com.amazon.kindle.content.catalog does not exist
import com.amazon.kindle.content.catalog.CatalogEntry;
                                        ^
src/com/mobileread/ixtab/patch/ScrollbarPatch.java:13: package com.amazon.agui.swing does not exist
import com.amazon.agui.swing.PagingContainer;
                            ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:68: warning: sun.misc.URLClassPath is internal proprietary API and may be removed in a future release
		ucp = new URLClassPath(urls);
		          ^
src/com/mobileread/ixtab/jbpatch/bootstrap/PatchingClassLoader.java:120: warning: sun.misc.Resource is internal proprietary API and may be removed in a future release
								Resource res = ucp.getResource(path, false);
								^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:47: operator == cannot be applied to com.mobileread.ixtab.patch.ads.NoAdsWatchdog,<nulltype>
		if (instance == null) {
		             ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:58: package com.amazon.ebook.util.log does not exist
					amazonLog = com.amazon.ebook.util.log.Log
					                                     ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:69: cannot find symbol
symbol  : method addLipcEventListener(com.mobileread.ixtab.patch.ads.NoAdsWatchdog)
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog
			addLipcEventListener(this);
			^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:71: cannot find symbol
symbol  : class LipcException
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog
		} catch (LipcException e) {
		         ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:78: cannot find symbol
symbol  : method getStringProperty(java.lang.String)
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog
		String state = getStringProperty(PROPERTY_LOAD);
		               ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:131: cannot find symbol
symbol  : method getStringProperty(java.lang.String)
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog.ModuleReplacerTask
				if (getStringProperty(PROPERTY_LOAD).indexOf(MODULE_ADS) != -1) {
				    ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:132: package com.amazon.ebook.util.log does not exist
					com.amazon.ebook.util.log.Log log = getAmazonLog();
					                         ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:133: package com.amazon.kindle.restricted.ad does not exist
					boolean sleeping = com.amazon.kindle.restricted.ad.e.K(log,
					                                                  ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:137: package com.amazon.kindle.restricted.ad does not exist
						com.amazon.kindle.restricted.ad.e.B(log,
						                               ^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:141: cannot find symbol
symbol  : method setProperty(java.lang.String,java.lang.String)
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog.ModuleReplacerTask
					setProperty(PROPERTY_LOAD, MODULE_NORMAL);
					^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:142: cannot find symbol
symbol  : method setProperty(java.lang.String,java.lang.String)
location: class com.mobileread.ixtab.patch.ads.NoAdsWatchdog.ModuleReplacerTask
					setProperty(PROPERTY_UNLOAD, MODULE_ADS);
					^
src/com/mobileread/ixtab/patch/ads/NoAdsWatchdog.java:146: package com.amazon.kindle.restricted.ad does not exist
						com.amazon.kindle.restricted.ad.e.D(log,
						                               ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:94: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
		if (!failedBefore && sourceException instanceof KindletExecutionException) {
		                                                ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:95: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
			KindletExecutionException ke = (KindletExecutionException) sourceException;
			^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:95: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
			KindletExecutionException ke = (KindletExecutionException) sourceException;
			                                ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:99: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
				KindletExecutionException returnException = null;
				^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:134: package com.amazon.kindle.kindlet.internal.portability does not exist
			com.amazon.kindle.kindlet.internal.portability.g.d().b().K();
			                                              ^
src/com/mobileread/ixtab/patch/devcert/DevCertInjectPatch.java:153: cannot find symbol
symbol  : class KindletExecutionException
location: class com.mobileread.ixtab.patch.devcert.DevCertInjectPatch
		return new KindletExecutionException(explanation,
		           ^
src/com/mobileread/ixtab/patch/LegalIllegalPatch.java:23: cannot find symbol
symbol  : class SettingsBooklet
location: class com.mobileread.ixtab.patch.LegalIllegalPatch
		c.invokevirtual().setMethod(SettingsBooklet.class.getMethod("getName", new Class[0]));
		                            ^
src/com/mobileread/ixtab/patch/LegalIllegalPatch.java:42: cannot find symbol
symbol  : class ConfirmationDialog
location: class com.mobileread.ixtab.patch.LegalIllegalPatch
		c.invokestatic().setMethod(ConfirmationDialog.class.getMethod("showDialog", new Class[] {String.class, String.class, String.class,String[].class, int[].class}));
		                           ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:68: cannot find symbol
symbol  : class InputDialog
location: class com.mobileread.ixtab.patch.passwd.PasswordDialog
		InputDialog d = new InputDialog(appid, 1);
		^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:68: cannot find symbol
symbol  : class InputDialog
location: class com.mobileread.ixtab.patch.passwd.PasswordDialog
		InputDialog d = new InputDialog(appid, 1);
		                    ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:83: cannot find symbol
symbol  : variable InputDialog
location: class com.mobileread.ixtab.patch.passwd.PasswordDialog
		d.setButtonDisablePolicy(InputDialog.DISABLE_IF_EMPTY);
		                         ^
src/com/mobileread/ixtab/patch/passwd/PasswordDialog.java:91: cannot find symbol
symbol  : variable pressedButtonName
location: class com.mobileread.ixtab.patch.passwd.PasswordDialog.ButtonReference
		return cancel.equals(bref.pressedButtonName) ? null : adapter.password;
		                         ^
src/com/mobileread/ixtab/patch/passwd/Password.java:34: cannot find symbol
symbol  : class UUID
location: class com.mobileread.ixtab.patch.passwd.Password
		return MD5.getMd5String(new UUID().toString().getBytes());
		                            ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:122: cannot find symbol
symbol  : class CatalogEntry
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
		if (o == null || !(o instanceof CatalogEntry)) {
		                                ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:126: cannot find symbol
symbol  : class CatalogEntry
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
		CatalogEntry entry = (CatalogEntry) o;
		^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:126: cannot find symbol
symbol  : class CatalogEntry
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
		CatalogEntry entry = (CatalogEntry) o;
		                      ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:140: cannot find symbol
symbol  : class CatalogEntry
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
		if (o != null && o instanceof CatalogEntry) {
		                              ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:141: cannot find symbol
symbol  : class CatalogEntry
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
			CatalogEntry c = (CatalogEntry) o;
			^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:141: cannot find symbol
symbol  : class CatalogEntry
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
			CatalogEntry c = (CatalogEntry) o;
			                  ^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:176: cannot find symbol
symbol  : variable ConfirmationDialog
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
				ConfirmationDialog.OK_ONLY_OPTIONS);
				^
src/com/mobileread/ixtab/patch/passwd/PasswordPatch.java:175: cannot find symbol
symbol  : variable ConfirmationDialog
location: class com.mobileread.ixtab.patch.passwd.PasswordPatch
		ConfirmationDialog.showDialog(PasswordDialog.APP_ID, message, title,
		^
src/com/mobileread/ixtab/patch/ScrollbarPatch.java:112: cannot find symbol
symbol  : class PagingContainer
location: class com.mobileread.ixtab.patch.ScrollbarPatch
		PagingContainer target = null;
		^
src/com/mobileread/ixtab/patch/ScrollbarPatch.java:114: cannot find symbol
symbol  : class PagingContainer
location: class com.mobileread.ixtab.patch.ScrollbarPatch
			target = (PagingContainer) ref.get();
			          ^
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
67 errors
8 warnings

Should I copy stock Amazon jars somewhere at my computer and add them to classpath or there is better solution?

I don't know anything about Java (not coding Java at all) I'm compiling jbpatcher on Debian, I've installed serp as package (libserp-java). And I don't need no stinking Eclipse

UPD Found a way. Create a lib directory in root of jbpatcher sources, then put there serp.jar and all JARs from Kindle's /opt/amazon/ebook/lib and /opt/amazon/ebook/booklet (not all of them are strictly needed, but I don't want to check which are and which aren't). Then create a bin directory in root of jbpatcher sources and put there following shell script:
Code:
CPATH="$(find lib -type f -name '*.jar' -print0 2>/dev/null | tr '\0' ':')"
SRC="$(find src -type f -name '*.java' -print0 2>/dev/null | tr '\0' ' ')"

javac \
  -classpath "$CPATH" \
  -sourcepath src \
  -source 1.4 \
  -target 1.4 \
  -d bin -s bin \
  $SRC
To compile, run this shell script, then ant build (while locating in root of jbpatcher sources).

I believe this shell script should be implemented as Ant javac Task. But I don't understand why it wasn't by default. Maybe it shouldn't because of some Java voodoo...

Last edited by eureka; 05-30-2012 at 06:01 AM. Reason: found a way to compile it, yippie ki-yay
eureka is offline   Reply With Quote