Я хочу создать Android Project, скажем MyApplication.

MyApplication имеет активность MyActivity.java.

Я хочу, чтобы какое-нибудь другое приложение, скажем, NotMyApplication, запускало это действие без установки MyApplication на устройстве.

Что я хочу сделать для этого сценария, так это я хочу каким-то образом преобразовать MyApplication в jar / lib, чтобы мне не нужно было устанавливать, а также не нужно было делиться кодом.

И импортируйте MyActivity.java в NotMyApplication и создайте намерение, подобное следующему:

**Intent in = new Intent(MyActivity.class,NotMyActivity.this);
startActivity(in);**

Как я могу сделать весь процесс. Может кто-нибудь направить Stepwise для студии Android ??

[РЕДАКТИРОВАТЬ]

Я создал файл Jar в eclipse, а затем скопировал его в папку libs в студии Android. Затем добавлен оператор Complie в gradle: import jar как:

import com.example.testmylibs.MyClassToTest;

Затем запустил деятельность как:

Intent in = new Intent (getApplicationContext (), com.example.testmylibs.MyClassToTest.class); startActivity (in);

Тем не менее, это дает FATAL как:

Android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.myapplication / com.example.testmylibs.MyClassToTest}; Вы заявили об этой активности в своем AndroidManifest.xml?

[РЕДАКТИРОВАТЬ]

Если я объявлю локально в AndroidManifest.xml NotMyApplicattion как:

    **<activity android:name="com.example.testmylibs.MyClassToTest" >
    </activity>**
    
    

Чем наступает следующее исключение:

Java.lang.NoClassDefFoundError: Ошибка при разрешении: Lcom / example / testmylibs / R $ layout; . . Вызвано: java.lang.ClassNotFoundException: не удалось найти класс «com.example.testmylibs.R $ layout» по пути: DexPathList [[zip-файл «/data/app/com.myapplication-2/base.apk»] , nativeLibraryDirectories = [/ vendor / lib64, / system / lib64]]

7
Tarun Deep Attri 21 Окт 2015 в 10:30

2 ответа

Лучший ответ

Я нашел ответ следующим образом:

Я не знаю, но файлы Jar не работают таким образом, поэтому я сделал обычный проект Android (MyApplication), который я хотел экспортировать как библиотеку. Как только я закончил вносить изменения в свою деятельность, скажите «Моя активность». GO to build.gradle приложения внесите следующие изменения:

1) change code **"apply plugin: 'com.android.application'" to "apply plugin: 'com.android.library'"**

2) remove attribute "applicationId "com.myapplication"" from defaultConfig.

Теперь перейдите в строку меню и нажмите Build-> clean, а затем build-> rebuild. Он создаст файл ".aar" в "app \ build \ output \ aar".

Это ваша библиотека. Импортируйте его в свое приложение, скажите NotMyApplication в папке libs и выполните следующие шаги: 1) Добавьте следующий код в build.gradle приложения: репозитории { flatDir { dirs 'libs' }

2) Also add following to build.gradle of app : 
    **dependencies {
    ...
    compile (name: 'name_of_aar_file_without_ext', ext:'aar' )
    }**

3) Declare the Activity you want to launch in your apps manifest file : 

    **<activity android:name="com.testmylib.MyActivity" >
    </activity>**

4) Launch your activity as :
        **Intent in = new Intent(NotMyActivity.this,com.testmylib.MyActivity.class)
        startActivity(in);**

Он запустит вашу активность из библиотеки lib. Следует отметить, что если ресурсы с тем же именем присутствуют, Activity будет выбирать из NotMyApplication. Поэтому имейте в виду, что дайте уникальные имена ресурсам таких действий, которые вы хотите экспортировать в библиотеки.

Я до сих пор не знаю, почему из Jar он не работает. Любая помощь по этому поводу будет оценена ... :)

Для получения дополнительных сведений посетите ссылку: http : //revisitingandroid.blogspot.in/2017/01/how-to-launch-activity-from-aar-files.html

4
Tarun 18 Янв 2017 в 05:56

Я хотел бы добавить небольшую точку с ответом @ Tarun:

  1. Скопируйте и вставьте все зависимости из файла build.gradle (Module: app) проекта SDK (например, MyApplication) в файл build.gradle (Module: app) вашего базового проекта (например, NotMyApplication);

  2. Добавь это:

    flatDir {
         dirs 'libs'
    }
    

    внутри вашего базового файла Project build.gradle (Project: NotMyApplication), например:

    allprojects {
         repositories {
             google()
             jcenter()
             flatDir {
                 dirs 'libs'
             }
         }
     } 
    
  3. Внутри файла вашего базового проекта build.gradle (Module: app) используйте «implementation» вместо «compile», например:

    implementation(name: 'name_of_aar_file_without_ext', ext:'aar' )
    

    Поскольку конфигурация "компиляция" устарела и была заменена на "реализацию". Скоро он будет удален. для получения дополнительной информации проверьте здесь: http://d.android.com /r/tools/update-dependency-configurations.html

0
Partha Paul 20 Фев 2020 в 14:04