библиотеки на Android - PullRequest
       15

библиотеки на Android

2 голосов
/ 07 апреля 2010

В собственной разработке вы можете создавать библиотеки - .so, .dll и т. Д. - которые могут совместно использоваться другими библиотеками и программами.

В Java вы можете поместить свой код в JAR в classpath и других программах.и библиотеки могут его использовать.

Так как же вы можете создавать модульные программы в Android?Из документации складывается впечатление, что каждый APK - это автономный остров.Могут ли разные APK совместно использовать код?

И как работает установка, когда у вас есть эти внешние зависимости?Можете ли вы указать, что вы полагаетесь на библиотеку, которой нет в вашем APK, и устанавливаете ее тоже?

Если у вас не может быть «динамического связывания», можете ли вы иметь «статическое связывание», разработав свой общий код икаким-то образом положить эквивалент JAR в каждый APK, который требует этого?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2010

Что касается статического связывания, вы можете обмениваться кодом между приложениями Android, используя файлы .jar стандартным способом Java. Однако в настоящее время вы не можете использовать систему ресурсов Android (содержимое в каталоге 'res' и класс 'R'), что несколько ограничивает идею библиотек управления. Это также делает невозможным использование локализуемых строк, и у вас не может быть определений приложений или служб или чего-либо еще, объявленного в AndroidManifest.xml.

Что касается динамического связывания, то существует разновидность библиотеки, которая распространяется в Market как сам файл .apk и динамически включается во время выполнения. Многие разработчики не хотят, чтобы их пользователи установили два .apks. Такой подход вызывает путаницу среди пользователей.

0 голосов
/ 09 апреля 2010

Вот полностью рабочий пример использования Class.forName ():

try { 
    for (Method ele: Class.forName("<MyClassPath>").getMethods()) 
    { 
        try { 
            if (ele.getName().equals("<MyMethod>") ) 
                ele.invoke(null, ArgumentList); 
        } catch (IllegalArgumentException e) { 
            e.printStackTrace(); 
        } catch (IllegalAccessException e) { 
            e.printStackTrace(); 
        } catch (InvocationTargetException e) { 
            e.printStackTrace(); 
        } 
    } 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
}

Здесь вы можете найти больше информации о методе invoke: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object, java.lang.Object [])

0 голосов
/ 07 апреля 2010

Вы можете создать библиотеку в файле .jar, как сказал Джим Блэклер, и затем создать экземпляр класса, используя полное имя класса. В java это действительно просто и может быть использовано, чтобы сделать вашу разработку очень гибкой.

Вот пример:

Класс C содержится в пакете с именем com.test.utils , поэтому его полный путь: com.test.utils.C . Теперь, если вы хотите создать экземпляр C из любого другого места, вы используете метод Class.forName () , который работает следующим образом:

// Try to create an instance of class 'com.test.utils.C'
try {
    Object instance = Class.forName("com.test.utils.C").newInstance();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InstantiationException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

Примите во внимание, что вашему классу нужен как минимум пустой конструктор, если нет, то вы будете исключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...