从JAR / Lib启动活动

时间:2015-10-21 07:30:01

标签: java android android-activity android-studio

我想创建和Android项目让我们说MyApplication。

MyApplication有一个活动MyActivity.java。

我想要一些其他应用程序让我们说NotMyApplication在没有在设备上安装MyApplication的情况下启动此活动。

我想为这个场景做些什么是我想以某种方式将MyApplication转换为jar / lib,这样我就不需要安装也不需要共享代码。

在NotMyApplication中导入MyActivity.java并创建如下的Intent:

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

我怎样才能完成整个过程。 有人可以为Android工作室指导Stepwise吗?

[编辑]

我在eclipse中创建了Jar文件,并将其复制到android studio中的libs文件夹中。 比在gradle中添加了complie语句:导入的jar为:

导入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中声明这个活动?

[编辑]

如果我在NotMyApplicattion的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]]

2 个答案:

答案 0 :(得分:3)

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

我不知道但是Jar文件不是这样工作的,所以我做的是我做了正常的android项目(MyApplication),我想导出为lib。 一旦我变得对我的活动进行更改说我的活动。转到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-&gt; clean and than build-&gt;重建。 它将创建一个&#34; .aar&#34;文件在&#34; app \ build \ outputs \ aar&#34;。

这是你的lib。 在您的应用程序中导入它在libs文件夹中说NotMyApplication并执行以下步骤:     1)将以下代码添加到app的build.gradle:             的存储库{                 flatDir {                 dirs&#39; libs&#39;             }

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中选择。因此,请记住,为要在libs中导出的​​此类活动的资源指定唯一名称。

我仍然不知道为什么从Jar开始它不起作用。任何有关的帮助将不胜感激...... :)

有关更多详情,请访问以下链接:http://revisitingandroid.blogspot.in/2017/01/how-to-launch-activity-from-aar-files.html

答案 1 :(得分:0)

我想在@Tarun的答案中添加一点:

  1. 将所有依赖项从SDK项目(例如MyApplication)的build.gradle(模块:应用程序)文件复制并粘贴到基础项目(例如NotMyApplication)的build.gradle(模块:应用程序)文件中;

  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