我在Eclipse上有一个包含许多库项目的项目。然后我将它们移动到Android Studio。经过艰苦的努力,使得gradle建立成功。现在我可以运行我的项目并将apk安装到设备上。但是当我打开一个扩展AppCompatActivity的活动时,我在运行时得到了一个NoClassDefFoundError。但是如果我使用Activity而不是AppCompatActivity,则不会发生错误。我在清单中定义了活动。
这是logcat输出:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.my.packagename.activities.MyActivity
at com.my.packagename.activities.LoginActivity$2.onClick(LoginActivity.java:163)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5493)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
at dalvik.system.NativeStart.main(Native Method)
这是我的活动模块的依赖性:
compile 'com.google.android.gms:play-services-gcm:10.2.1'
compile 'com.android.support:support-v4:24.0.0'
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:design:24.0.0'
我错过了什么?
编辑我的清单文件:
...
<activity
android:name=".activities.MyActivity"
android:theme="@style/MyTheme"
android:label="@string/title_activity_my_activity"/>
</application>
我的样式文件:
...
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"</style>
这是我的活动,它扩展了AppCompatActivity(actullaty是一个非常简单的活动):
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
}
我打开此活动的代码。我只放了onClick监听器代码,因为整个活动太长了,无法放在这里:
btnSignUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!getIsOnline()) {
toast.setText(R.string.no_network);
toast.show();
return;
}
Intent intent = new Intent(getApplicationContext(), MyActivity.class);
startActivity(intent);
}
});
确定。我删除了multidex。我把谷歌播放服务只用gcm包,这解决了我的方法计数问题。 gradle构建文件已更新。之后我运行'gradlew clean'和'Invalidate caches / Restart'。但问题还在继续。
答案 0 :(得分:1)
检查您的主题,应该是Theme.AppCompat.Light.DarkActionBar
或某事。
检查您的MyActivity
是否存在于清单
检查method count,如果超过65k,请确保使用Multidex
答案 1 :(得分:1)
的build.gradle
应该是更高的gradle版本
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
的build.gradle:
android {
compileSdkVersion 22
buildToolsVersion "23.0.0"
defaultConfig {
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion 22
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
Application.Class
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
清单:
android:name=".MyApplication"
更改grade.properties
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
1.尝试文件 - &gt;使缓存无效并重新启动工作室。
2.在默认配置
中添加multiDexEnabled = true在依赖项中添加编译com.android.support:multidex:1.0.0
应用程序类扩展MultiDexApplication而不仅仅是Application
5.如果上述事情无效,请删除您的gradle并制作一个干净的项目,它将生成一个新的gradle。
答案 2 :(得分:1)
添加
$polygon = sprintf('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))',
$long_high, $lat_high, $long_low, $lat_high, $long_low, $lat_low, $long_high, $lat_low, $long_high, $lat_high);
$query = "SELECT count, mahkoy_kod , mahkoy_adi, ilce_id, st_x(st_transform(st_centroid(t2.geom),4326)) as lng,st_y(st_transform(st_centroid(t2.geom),4326)) as lat from
(
SELECT count(*),t1.knt_f_mahkoy_id FROM a.s_all t1
where st_intersects(t1.geom,st_transform(ST_GeomFromText( ?, 4326),500000))
group by knt_f_mahkoy_id
) t1
join analiz.k_spt_dis_mah_koy t2 on t1.knt_f_mahkoy_id = t2.mahkoy_kod where count > 100";
$data = Database::query($query, array($polygon));
并添加您的活动onCreate
defaultConfig {
...
multiDexEnabled true
...
}
从MultiDexApplication扩展您的应用程序