2012-03-15 19 views
8

Tôi đang cố đặt android:versionName trong tệp kê khai android của mình làm tham chiếu đến tài nguyên chuỗi được lưu trữ trong tệp tài nguyên bên ngoài.Đặt android: versionName làm tham chiếu đến chuỗi tài nguyên dẫn đến NullPointerException trong trình mô phỏng

Dưới đây là một đoạn trích từ AndroidManifest.xml tôi:

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.toycorporation" 
    android:versionCode="@integer/version_code" 
    android:versionName="@string/version_name" 
> 

và nội dung của file build.xml nằm dưới res/values disrectory của dự án của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item type="string" name="build_date">03/15/2012</item> 
    <item type="integer" name="version_code">315281</item> 
    <item type="string" name="version_name">3.15.28.1</item>     
</resources> 

Sau đó tôi cố gắng để lấy lại số phiên bản để hiển thị nó trên màn hình Giới thiệu về ứng dụng của tôi.

PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),0); 
Log.d("PackageInfo", "Version name: " + String.valueOf(packageInfo.versionName)); 

Mô tả sự cố:

Khi tôi xây dựng ứng dụng và tự động cài đặt nó trên thiết bị HTC của tôi tất cả mọi thứ hoạt động hoàn hảo. Tên phiên bản được chuyển qua tham chiếu và trên màn hình Giới thiệu, tôi nhận được giá trị tên phiên bản được ghi trong nhật ký. Nhưng khi tôi cố gắng xây dựng ứng dụng và khởi chạy nó trên trình giả lập, tôi nhận được null thay vì giá trị tên phiên bản.

Tôi đã cố gắng xây dựng và cài đặt ứng dụng cho trình giả lập bằng Eclipse và IDEA. Vì vậy, có vẻ như vấn đề không liên quan đến IDE.

UPDATE:

Một điều thêm xuất hiện mà không làm việc với việc sử dụng đó của versionNameversionCode. Không thể triển khai ứng dụng cho Google Play. Các lỗi sau xuất hiện:

Các tập tin không hợp lệ: ERROR nhận 'android: Mã phiên bản' thuộc tính: thuộc tính không phải là một giá trị số nguyên

+0

sử dụng ' 3.15.28.1' hoạt động? –

+1

Không, không. Tôi vừa cố thêm tài nguyên chuỗi đơn giản vào 'strings.xml' và sử dụng tham chiếu đến nó trong' AndroidManifest.xml' như @Espiandev khuyên. Vẫn không có may mắn. –

+0

Bản sao của http://stackoverflow.com/questions/6018079/reference-an-integer-resource-for-android-manifest-versioncode –

Trả lời

2

Tôi nghĩ rằng đó là một kết hợp của các vấn đề với cách tiếp cận này/cách bạn đang sử dụng nó.

1.) nếu bạn có thể biên dịch và tải APK lên thị trường Android và số phiên bản và tên chính xác được sử dụng thì bạn có thể sử dụng tham chiếu tài nguyên cho android: versionCode = "@ integer/version_code" android: versionName = "@ string/version_name"

Nếu bạn không thể thì bạn không nên sử dụng các cảnh báo.

2.) Nếu bạn định thực hiện phương pháp này, tại sao hãy thử truy xuất chúng từ packageinfo bằng cách sử dụng getResources(). GetString (R.string.version_name)?

Tất cả trong tất cả, tôi không thấy nhiều lợi thế của cách tiếp cận này ngoài việc có thể hoán đổi một tệp tài nguyên bằng hộp dựng. Trong trường hợp này, bạn có thể cần đến cách tiếp cận thứ hai để điền vào màn hình của bạn.

+3

Mục đích duy nhất của việc sử dụng các tham chiếu trong tệp kê khai là di chuyển tất cả các giá trị liên quan đến xây dựng (như vậy dưới dạng tên phiên bản, mã phiên bản, ngày tạo) để tách tệp xml giúp việc xây dựng tập lệnh dễ dàng thay đổi các giá trị đó ở một nơi duy nhất. –

2

Bạn có thể đặt tên phiên bản trong tệp kê khai dưới dạng tham chiếu đến tài nguyên chuỗi, chứ không phải mã phiên bản.

0

Điều này sẽ hiệu quả. trong dimensions.xml, hãy thêm phần sau đây.

<resources> 
    <item name="version_number" format="float" type="dimen">2.8</item> 
    <item name="version_code" format="integer" type="dimen">8</item> 
</resources> 

Trong tệp kê khai của bạn, hãy thêm thông tin sau.

android:versionCode="@dimen/version_code" 
    android:versionName="@dimen/version_number" 
Các vấn đề liên quan