私は現在、純粋にネイティブなndkを使わなければならないプロジェクトに取り組んでいます。 Irrlichtエンジンのソースからhelloworldの例を実行してみるとうまくいきました。それから私はその例と同じフォーマットに従って私のプロジェクトでそれを使ってみます。しかし、私は得た:
03-14 01:40:05.308: E/AndroidRuntime(799): Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/Android.app.POMActivity}: Java.lang.ClassNotFoundException: Didn't find class "Android.app.POMActivity" on path: DexPathList[[Zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]
私のプロジェクトを実行しながら。
これが私のmain.cppファイルです。
#include <Android/log.h>
#include <jni.h>
#include <Android_native_app_glue.h>
#include "Android_tools.h"
#ifdef _IRR_Android_PLATFORM_
void Android_main(Android_app* app)
{
__Android_log_print(4 , "pom" , "nothing");
}
#endif
android.mkの場合:
LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_Android_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json
LOCAL_SRC_FILES := Android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl
LOCAL_STATIC_LIBRARIES := Irrlicht Android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,Android/native_app_glue)
そして、私はAndroidManifest.xmlでActivity名を与えました:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.irrlicht.example1"
Android:versionCode="1"
Android:versionName="1.0">
...
<application Android:icon="@drawable/irr_icon" Android:label="HelloWorldMobile1" Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen" Android:debuggable="true">
<activity Android:name="Android.app.POMActivity"
Android:label="HelloWorldMobile1"
Android:launchMode="singleTask"
Android:configChanges="orientation|keyboardHidden"
Android:screenOrientation="portrait"
Android:clearTaskOnLaunch="true">
<meta-data Android:name="Android.app.lib_name" Android:value="HelloWorldMobile1" />
私がここでしている間違いは何ですか?必要に応じて、フルコードを投稿します。
私はすべての可能なオプションを試しましたが、結果はゼロです。最後に私は私にとって有用である正しい解決策を見つけました。インスタントランを無効にするには[ファイル] - > [設定] - > [ビルド] - [実行] - [デプロイメント] - > [インスタントラン] - >インスタントランのチェックボックスをオフにしますに移動します。アプリを1回実行すると、このapkファイルは正常に動作します。
私は同様の問題を抱えていた、これが私の解決策です:
あなたは this 答えをチェックすることもできます。
これはあなたの場合は問題のようです。マニフェスト内のアクティビティの相対パスは正しくありません。
<activity Android:name="Android.app.POMActivity"
これを次のように置き換えます。
<activity Android:name=".POMActivity"
または
<activity Android:name="com.irrlicht.example1.POMActivity"
デバイス上のアプリの削除とプロジェクトのクリーニングは私のために働きます
私はただ見て問題を理解するべきです
デックスエラー
しかし、問題を解決するのに半日かかりました。
私はAndroid開発者ページの指示に従ってこれを修正します。 https://developer.Android.com/studio/build/multidex.html
まずこれをgradle.buildファイルに追加します。
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
次に、Applicationクラスを拡張する(またはAndroidManifest.xml
でアプリケーションクラスを宣言するか、または上記のリンクの指示に従ってMultiDexApplication
クラスでattachBaseContext()
関数を上書きします)。
以上で問題は解決しました。
この例外は、レイアウトにカスタムビューがある場合にも発生する可能性があります。
<com.example.MyView
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
また、ビューのパッケージ名を "com.example"から別のものに変更しますが、レイアウトでも変更することを忘れます。
Clean Project&Rebuild Projectを試してください。
androidのスタジオ端末で./gradlew --stop
コマンドを使用して解決しました。このコマンドを実行したら、プロジェクトをクリーンアップして再構築します。
.
マルチデックスを有効にしている人のためにこれを書いてください
inside build.gradle
apply plugin: 'com.Android.application'
Android {
defaultConfig {
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
}
dependencies {
compile 'com.Android.support:appcompat-v7:+'
compile 'com.google.Android.gms:play-services:+'
compile 'com.Android.support:multidex:1.0.1'
}
以下のようにクラスEnableMultiDex
を書きます。
import Android.content.Context;
import Android.support.multidex.MultiDexApplication;
public class EnableMultiDex extends MultiDexApplication {
private static EnableMultiDex enableMultiDex;
public static Context context;
public EnableMultiDex(){
enableMultiDex=this;
}
public static EnableMultiDex getEnableMultiDexApp() {
return enableMultiDex;
}
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
そしてAndroidManifest.xml
にこれを書いてくださいclassName Applicationタグの中
<application
Android:name="YourPakageName.EnableMultiDex"
Android:hardwareAccelerated="true"
Android:icon="@drawable/wowio_launch_logo"
Android:label="@string/app_name"
Android:largeHeap="true"
tools:node="replace">
プロジェクトが直前にコンパイルされていた場合は、次のようにしてキャッシュをクリアすることができます。
./gradlew clean
または
./gradlew cleanBuildCache
または窓用
gradlew cleanBuildCache
私はこの問題に何度も直面し、それらはすべて無効にすることで解決されていますインスタントラン。
プロジェクトをきれいにするだけです。わたしにはできる。
MultiDexApplicationを拡張するApplicationクラスをカスタマイズする必要はありません。代わりに、このようにすることができますAndroidManifest.xml
<application
Android:name="Android.support.multidex.MultiDexApplication"
Android:hardwareAccelerated="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
そしてこれと一緒にbuild.gradle(Module:app)、
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
...
compile 'com.Android.support:multidex:1.0.2'
}
ありがとう。
マルチインデックスを使用している場合は、アプリケーションの代わりにMultiDexAppicationを使用してアプリケーションクラスを拡張し、5.0以下のAndroidに必要な以下のメソッドをオーバーライドします(5.0以上でマルチインデックスがサポートされるため)。
@Override
protected void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(BaseApplication.this);
}
そして依存関係でこれを追加
compile 'com.Android.support:multidex:1.0.1'
フォルダ名をlib
からlibs
に変更するだけです。
それからあなたはあなたのプロジェクトのいくつかのエラーマークを見るでしょう、この権利を解決するためにクリックしてください>
Properties > Java Build Path > libraries
:
赤い印の付いたライブラリをすべて削除し、その後apply > ok >
を--- プロジェクトをクリーンにします。多田は魔法を見ます:)
私はサムスンロリポップデバイス上でのみこのクラッシュを得ていました、そしてこれ ソリューション は私のために働きました。
dexOptions {
preDexLibraries false
}
この質問は現在このクラッシュについてGoogleで最もランクの高い検索結果であり、上記の答えはどれも私にとっては役に立たなかったので、ここにこの回答を投稿しています。
私の場合、この問題はKotlinが原因で発生しました。私の既存のコードには、Kotlinと書かれたクラスがありました。私はアプリを構築し、それがインストールされ、最初の活動がアプリを開くとすぐにクラッシュしました。 logcatでこのエラーが表示されていました。それから私はKotlinウェブサイトから私のKotlinバージョンをアプリgradleファイルで更新しました。アプリをもう一度ビルドすればうまくいきました。
私は与えられた答えを試した後、私は私が私のメインライブラリに手動で使用しているライブラリを追加しなければならなかったという同じ例外の別の理由を見つけました
Right click on my main library >
Properties >
Android >
Go to the very bottom of the screen and click (Add) >
Select my other library that caused the crash >
Apply
このソリューションの前は、Eclipseの.Javaファイル内から "Fix Project setup"を使用していましたが、これはうまくいきませんでしたので、ここで手動で追加する必要があり、うまくいきました。
次の解決策は私のために働いた...
私は上記のすべてを試してみましたが、それでも私のアプリを実行させることはできませんでした。私は反応ネイティブアプリをgradle 4+とAndroid studioの最新版で走らせています。
私は反応ネイティブの実行 - アンドロイドを実行すると、それがMainApplicationクラスを見つけることができないと言って問題に失敗していたという問題がありました...すなわちClassNotFoundException
Gradle.propertiesを更新してコンパイラD8を使用すると、問題を解決できました。
追加した:
Android.enableD8 = true
私のgradle.propertiesに
ドキュメントの詳細はこちら: https://Android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
私の理解しているように私は私が出力からAPKをコピーしてSDカードに入れたときに私のアプリケーションは実行されませんインスタント機能のためにアップデートAndroidスタジオ2.1から2.3の後に問題を得る。この問題のために私はビルドオプションからAPKをビルドするアンドロイドスタジオでAPKをビルドします。
Ashik abbas 答 (無効にするInstant Run)私のために働きますが、私はInstant Runを必要としています、ついに私は私に役立つ解決策を見つけました。無効にする--- minifyEnabled。 build.gradle(Module:app)debugブロックして無効にするminifyEnabled:
debug {
minifyEnabled false
}
私は同じ誤りを持っていました、そして、いくつかの答えは初心者の問題について私を誤解させました。以下のように、カスタムビュー記述子に間違ったパッケージがありました。誰かに役立つことを願っています。
<com.my.app.wrong.package.MyActivity
Android:id="@+id/myActivity"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="16dp"
Android:layout_marginRight="16dp"
Android:paddingTop="16dp"
Android:paddingBottom="8dp"
Android:gravity="left" />
アプリグラドルファイルでminifyEnabled
とshrinkResources
をtrueに有効にしている場合。 proguard-rules.pro
ファイルに次の行を追加する必要があります。
-keepクラスcom.yourpackage_name。** {*; }
縮小は私たちのapkファイルからいくつかの重要なクラスが削除されたためです。
Gradle依存関係を削除した後にこのエラーが表示された場合は、マニフェストを確認し、その依存関係に対応するすべてのエントリを削除したことを確認してください。
私の場合、私のプロジェクトがandroidxのものを利用して設定されている間、私は古い名前空間ライブラリを使用しました。
解決策は、Android.support.design.widget.BottomNavigationView
コンポーネントをサポートライブラリから抜け出すための正しいコンポーネントcom.google.Android.material.bottomnavigation.BottomNavigationView
に置き換えることでした。
考えられる原因の1つは、Apps AndroidManifest.xmlファイル内のアクティビティのパスが正しくないことです。以下のように、相対パスでAndroidManifest.xmlにアクティビティを登録します。
<activity Android:name="<full_path>.ActivityName" />
私は同じ問題に直面していました。私は一日可能な限り全力を尽くしたが、何もうまくいかなかった。問題を引き起こしていた依存関係は、より低いコンパイルのsdk、target sdk、およびmin sdkを使用していました。プロジェクトのライブラリモジュールを作成し、すべてのソースをコピーして、SDKのバージョンとアプリケーションのSDKのバージョンを一致させました。そしてついにそれは魅力のように働いた。
私は以前にこの問題を抱えていたので、ここでのコメントは過去に役に立ちましたが、今回はそうではありませんでした。私は自分のproguardの設定をチェックし、i 削除された次の行を書き、それからうまくいったのでproguardはこのエラーに関係している可能性があります。
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-dontskipnonpubliclibraryclassmembers
Android Intent Parcelableを非整列化するとクラスが見つかりません または Android E/Parcel un非整列化するとクラスが見つかりません(Samsung Tab 3のみ) 、ただしこれらのトピックからのアドバイスはありません。助けて頂きました。私はさらに解析可能なクラスを書き直しました。
私にとっては、私が署名付きAPKを作成した後にこの問題が発生しました。それを修正するために、Run/Build APKを使って新しいdebug apkを生成しました。その後、Run(cmd + r)はこのエラーがなくても機能します。