@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...