読者です 読者をやめる 読者になる 読者になる

Android Studio 2.2 Preview 3前後の開発環境の挙動変化メモ

android gradle AS ndk


  • gradle:2.2.0-alpha3 の話

これビルドは成功するんだけど、9-patchが効かないっていう
わけわかんない状態で、この記事探すまで途方に暮れていました。

$ANDROID_SDK_HOME/build-tools/24.0.0-preview

というフォルダなのに
中のpackage.xml

<revision><major>24</major><minor>0</minor><micro>0</micro></revision>

と書いているせいで

buildToolsVersion 24

と書かないとエラーになるみたいな話と同じようなヤッツケ感があるよな(汗


  • DefaultManifestParserの話

これは勘違いで、2.2-prev2の段階で,public属性は治ってました。
エラーが出てたのはクラスの引数が変わったからというのが正解みたい

  • build.gradle (2.1ベース)
import com.android.builder.core.DefaultManifestParser 
android { 
	defaultConfig { 
		def manifestParser = new DefaultManifestParser() 
		applicationId = manifestParser.getPackage(android.sourceSets.main.manifest.srcFile) 
		versionName = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) 

		def manifest = new XmlSlurper().parse(android.sourceSets.main.manifest.srcFile) 
		versionCode manifest.'@android:versionCode'.text() as int 
		minSdkVersion manifestParser.getMinSdkVersion(android.sourceSets.main.manifest.srcFile) 
		targetSdkVersion manifestParser.getTargetSdkVersion(android.sourceSets.main.manifest.srcFile) 
	}
 }

=>

  • build.gradle (2.2ベース)
import com.android.builder.core.DefaultManifestParser 
android { 
	defaultConfig { 
		def manifestParser = new DefaultManifestParser(android.sourceSets.main.manifest.srcFile) 
		applicationId = manifestParser.getPackage() 
		versionName = manifestParser.getVersionName() 
		versionCode manifestParser.getVersionCode() 
		minSdkVersion manifestParser.getMinSdkVersion() 
		targetSdkVersion manifestParser.getTargetSdkVersion() 
	}
 }


  • run-asの話

これ adb sync のせいなのかな?<更新されたと検知したファイルを転送するadbコマンドの機能らしい
ファイル変更監視は結構怪しいと思いますけどね。。
gradleのせいなのかandroid pluginのせいなのかわかりませんが。。

高速化されたadbとか歌われた辺りから挙動が変更されている気がします。

デバッカーでつないでいてException拾うとよく切断されるんだよな
下記を其の度に繰り返していましたが、端子の劣化が激しいので *1

  • USB接続しなおし
    • =>USBの接続モードのチェックをON/OFFにする

方が優しいらしい*2

で段落題の件
一時期動いてたrun-asの奴が動かない?? なんで〜と思ってたけど
下記に修正したら動いたので、解釈の仕方が変わったのかと思う

  • 一昔前のadb pull *3
pkgname=com.irof.hogeDriven
dbname=ScoreDB
SERIAL=192.168.56.101:5555

adb -s $SERIAL shell "run-as $pkgname 'chmod 666 /data/data/$pkgname/databases/$dbname'"
adb -s $SERIAL pull /data/data/$pkgname/databases/$dbname
adb -s $SERIAL shell "run-as $pkgname 'chmod 600 /data/data/$pkgname/databases/$dbname'"

=>

  • 最近のadb
adb -s $SERIAL shell "run-as $pkgname chmod 666 /data/data/$pkgname/databases/$dbname"
adb -s $SERIAL pull /data/data/$pkgname/databases/$dbname
adb -s $SERIAL shell "run-as $pkgname chmod 600 /data/data/$pkgname/databases/$dbname"

run-asの後の'◯◯' の[']を除くと動く。
前はどっちでも動いていたので 厳密になったのかな?


  • GradleSyncでCPUが100%
  • レイアウトプレビューでCPU100%
    • でもCustomThemeと判定される昔のレイアウトとかはまともに表示できない*4
    • ボタンとかテキストが見えないのは明らかにバグやろと。
    • 流石に画像あたりはプレビューできるようなんですが。。


新規プロジェクトで作る時の

  • ConstraintLayout

とかは綺麗にですんですけどね(NoActionBar Theme辺りが選択されてる)

これThemeが見つからないとCPUが分回る作りなんじゃないだろうか??

これも酷かった・・。
何もいじってなくてapk転送しようとしただけでこの状態になるorz

しかも動いたら動いたで

のお話にハマると。。。*5


  • NDKの話

また新しいNDKのDSLが実装中らしい。
AndroidModelは捨てたんですかね。。(汗

で、Android.mkの参照版を試してみた。

  • gradle tasksまでは成功
  • build.gradle (2.2ベース)
android { 
   externalNativeBuild{
       ndkBuild{
          path "jni/Android.mk"
       }
    }
}
  • 実際のNDKのタスクの実行をしようとした時点で
    • LOCAL_SRC_FILESが見つからないエラーが出る*6
  • 細かく制御したかったらぜんぶ環境変数みたいなのをDSL上でかけと。。
    • 普通にndk-build.cmdは動くんだけどな。。(汗
  • 結局今までどおりのndk対応がベストという結論でしたorz

*1:そういう観点から言うとType-Cケーブル微妙。標準添付の激短いし・・

*2:仕事場のベテランの方に教えてもらった。目から鱗

*3:ググるとよく出てくる系のネタ

*4:機能劣化と言っても差し支え無いかと。。

*5:勿論別のクラスですが。。。

*6:理由としてjni.srcDirが未サポート、定義しているとビルドエラーにしているから