我想创建和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]]
答案 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的答案中添加一点:
将所有依赖项从SDK项目(例如MyApplication)的build.gradle(模块:应用程序)文件复制并粘贴到基础项目(例如NotMyApplication)的build.gradle(模块:应用程序)文件中;
添加此内容:
flatDir {
dirs 'libs'
}
在基础项目的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