Android库项目上的java.lang.ClassNotFoundException
我有两个项目,第一个是主项目,第二个是库项目。库项目有带有布局xml文件的自定义警报对话框。但在将我的库导入主项目并调用自定义警报时,它会给出Android库项目上的java.lang.ClassNotFoundException,java,android,android-studio,Java,Android,Android Studio,我有两个项目,第一个是主项目,第二个是库项目。库项目有带有布局xml文件的自定义警报对话框。但在将我的库导入主项目并调用自定义警报时,它会给出java.lang.ClassNotFoundException: 主项目警报对话框调用 public class MainFragment extends Fragment { private TextView textView; private CallbackManager callbackManager; private AccessTokenT
java.lang.ClassNotFoundException:
主项目
警报对话框调用
public class MainFragment extends Fragment {
private TextView textView;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
private ProfileTracker profileTracker;
private ServiceCall serviceCall;
private SendFbData sendFbData;
Activity activity;
String facebook_id = "";
String email = "";
String first_name = "";
String last_name = "";
String location = "";
String os = "";
private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken = loginResult.getAccessToken();
Profile profile = Profile.getCurrentProfile();
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
Log.v("LoginActivity", response.toString());
try {
sendFbData.getUserPermission(getActivity());
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,last_name,first_name,email,gender,location,hometown");
request.setParameters(parameters);
request.executeAsync();
// displayWelcomeMessage(profile);
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
};
public MainFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity());
callbackManager = CallbackManager.Factory.create();
AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken old, AccessToken newTocken) {
}
};
ProfileTracker profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile old, Profile newProfile) {
}
};
accessTokenTracker.startTracking();
profileTracker.startTracking();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
serviceCall = new ServiceCall();
sendFbData = new SendFbData();
textView = (TextView) view.findViewById(R.id.text);
LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setFragment(this);
loginButton.setReadPermissions("user_friends");
loginButton.setReadPermissions("public_profile");
loginButton.setReadPermissions("email");
loginButton.registerCallback(callbackManager, mCallback);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
Profile profile = Profile.getCurrentProfile();
displayWelcomeMessage(profile);
}
@Override
public void onStop() {
super.onStop();
accessTokenTracker.stopTracking();
profileTracker.stopTracking();
}
private void displayWelcomeMessage(Profile profile){
if(profile != null){
textView.setText("Welcome " + profile.getName());
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
SendFbData.class
public class SendFbData extends ActionBarActivity { public SendFbData(){ } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_get_user_info); } public void getUserPermission(final Activity activity, final ServiceCall serviceCall){ final Dialog dialog = new Dialog(activity); dialog.setContentView(R.layout.custom_alert_dialog); Button btn_no = (Button) dialog.findViewById(R.id.btn_no); Button btn_yes = (Button) dialog.findViewById(R.id.btn_yes); btn_no.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); btn_yes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new ServiceCall(activity, serviceCall).execute(); } }); dialog.show(); } }
Log cat
Process: android.wake.testfbloginwithlibrary, PID: 7253
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/wake/androidlib/R$layout;
at com.wake.androidlib.SendFbData.getUserPermission(SendFbData.java:65)
at android.wake.testfbloginwithlibrary.MainFragment$1$1.onCompleted(MainFragment.java:90)
at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.wake.androidlib.R$layout" on path: DexPathList[[zip file "/data/app/android.wake.testfbloginwithlibrary-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.wake.androidlib.SendFbData.getUserPermission(SendFbData.java:65)
at android.wake.testfbloginwithlibrary.MainFragment$1$1.onCompleted(MainFragment.java:90)
at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Suppressed: java.lang.ClassNotFoundException: com.wake.androidlib.R$layout
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
build.gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
}
//task to delete the old jar
task deleteOldJar(type: Delete){
delete 'release/WKNS.jar'
}
//task to export contents as jar
task exportJar(type: Copy){
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
//rename the jar
rename('classes.jar', 'WKNS.jar')
}
exportJar.dependsOn(deleteOldJar, build)
尝试以下步骤,因为它对我有效 步骤1:右键单击项目并选择生成路径,然后选择配置生成路径 步骤2:选择android并删除导入的库项目。并申请 重新启动IDE并再次尝试导入它。这对我有用。希望它对你也有用。。
谢谢你你是否在build.gradleyes上添加了库依赖项。这个cod在android
AlertDialog
上运行得很好。但是当我使用自定义对话框时,它不起作用。对于自定义AlertDialog
你正在使用库,对吗?.aar还将包含.jar和资源。是否只引用jar?如果将导入语句和主项目build.gradle放在
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
}
//task to delete the old jar
task deleteOldJar(type: Delete){
delete 'release/WKNS.jar'
}
//task to export contents as jar
task exportJar(type: Copy){
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
//rename the jar
rename('classes.jar', 'WKNS.jar')
}
exportJar.dependsOn(deleteOldJar, build)