HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
English Translate 中文翻訳
LINK
BACK
 

2011/04/10

Google Android開発環境の構築 SDK r10版 Google Android開発環境の構築 SDK r10版

(SDK r8から Java難読化&最適化の ProGuardが標準装備されました。(最新のSDK r10版に対応))

Tags: [Android開発]





●Android SDK r8 メモ

 Android SDK r8から ProGuardが標準装備されました。

 ProGuardとは、Javaのプログラムを
 軽量化、最適化(Optimizer)、難読化(Obfuscator)するものです。
 主にリバースエンジニアリングを困難にする目的で使われます。

●ProGuard Java Optimizer and Obfuscator
ProGuard Java Optimizer and Obfuscator


●Download the Android SDK
Download the Android SDK

Windows android-sdk_r08-windows.zip
Windows android-sdk_r08-windows.zip


●Download the Android NDK
Download the Android NDK

Windows
android-ndk-r5-windows.zip
62217450 bytes
59cbb02d91d74e9c5c7278d94c989e80
Windows android-ndk-r5-windows.zip


●Apache Ant
Apache Ant

Binary Distributions
apache-ant-1.8.2-bin.zip
apache-ant-1.8.2-bin.zip

●Java SDK
Windows x86 76.81 MB jdk-6u29-windows-i586.exe
2011/10 Java SE Development Kit 6 Update 29


・Android SDK r8の開発環境の構築
Android SDK r8の開発環境の構築




●ProGuardを有効にする方法

 プロジェクトのディレクトリの
default.properties
 に
proguard.config=proguard.cfg
 を追加する。

 例:default.propertiesファイル
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.

# Project target.
target=android-4
proguard.config=proguard.cfg


 ProGuardを使用しているときのコンパイル途中の表示

-obfuscate:
    [mkdir] Created dir: D:\Android\Project\ProGuardTest\bin\proguard
      [jar] Building jar: D:\Android\Project\ProGuardTest\bin\proguard\original.jar
 [proguard] ProGuard, version 4.4
 [proguard] ProGuard is released under the GNU General Public License. The autho
rs of all
 [proguard] programs or plugins that link to it (com.android.ant, ...) therefore

 [proguard] must ensure that these programs carry the GNU General Public License
 as well.
 [proguard] Reading input...

 ~~ 省略 ~~



●ProGuardの生成ファイル

{Project-Directory}\bin\proguard
 に
dump.txt
mapping.txt
obfuscated.jar
original.jar
seeds.txt
usage.txt
 のファイルができます。

 このうち、
mapping.txt
 は、難読化されたスタックトレースをデコードするのに必要となります。

 retrace.batコマンドを使います。

 retrace.batコマンド
ProGuard Decoding Obfuscated Stack Traces
ProGuard Decoding Obfuscated Stack Traces

retrace.bat [-verbose] mapping.txt [<stacktrace_file>]



●Android SDK r8 メモ2( Androidの コンパイルを UTF-8対応にする方法。)

 Androidの Javaのソースリストに日本語を含む場合、Antでコンパイルでエラーが出る。

 Antの定義ファイルの文字エンコード指定が Asciiになっている所為です。
 ※ いいかげんデフォルト UTF-8の状態で配布しろよ。
 ※ Android SDK r9からデフォルトで UTF-8の状態になりました。

[javac] D:\Android\Project\hello\src\com\example\hello\Hello.java:**:
警告: この文字は、エンコーディング ascii にマップできません。


150行目を変更
D:\Android\android-sdk\tools\ant
 の
lib_rules.xml
 の encoding="ascii"を encoding="utf-8"に書き換える。
        <javac encoding="utf-8" target="1.5" debug="true" extdirs=""
                destdir="${out.classes.absolute.dir}"
                bootclasspathref="android.target.classpath"


121行目を変更
D:\Android\android-sdk\tools\ant
 の
