2012-08-22 16 views
11

Tôi đang cố gắng kiểm tra thanh toán trong ứng dụng trong ứng dụng của mình. Tôi có tất cả thiết lập thanh toán và id sản phẩm trong cửa hàng Play nhưng để kiểm tra giao dịch, tôi cần phải ký ứng dụng của mình với kho khóa phát hành của tôi nếu không thì không thành công.Tôi có thể xây dựng ứng dụng Android của mình là gỡ lỗi nhưng ký với keystore phát hành

Tôi đang sử dụng IntelliJ Idea (Ver. 11 CE) và không thể tìm ra cách cấu hình dự án để xây dựng với bộ gỡ lỗi và ký với kho khóa phát hành trước khi triển khai vào thiết bị của mình.

Tôi thấy tôi có thể đặt đích ant cho cấu hình và tôi giả sử đó là cách để đi nhưng vì tệp build.xml của tôi nhập Android SDK /tools/ant/build.xml không có bất kỳ mục tiêu nào trong chọn.

Để gỡ lỗi, tôi chỉ cần bật thiết lập android: debuggable = "true" trong tệp kê khai? Bất cứ ai có một gợi ý cho một mục tiêu ant mà sẽ làm những điều tôi cần? Một thứ mà tôi có thể thêm vào tệp build.xml của mình?

Trả lời

2

Với con trỏ theo hình thức đúng hướng Ixx tôi đã kết thúc việc thiết android: debuggable = "true" và sử dụng dòng lệnh để xây dựng và triển khai. Sau đó gắn vào quá trình chạy để gỡ lỗi.

Ứng dụng của tôi được thiết lập để xây dựng tại dòng lệnh với tệp ant build.xml nhập tệp androidSDK/tools/ant/build.xml và tệp build.properties hỗ trợ. Tôi phát hiện ra rằng khi tôi đặt android: debuggable = "true" và sau đó làm 'ant release', quá trình tạo sẽ tạo ra một gói ứng dụng có thể gỡ lỗi và ký nó với khóa phát hành.

Tôi tạo ra một mục tiêu trong file build.xml của tôi mà tôi có thể thiết lập cho trường hợp này được gọi là set-debuggable

<target name="set-debuggable" description="sets internal named property"> 
    <echo>Setting internal named property...</echo> 
    <property name="set.debuggable" value="true" /> 
</target> 

Sau đó, trong -pre-xây dựng mục tiêu của tôi tôi đã thêm

<if> 
     <condition> 
      <isset property="set.debuggable"/> 
     </condition> 
     <then> 
      <replaceregexp 
        file="AndroidManifest.xml" 
        match="(android:debuggable=&#34;).*(&#34;)" 
        replace="\1true\2"/> 

     </then> 
     <else> 
      <replaceregexp 
        file="AndroidManifest.xml" 
        match="(android:debuggable=&#34;).*(&#34;)" 
        replace="\1false\2"/> 

     </else> 
    </if> 

này tạo ra gói ứng dụng có thể gỡ lỗi của tôi được ký với phím phát hành của tôi khi tôi sử dụng 'bản phát hành có thể gỡ lỗi được đặt ra'. Sau đó, tôi sử dụng 'adb install -r myApp-release.apk' để cài đặt lại bản dựng mới. Sau đó tôi có thể khởi chạy và đính kèm vào ứng dụng đang chạy để gỡ lỗi thông qua mua hàng trong ứng dụng.

Dường như cả IntelliJ Idea và Eclipse đều sử dụng khóa gỡ lỗi tự ký ở đâu đó trên hệ thống của bạn để xây dựng và triển khai một gói gỡ lỗi từ IDE.Trong một số trường hợp, tôi có thể thay thế khóa gỡ lỗi mà IDE đã tạo bằng khóa phát hành của tôi và cố gắng xây dựng để ký bằng khóa đó (và tìm mật khẩu để sử dụng khóa), nhưng quá trình xây dựng ở trên đã mất rất ít thời gian để thiết lập và bắt đầu sử dụng. Nếu bất cứ ai đi theo hướng này và làm cho nó hoạt động, vui lòng thêm nhận xét vào câu trả lời của tôi.

