【问题标题】:Launch an Activity from a JAR/Lib从 JAR/Lib 启动 Activity
【发布时间】:2016-01-20 02:26:13
【问题描述】:

我想创建和 android Project 让我们说 MyApplication。

MyApplication 有一个活动 MyActivity.java。

我想要其他应用程序让我们说 NotMyApplication 来启动此活动,而无需在设备上安装 MyApplication。

我想为这种情况做的是我想以某种方式将 MyApplication 转换为 jar/lib,这样我就不需要安装也不需要共享代码。

并在 NotMyApplication 中导入 MyActivity.java 并创建一个 Intent,如下所示:

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

我怎样才能完成整个过程。 有人可以指导 Android Studio 的 Stepwise 吗?

[编辑]

我在 Eclipse 中创建了 Jar 文件,然后将其复制到了 android studio 中的 libs 文件夹中。 比在 gradle 中添加 complie 语句:imported jar as :

导入 com.example.testmylibs.MyClassToTest;

比发起活动为:

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

它仍然给出致命的:

android.content.ActivityNotFoundException:找不到显式活动类 {com.myapplication/com.example.testmylibs.MyClassToTest};您是否在 AndroidManifest.xml 中声明了此活动?

[编辑]

如果我在 NotMyApplication 的 AndroidManifest.xml 中本地声明为:

    **<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 file“/data/app/com.myapplication-2/base.apk”] ,nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]

【问题讨论】:

  • 对于 NotMyApplication,您必须添加在 jar/lib 中编译的活动。就像您展示的代码 sn-p 一样,应用程序应该使用 Intent 来启动 MyApplication 活动并让 MyApplication 处理其余的事情。也检查一下:stackoverflow.com/questions/16763090/…
  • 我在 Eclipse 中创建了 Jar 文件,然后将其复制到了 android studio 中的 libs 文件夹中。比在 gradle 中添加 complie 语句:imported jar as : import com.example.testmylibs.MyClassToTest;比启动活动为: Intent in = new Intent(getApplicationContext(),com.example.testmylibs.MyClassToTest.class);开始活动(在);它仍然给出致命的:android.content.ActivityNotFoundException:无法找到明确的活动类 {com.myapplication/com.example.testmylibs.MyClassToTest};您是否在 AndroidManifest.xml 中声明了此活动?
  • 关于布局错误,试试看jar文件中是否复制了res文件,很可能没有。对于未找到的类,您可以尝试在没有“getApplicationContext()”的情况下获取意图吗?是这样的吗?

标签: java android android-activity android-studio


【解决方案1】:

我通过以下方式找到了答案,

我不知道,但 Jar 文件不能以这种方式工作,所以我所做的是我制作了我想导出为 lib 的普通 android 项目 (MyApplication)。 一旦我完成对我的活动进行更改,请说我的活动。转到应用程序的 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。 它将在“app\build\outputs\aar”中创建一个“.aar”文件。

这是你的库。 将其导入您的应用程序中,例如 libs 文件夹中的 NotMyApplication 并执行以下步骤: 1) 将以下代码添加到 app 的 build.gradle 中: 存储库{ 平面目录 { 目录'库' }

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

【讨论】:

    【解决方案2】:

    我想用@Tarun 的回答补充一点:

    1. 将 SDK 项目(比如 MyApplication)的 build.gradle(Module: app) 文件中的所有依赖项复制并粘贴到基础项目(比如 NotMyApplication)的 build.gradle(Module: app) 文件中;

    2. 添加这个:

      flatDir {
           dirs 'libs'
      }
      

      在您的基础项目的 build.gradle(Project:NotMyApplication) 文件中,例如:

      allprojects {
           repositories {
               google()
               jcenter()
               flatDir {
                   dirs 'libs'
               }
           }
       } 
      
    3. 在您的基础项目的 build.gradle(Module:app) 文件中,使用“实现”而不是“编译”,例如:

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

      此后,配置“编译”已过时,已被“实现”取代。它将很快被删除。欲了解更多信息,请点击此处:http://d.android.com/r/tools/update-dependency-configurations.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多