main_rules.xml
 の value="ascii"を value="utf-8"に書き換える。
    <!-- compilation options -->
    <property name="java.encoding" value="utf-8" />
    <property name="java.target" value="1.5" />
    <property name="java.source" value="1.5" />


 さらに、下記の警告が出る場合は
 ※ Android SDK r9 / Android SDK r10でもこの警告は出ます。

compile:
    [javac] D:\Android\android-sdk\tools\ant\main_rules.xml:361:
      warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last;
        set to false for repeatable builds

355行目に追加
 includeAntRuntime="true"を追加する。
    



●Android SDK r12以降で発生?

No resource found @android:style/WindowTitle
No resource found @android:style/WindowTitleBackground
 等のエラーが発生する。

 エラーの症状
[aapt.exe] hoge\res\values\styles.xml:123: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/Widget.TextView.ListSeparator'.
[aapt.exe] hoge\res\values\styles.xml:234: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/WindowTitle'.
[aapt.exe] hoge\res\values\styles.xml:345: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/WindowTitleBackground'.
 原因
 "@android:style/~"の幾つかが使用禁止になったため。

 回避方法
"@android:style/WindowTitle"
 を
"@*android:style/WindowTitle"
 にする。



●AdSenseを組み込んでいると ProGuardでエラーが出る。

AdSense AFMAUtil ProGuard Exception = [java.lang.ArrayIndexOutOfBoundsException]

 エラーの内容
 [proguard] ProGuard, version 4.4
 [proguard] ProGuard is released under the GNU General Public License. The authors of all
 [proguard] programs or plugins that link to it (com.android.ant, ...) therefore
 [proguard] must ensure that these programs carry the GNU General Public License as well.
 [proguard] Reading input...
 [proguard] Initializing...
 [proguard] Note: com.google.ads.AFMAUtil:
   can't find dynamically referenced class android.os.SystemProperties
 [proguard] Note: com.google.ads.AFMAUtil accesses a declared method
   'get(java.lang.String)' dynamically
 [proguard]       Maybe this is library method
   'android.content.ContentValues {java.lang.Object get(java.lang.String); }'
 [proguard]       Maybe this is library method
   'android.hardware.Camera$Parameters { java.lang.String get(java.lang.String); }'
 [proguard]       Maybe this is library method
   'android.os.Bundle { java.lang.Object get(java.lang.String); }'

 ~~ 省略 ~~

 [proguard] Note: there were 1 accesses to class members by means of introspection.
 [proguard]       You should consider explicitly keeping the mentioned class members
 [proguard]       (using '-keep' or '-keepclassmembers').
 [proguard] Ignoring unused library classes...
 [proguard]   Original number of library classes: 2400
 [proguard]   Final number of library classes:    387
 [proguard] Printing kept classes, fields, and methods...
 [proguard] Shrinking...
 [proguard] Printing usage to [D:\Android\Project\XXX\\bin\proguard\usage.txt]...
 [proguard] Removing unused program classes and class elements...
 [proguard]   Original number of program classes: 91
 [proguard]   Final number of program classes:    66
 [proguard] Optimizing...
 [proguard] Unexpected error while performing partial evaluation:
 [proguard]   Class       = [com/google/ads/AFMAUtil]
 [proguard]   Method      = [c([B[B)[B]
 [proguard]   Exception   = [java.lang.ArrayIndexOutOfBoundsException] (-1)

BUILD FAILED
D:\Android\android-sdk\tools\ant\main_rules.xml:431:
  java.lang.ArrayIndexOutOfBoundsException: -1
        at proguard.optimize.peephole.BranchTargetFinder.visitConstantInstruction
          (BranchTargetFinder.java:496)


 解決方法
proguard.cfg
 に
-dontoptimize
 を追加する。

 ※ -keep 指定で行けそうな気がするが、指定方法が分からない。

 元の proguard.cfgのファイルはここにある。
D:\Android\android-sdk\tools\lib

proguard.cfg
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService

 ~~ 省略 ~~

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-dontoptimize




●strings.xmlで error: Error parsing XML: not well-formed (invalid token)

[aapt.exe] hoge_project\res\values\strings.xml:xx: error: Error parsing XML: not well-formed (invalid token)

formatted="false"を追加

<string name="hoge_string" formatted="false">Hoge String(s)</string>



●AdMobを組み込んで ProGuard最適化すると実行時に「予期せず停止しました」のエラーが出る。

※ この情報は2011/4以降の新バージョンの AdMobです。

 ProGuard AdMob InflateException LayoutInflater com.google.ads.GoogleAdView

 解決方法
proguard.cfg
 に
-keep public class com.google.ads.GoogleAdView
 を追加する。


●AdMobを組み込んで ProGuard最適化すると実行時に「予期せず停止しました」のエラーが出る。

※ この情報は旧バージョンの AdMobです。

 ProGuard AdMob InflateException LayoutInflater com.admob.android.ads.AdView

 解決方法
proguard.cfg
 に
-keep public class com.admob.android.ads.AdView
 を追加する。

ProGuardでの AdMobのエラーログ
ERROR/AndroidRuntime(993): java.lang.RuntimeException:
 Unable to start activity ComponentInfo
  {jp.ne.neko.freewing.xxx/jp.ne.neko.freewing.xxx}:
   android.view.InflateException: Binary XML file line #32:
    Error inflating class com.admob.android.ads.AdView
ERROR/AndroidRuntime(993):
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2705)
ERROR/AndroidRuntime(993):
 Caused by: android.view.InflateException:
  Binary XML file line #32: Error inflating class com.admob.android.ads.AdView
ERROR/AndroidRuntime(993):
 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)




●俺メモ

import android.os.Build.VERSION_CODES

Build.VERSION_CODES

if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO)
{
Eclair以下の処理
}