0

Tôi có điều này trong build.xml để thiết lập thuộc tính debuggable:

<condition property="build.env" value="${build.env}" else="local"> 
    <isset property="build.env" /> 
</condition> 

<!-- set debuggable=false for release and true for debug and others --> 
<condition property="isDebuggable" value="false" else="true"> 
     <equals arg1="${build.env}" arg2="release" /> 
    </condition> 
    <replaceregexp 
     file="AndroidManifest.xml" 
     match="(android:debuggable=&#34;).*(&#34;)" 
     replace="\1${isDebuggable}\2" 
     > 
    </replaceregexp> 

đâu build.env được chuyển cho chương trình kiến ​​như thế này (trong trường hợp của "giải phóng"):

ant <targets> -Dbuild.env=release 

để đăng nhập, bạn thêm video này vào các tập tin bất động sản:

key.store=C:/path/to/keystore/mykeystore.keystore 

ứng dụng gỡ lỗi có một keystore debug (mặc dù tôi Curren tly không nhớ chính xác lý do tại sao keystore này là cần thiết) ->here 's thêm thông tin về nó. Có lẽ bạn chỉ cần sử dụng kho khóa phát hành thay thế.

-1

Thử đặt cờ debuggable thành true trong tệp kê khai Android của bạn.

<application 
     android:debuggable="true" 

Debuggable Flag

1

Kể từ IntelliJ IDEA 12 (không biết về các phiên bản trước), bạn có thể đặt "kho khóa gỡ lỗi tùy chỉnh" trong khía cạnh Android cho mô-đun cấp cao nhất. Bằng cách này, bạn có thể kiểm soát cách APK của bạn được ký và thực sự sử dụng các phím phát hành của bạn để gỡ lỗi khỏi IDE.

+9

Tôi đã thử cách này, nhưng làm cách nào tôi có thể đặt mật khẩu được liên kết với kho khóa? Tôi luôn nhận được 'java.io.IOException: Keystore bị giả mạo, hoặc mật khẩu không chính xác' – ffleandro

0

IntelliJ đang sử dụng tệp .android/debug.keystore bởi defult để ký phiên bản gỡ lỗi của ứng dụng của bạn. Bạn có thể thay đổi tệp này bằng kho khóa phát hành của mình hoặc nhập chứng chỉ phát hành của bạn vào tệp debug.keystore. Tôi đã chuẩn bị hướng dẫn từng bước cho điều này tại số http://www.denizoguz.com/2013/01/12/failure-install_parse_failed_inconsistent_certificates/

0

Cho rằng bây giờ Lint khuyên chống mã hóa cứng của cờ "android: debuggable" trong AndroidManifest.xml Tôi đã có giải pháp tốt hơn (ít nhất là đối với trường hợp của tôi). Chỉ cần xác định một mục tiêu ant mới trong custom_rules.xml của bạn mà làm tất cả mọi thứ chính xác giống như mục tiêu gỡ lỗi android nào, nhưng ký apk với khóa phát hành là tốt.

<target name="build-debug" depends="-set-debug-files, -do-debug, -release-sign, -post-build" /> 

Các công việc phụ duy nhất mà cần phải được bổ sung là "-release-sign" trước khi "-post-build" và sau đó chạy "bulid-debug" của bạn thay vì Android "debug" mục tiêu.

Hoặc, bạn có thể chỉ là "-release-dấu" để phụ thuộc debug như thế này:

<target name="build-debug" depends="debug, -release-sign" /> 

nhưng điều này không làm việc cho tôi, vì tôi làm một số công cụ bổ sung vào "-post-xây dựng" và cần ký gói trước khi "-post-build".