1

I have several android applications where approx 80% of the code is the same so I put it in a package "library". Eclipse seems to call this a library eventhough its a package and not like a class that I need to instantiate. The unique bits (ie. lookup tables) to setup things are separate from the package. This is working well and I can call package functions. Is there a way to go backwards. In each of my applications I want to have a function (ie foo() ) that does something different in each application. I'd like to be able to call foo() from a function in the package.

eng3
  • 431
  • 3
  • 18

1 Answers1

1

Consider everything as a library, even your main applications.

Then I think your situation is currently like this:

  • common-lib
  • app1, requires common-lib
  • app2, requires common-lib
  • app3, requires common-lib

And you now want common-lib to refer to code in app1/2/3? That isn't possible, but maybe you can accomplish that using dependency injection.

Dependency Injection

Make an interface in common-lib that defines the actions you need to invoke. Then create classes implementing that interface in app1/2/3. Finally, make app1/2/3 pass an instance of their version of that interface to common-lib, so it can use it.

In common-lib:

interface Named {
  void getName();
}

class MasterOfCeremonies {
  static void introduce(Named guest) {
    System.out.println("Please welcome " + guest.getName());
  }
}

In app1:

public StudentJohn implements Named {
  void getName() {
    return "John";
  }
}

In app2:

public StudentMary implements Named {
  void getName() {
    return "Mary";
  }
}

This way, app1 can then invoke MasterOfCeremonies.introduce(new StudentJohn()), and app1 can then invoke MasterOfCeremonies.introduce(new StudentMary()), and common-lib will do different things for each of them.

Additional Note

I don't know your exact situation, but another thing that may be useful is making another even "more common" library, like this:

  • other-lib
  • common-lib, requires other-lib
  • app1, requires common-lib
  • app2, requires common-lib
  • app3, requires common-lib
Community
  • 1
  • 1
tar
  • 1,538
  • 1
  • 20
  • 33