从 JAR/Lib 启动 Activity

Tar*_*run 7 java android android-activity android-studio

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

MyApplication 有一个活动 MyActivity.java。

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

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

并在 NotMyApplication 中导入 MyActivity.java 并创建一个如下所示的意图:

**Intent in = new Intent(MyActivity.class,NotMyActivity.this);
startActivity(in);**
Run Code Online (Sandbox Code Playgroud)

我怎样才能完成整个过程。有人可以指导 Stepwise for android studio 吗??

[编辑]

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

导入 com.example.testmylibs.MyClassToTest;

比发起的活动为:

Intent in = new Intent(getApplicationContext(),com.example.testmylibs.MyClassToTest.class); 开始活动(在);

它仍然给 FATAL 为:

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

[编辑]

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

    **<activity android:name="com.example.testmylibs.MyClassToTest" >
    </activity>**
    
    
Run Code Online (Sandbox Code Playgroud)

比以下异常来了:

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]]

Tar*_*run 4

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

我不知道,但 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.
Run Code Online (Sandbox Code Playgroud)

现在转到菜单栏并单击“构建”->“清理”,然后单击“构建”->“重建”。它将在“app\build\outputs\aar”中创建一个“.aar”文件。

这是你的库。将其导入到您的应用程序中,例如 libs 文件夹中的 NotMyApplication 并执行以下步骤: 1) 将以下代码添加到应用程序的 build.gradle 中: repositories{ 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);**
        
Run Code Online (Sandbox Code Playgroud)

它将从 lib 启动您的活动。需要注意的一点是,如果存在同名资源,则 Activity 将从 NotMyApplication 中选择。因此,请记住,为要在库中导出的此类活动的资源指定唯一的名称。

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

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