2013-05-30 44 views
12

Tôi đã cập nhật dự án của mình để sử dụng hệ thống xây dựng dựa trên Gradle mới, phần lớn là vì tôi cảm thấy khó chịu vì tôi không thể cài đặt ứng dụng của mình trên thiết bị của tôi sử dụng thiết bị này vì tôi sử dụng thiết bị để phát triển. Tôi thấy rất nhiều lời hứa trong việc cung cấp packageNameSuffix của hệ thống xây dựng mới.Android Gradle Build System build cấu hình xung đột tên gói với Nhà cung cấp Authority

Sự cố mà tôi đang gặp phải bao gồm những thứ khác ngoài tên gói trong tệp kê khai. Có các phần khác phải là duy nhất, bao gồm các quyền (đặc biệt cho GCM) và Nhà cung cấp ContentProvider. Khi cố gắng cài đặt với hậu tố .debug tôi nhận được lỗi rằng quyền GCM cho gói đó chưa được xác định và tôi đang cố gắng cài đặt nhà cung cấp trùng lặp.

Có biến nào tôi có thể đặt trong tệp kê khai thay vì các chuỗi này để hệ thống xây dựng cũng sẽ thay thế các biến đó một cách thích hợp không?

Trả lời

7

Đây là giải pháp của tôi cho các sự cố GCM với packageNameSuffix.

Vấn đề chính là tên quyền cần có hậu tố ".debug". Tôi đặt quyền đó để gỡ lỗi và phát hành tệp kê khai được hợp nhất thành tệp kê khai cuối cùng.

AndroidManfest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.experiment.myapplication" 
      android:versionCode="1" 
      android:versionName="1.0" > 

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

    <uses-permission android:name="android.permission.INTERNET" /> 
    <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" /> 

    <uses-permission android:name="android.permission.VIBRATE" /> 
    <application 
      android:allowBackup="true" 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
     <activity 
       android:name=".MainActivity" 
       android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


    </application> 

</manifest> 

debug AndroidManifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.experiment.myapplication"> 


    <permission android:name="com.experiment.myapplication.debug.permission.C2D_MESSAGE" 
       android:protectionLevel="signature" /> 
    <uses-permission android:name="com.experiment.myapplication.debug.permission.C2D_MESSAGE" /> 

    <application> 
     <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.experiment.myapplication.debug" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest 

>

phát hành Android Manifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.experiment.myapplication" > 

    <permission android:name="com.experiment.myapplication.permission.C2D_MESSAGE" 
       android:protectionLevel="signature" /> 
    <uses-permission android:name="com.experiment.myapplication.permission.C2D_MESSAGE" /> 

    <application> 
     <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.experiment.myapplication" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
+0

Khi sử dụng dịch vụ phát mới thay vì ứng dụng gcm-client cũ, bạn không cần quyền cụ thể theo gói. – deekay

+0

Tôi đã cố gắng sử dụng giải pháp này với Urban Airship và nó không hoạt động như mong đợi. Tôi vẫn nhận được xung đột hợp nhất về tên gói. –

+0

Điều này làm việc tuyệt vời cho tôi, Cảm ơn! – rharter

6

Đây là giới hạn hiện tại đã biết về việc thay đổi tên gói cho một biến thể. Tôi đang lên kế hoạch sửa lỗi này càng sớm càng tốt.

+4

Có cố định hay không. Bạn có thể thêm liên kết để theo dõi vấn đề để theo dõi vấn đề này không? –

+0

Mọi cập nhật Xav? –

+0

Có bất kỳ cập nhật nào về vấn đề này không? – spierce7

1

tôi đã thay thế tất cả các tên gói ứng dụng của tôi trong AndroidManifest.xml với placeholder $ {} PACKAGENAME, vì vậy Sáp nhập Manifest làm tất cả công việc

Ví dụ:

<uses-permission android:name="${packageName}.permission.C2D_MESSAGE" /> 
1

Bạn có thể sử dụng:

<permission android:name=".permission.C2D_MESSAGE" 
      android:protectionLevel="signature" /> 
<uses-permission android:name=".permission.C2D_MESSAGE" /> 

Android sẽ thêm tên gói hiện tự động, khi bạn bắt đầu với một số ..

Các vấn đề liên quan