1 int BASE October 2008: The original, first, version of Android.
2 int BASE_1_1 February 2009: First Android update, officially called 1.1.

--- 壁 --- 1.5
3 int CUPCAKE May 2009: Android 1.5.

--- 壁 --- 1.6
4 int DONUT September 2009: Android 1.6.

--- 壁 --- 2.0
5 int ECLAIR November 2009: Android 2.0
Applications targeting this or a later release will get these new changes in behavior
6 int ECLAIR_0_1 December 2009: Android 2.0.1

--- 壁 --- 2.1
7 int ECLAIR_MR1 January 2010: Android 2.1

--- 壁 --- 2.2
8 int FROYO June 2010: Android 2.2

--- 壁 --- 2.3
9 int GINGERBREAD November 2010: Android 2.3
10 int GINGERBREAD_MR1 February 2011: Android 2.3.3.

--- 壁 --- 3.0
11 int HONEYCOMB February 2011: Android 3.0.
12 int HONEYCOMB_MR1 May 2011: Android 3.1.
13 int HONEYCOMB_MR2 June 2011: Android 3.2.

--- 壁 --- 4.0
14 Android 4.0.1 4.0.2 Ice Cream Sandwich
15 Android 4.0.3 Ice Cream Sandwich

--- 番外 ---
10000 int CUR_DEVELOPMENT Magic version number for a current development build, which has not yet turned into an official release.


http://source.android.com/source/build-numbers.html

Code name Version API level
(no code name) 1.0 API level 1
(no code name) 1.1 API level 2
Cupcake 1.5 API level 3, NDK 1
Donut 1.6 API level 4, NDK 2
Eclair 2.0 API level 5
Eclair 2.0.1 API level 6
Eclair 2.1 API level 7, NDK 3
Froyo 2.2.x API level 8, NDK 4
Gingerbread 2.3 - 2.3.2 API level 9, NDK 5
Gingerbread 2.3.3 - 2.3.7 API level 10
Honeycomb 3.0 API level 11
Honeycomb 3.1 API level 12, NDK 6
Honeycomb 3.2.x API level 13
IceCreamSandwich 4.0.1 - 4.0.2 API level 14, NDK 7
IceCreamSandwich 4.0.3 API level 15

--

