2013-09-28 380 views
6

Tôi không hiểu tại sao xảy ra ngoại lệ này.Tên ngoại lệ của AndroidNotFoundException

Trong hoạt động chính của tôi, trong phương pháp onCreate tôi có mã này lúc đầu:

try { 
     PackageInfo info = this.getPackageManager().getPackageInfo("com.mypacket", PackageManager.GET_SIGNATURES); 

     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      Log.e("Hash", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } catch (NameNotFoundException e) { 
     Log.e("Hash", "Error: NameNotFoundException"); 
     e.printStackTrace(); 

    } catch (NoSuchAlgorithmException e) { 
     Log.e("Hash", "Error: NoSuchAlgorithmException"); 
    } 

Trường hợp ngoại lệ là NameNotFoundException, tôi muốn giải quyết nó vì tôi nghĩ rằng nó gây ra vấn đề với Facebook SDK.

Cảm ơn tất cả.

Nếu giúp, đây là AndroidManifest.xml của tôi

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myPackageName.app" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="17" /> 

    <supports-screens android:anyDensity="true" 
        android:largeScreens="true" 
        android:normalScreens="true" 
        android:smallScreens="true" 
        android:xlargeScreens="true" />      

    <permission android:name="com.myPackageName.app.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> 
    <uses-permission android:name="com.myPackageName.app.permission.MAPS_RECEIVE"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 


    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <permission android:name="com.myPackageName.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.myPackageName.app.permission.C2D_MESSAGE" /> 





<uses-feature 
android:glEsVersion="0x00020000" 
android:required="true"/>  

    <application 
     android:name="@string/app_name" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 

     <receiver 
      android:name=".GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.myPackageName.app" /> 
      </intent-filter> 
     </receiver> 
     <service android:name=".GcmIntentService" /> 


     <activity 
      android:name="com.myPackageName.app.SplashScreen" 
      android:screenOrientation="portrait" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 



     <!-- Google Maps V2 API KEY --> 
     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="apy key" />     
    </application> 

</manifest> 

Trả lời

9

Bạn đã nhận được tên gói của mình sai. Vì sự an toàn, hãy luôn sử dụng Context.getPackageName().

PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_SIGNATURES); 
0

Sự cố này xảy ra khi bạn tạo dự án khóa băm và ứng dụng mà bạn đang tạo khóa băm không nằm trong thư mục/không gian làm việc, vì vậy ngoại lệ phát sinh NameNotFoundException.

Chúc mừng :)

0

Điều đó có nghĩa là bạn đang cung cấp tên gói sai hoặc có thể bạn không chắc chắn về tên gói.

Trường hợp 1. nếu bạn biết về tên gói của mình, chỉ cần kiểm tra chéo nó.

Trường hợp 2. nếu bạn không chắc chắn về tên gói ( tình trạng này cũng có thể xảy ra khi bạn đã làm một số mã refactoring tức Rename Package)

Có nhiều cách tiếp cận để sửa chữa nó

tên
  1. gói được đề cập trong phần trên của AndroidManifest.xml

enter image description here

  1. Nếu nó vẫn không được giải quyết để có được tên gói bằng

    Context.getPackageName();

hoặc

Log.d(); 

Trong Logcat kiểm tra tên gói ứng dụng cột nên được đề cập ở đây.