提问者:小点点

从JAR/Lib启动Activity


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

MyApplication有一个活动MyActivity.java。

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

对于这种情况,我想做的是我想将我的应用程序转换为jar/库,这样我就不需要安装,也不需要共享代码。

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

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

我怎么能做整个过程。有人可以为android studio指导Stepwise吗??

[编辑]

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

导入com. example.testmylibs.MyClassToTest;

比启动的活动为:

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

仍然它给致命的:

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$布局解析失败;…由以下原因引起:java.lang.ClassNotFoundException:没有在路径上找到类"com.example.testmylibs.R$布局":DexPathList[[zip file"/data/app/com.myapplation-2/base.apk"],nativeLibraryDirectory=[/供应商/lib64, /system/lib64]]


共2个答案

匿名用户

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

我不知道,但Jar文件不是这样工作的,所以我做的是我做了正常的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-

这是你的库。将其导入到您的应用程序中,例如libs文件夹中的NotMyApplication并执行以下步骤:1)将以下代码添加到app: repositories{platDir{dirs'libs'}的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中选择。因此请记住,为您要在lib中导出的此类活动的资源指定唯一名称。

我仍然不知道为什么从Jar它不起作用。任何帮助都将不胜感激…:)

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

匿名用户

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

>

  • 将SDK项目的build. gradle(Module:app)文件中的所有依赖项复制粘贴到Base Project(NotMyApplication)的build.gradle(Module:app)文件中;

    添加这个:

    flatDir {
         dirs 'libs'
    }
    

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

    allprojects {
         repositories {
             google()
             jcenter()
             flatDir {
                 dirs 'libs'
             }
         }
     } 
    

    在基本项目的build. gradle(Module:app)文件中,使用“实现”而不是“编译”,例如:

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

    因为,配置“编译”已经过时,并且已经被替换为“实现”。它将很快被删除。有关更多信息,请查看此处:http://d.android.com/r/tools/update-dependency-configurations.html