Build Tag Notes
DRC83 android-1.6_r1.1 earliest Donut version, ADP1, ADP2
DRC92 android-1.6_r1.2
DRD08 android-1.6_r1.3
DRD20 android-1.6_r1.4
DMD64 android-1.6_r1.5 latest Donut version
ESD20 android-2.0_r1 earliest Eclair version
ESD56 android-2.0.1_r1
ERD79 android-2.1_r1 Nexus One
ERE27 android-2.1_r2 Nexus One
EPE54B android-2.1_r2.1p Nexus One
ESE81 android-2.1_r2.1s
EPF21B android-2.1_r2.1p2 latest Eclair version
FRF85B android-2.2_r1 earliest Froyo version, Nexus One
FRF91 android-2.2_r1.1 Nexus One
FRG01B android-2.2_r1.2
FRG22D android-2.2_r1.3
FRG83 android-2.2.1_r1 Nexus One
FRG83D android-2.2.1_r2 Nexus One
FRG83G android-2.2.2_r1 Nexus One
FRK76 android-2.2.3_r1
FRK76C android-2.2.3_r2 latest Froyo version
GRH55 android-2.3_r1 earliest Gingerbread version, Nexus S
GRH78 android-2.3.1_r1 Nexus S
GRH78C android-2.3.2_r1 Nexus S
GRI40 android-2.3.3_r1 Nexus One, Nexus S
GRI54 android-2.3.3_r1.1 Nexus S
GRJ06D android-2.3.4_r0.9 Nexus S 4G
GRJ22 android-2.3.4_r1 Nexus One, Nexus S, Nexus S 4G
GRJ90 android-2.3.5_r1 Nexus S 4G
GRK39C android-2.3.6_r0.9 Nexus S
GRK39F android-2.3.6_r1 Nexus One, Nexus S
GWK74 android-2.3.7_r1 latest Gingerbread version, Nexus S 4G
ITL41D android-4.0.1_r1 earliest IceCreamSandwich version, Galaxy Nexus
ITL41D android-4.0.1_r1.1 Galaxy Nexus
ITL41F android-4.0.1_r1.2 Galaxy Nexus
ICL53F android-4.0.2_r1 Galaxy Nexus
IML74K android-4.0.3_r1 Nexus S
IML77 latest IceCreamSandwich version



●俺メモ

 Android Source Code GitHub
https://github.com/OESF/

 OHA-Android-2.3.4_r1.0
https://github.com/OESF/OHA-Android-2.3.4_r1.0.git
 OHA-Android-2.3.4_r1.0.zip
https://github.com/OESF/OHA-Android-2.3.4_r1.0/zipball/master



●俺メモ
 [Windows XP/VISTA/7][UTILITY][TOOL] APK Multi-Tool
http://forum.xda-developers.com/showthread.php?t=1310151

[Windows XP/VISTA/7][UTILITY][TOOL] APK Multi-Tool
I am currently working on a major update to the apk manager application as well and changing the name to APK Multi-Tool with some new added features and also to fix some issues with some code errors.


 ApkMultiTools (APK Multi-Tools)
https://github.com/ApkMultiTools

 build/tools/signapk/SignApk.java
 out/host/linux-x86/framework/signapk.jar

http://code.google.com/p/android-apktool/downloads/list




Tags: [Android開発]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

Google Android開発環境の構築のつもり
Google Android開発環境の構築のつもり

  Eclipse重い重い! Javaって相変わらずクソ重いね!

Google Android NDKの開発環境の構築のつもり
Google Android NDKの開発環境の構築のつもり

  Android NDKで Native関数を作って処理速度を高速化

au IS01(SHARP)アンドロイド端末で開発
au IS01(SHARP)アンドロイド端末で開発

  SHARPの Android端末 IS01で開発

au IS01(SHARP)アンドロイド端末で遊ぼう
au IS01(SHARP)アンドロイド端末で遊ぼう

  SHARPの Android端末 IS01の便利な設定や使い方

Android WiFi On/Off Toggle switcher
Android WiFi On/Off Toggle switcher

  WiFiのON/OFFを交互に切り替えの簡単操作の便利ツール



[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2011 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/android/android_sdk_r8/