・2011/04/10
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の開発環境の構築

●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開発環境の構築のつもり
Eclipse重い重い! Javaって相変わらずクソ重いね!
Google Android JNI NDKの C/C++言語開発環境の構築のつもり
Android JNI NDKで C言語の Native関数を作って処理速度を高速化
au IS01(SHARP)アンドロイド端末で開発
SHARPの Android端末 IS01で開発
au IS01(SHARP)アンドロイド端末で遊ぼう
SHARPの Android端末 IS01の便利な設定や使い方
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/