Android/Eclipse:从构建路径中删除/src文件夹

5
当我从“构建路径”中删除Android项目的/src文件夹(只保留MainActivity / gen),会发生什么(这可能听起来是个愚蠢的问题)?我仍然可以编译和运行该项目,那么构建路径的作用是什么?
背景:我正在为将Maven构建的项目导入到Eclipse而感到有些疯狂。它具有/src/main/package类型的文件夹结构,因此当我导入它时,所有声明的包名称都不匹配(显然是一个众所周知的问题)。我的第一次尝试是在导入项目之前仅将包上移到文件夹结构中(直接移到/src),但这给我带来了许多其他问题(涉及其他包的导入)。
第二次尝试是(这是SO上几个问题推荐的)仅从构建路径中删除/src文件夹,然后 package 声明就可以正常工作了,并且在Eclipse中没有显示任何问题,但我在运行时遇到了一个非常奇怪的问题,而且我不知道它是否与我从构建路径中删除/src文件夹有关联。
编辑:这是运行应用程序时出现的错误。我应该补充说明MyApplication不是活动,而是扩展应用程序(用于存储全局变量)。在该项目中使用Google地图,但不在第一个活动中使用。
02-20 14:39:34.781: E/AndroidRuntime(1479): FATAL EXCEPTION: main
02-20 14:39:34.781: E/AndroidRuntime(1479): java.lang.RuntimeException: Unable to instantiate application com.example.myapp.MyApplication: java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.MyApplication" on path: /system/framework/com.google.android.maps.jar:/data/app/com.example.myapp-1.apk
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.LoadedApk.makeApplication(LoadedApk.java:504)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4364)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.ActivityThread.access$1300(ActivityThread.java:141)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.os.Looper.loop(Looper.java:137)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at java.lang.reflect.Method.invoke(Method.java:511)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at dalvik.system.NativeStart.main(Native Method)
02-20 14:39:34.781: E/AndroidRuntime(1479): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.MyApplication" on path: /system/framework/com.google.android.maps.jar:/data/app/com,example.myapp-1.apk
02-20 14:39:34.781: E/AndroidRuntime(1479):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.Instrumentation.newApplication(Instrumentation.java:968)
02-20 14:39:34.781: E/AndroidRuntime(1479):     at android.app.LoadedApk.makeApplication(LoadedApk.java:499)
02-20 14:39:34.781: E/AndroidRuntime(1479):     ... 11 more

如果您能提供有关您非常奇怪的运行时问题的详细信息,那么这可能有助于人们确定问题是否与删除src文件夹相关。 - NathanTempelman
使用 文件 - 导入... - Maven - 存在的Maven项目 导入已有的maven化Android项目,查看 这个答案 以了解如何获取所需的Eclipse插件。 - yorkw
你应该发布运行时错误日志,可能是清单文件中的声明导致的。 - nandeesh
ClassNotFoundException,您正在外部JAR中查找类? - Shark
@Shark 这正是我无法理解的部分。 - fweigl
3个回答

3
当我从“build path”中删除Android项目的/src文件夹(只剩下MainActivity/gen)时,会发生什么?
您将创建一个“空apk”,只能访问资源 :)
关于Maven,您有两个选项:
1. 使用Maven源结构并告诉Eclipse源代码的位置。将该项目导入为“现有的Android代码”,然后转到Java Build Path,删除“src”文件夹,添加“src/main/java/”和“src/test/java”文件夹。
2. 使用Eclipse默认包结构并告诉Maven源代码的位置。在您的pom.xml中,在标记中添加以下指令,以告诉Maven应查找源代码的位置:<sourceDirectory>src</sourceDirectory>

你可以创建一个“空的apk”,只能访问资源 :) 我认为这不正确,因为我可以编译和运行应用程序... - fweigl

0
为什么不在Eclipse中安装'm2e'呢?
然后使用Eclipse“资源管理器”中的“导入”菜单将Maven项目导入Eclipse。
然后您应该能够以两种方式构建:
1. 在CLI上使用'mvn'目标 2. 在Eclipse中

0
回答你的问题,我认为无论 src 文件夹是否被构建,gen 文件和 apk 都会被构建,它们是从 src 文件构建而来的。据我所知,这是一种级联构建。但我可能错了。我对 maven 没有太多经验,所以我不能回答剩下的问题。希望其他人能告诉你。祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接